Opencart - Прикручиваем Представление К Контроллеру

Тема в разделе "Общие вопросы", создана пользователем admin, 6 ноя 2016.

  1. TopicStarter Overlay
    Offline

    admin Команда форума Администратор

    Сообщения:
    2.141
    Симпатии:
    62.365
    Репутация:
    154
    В OpenCart, на один контроллер можно посадить не только один файл представления, но и не сколько. Когда в адресной строке своего браузера, вы прописываете

    «http://site.ru/index.php?route=common/home»

    то вы обращаетесь к контроллеру home.php, который располагается в директории catalog\view\theme\имя_темы\template\common. А если быть точнее, то к его функции public function index(). Вызов index() будет всегда когда вы указываете просто имя контроллера в GET запросе «?route=common/home».

    Можно сказать, что функции контроллеров выполняют следующие задачи

    • получения значений от языковых файлов (те что в catalog\language\…)

      Код:
      /*загрузка язык.файла*/
      $this->language->load('имя_папки_с_язык_файл/имя_язык_файл')
      /*присваивание значения переменной и языкового файла*/
      $this->data['имя_переменной']=$this->language->get('имя_перем_в_язык_файл');
    • передача и получения значений от моделей (те что в catalog\model\…)

      Код:
      /*загрузка модели*/
      $this->load->model('имя_Папки_С_моделью/Имя_Модели');
      /*присваивание переменной значение функции модели*/
      $this->data['имя_переменной']=$this->model_имя_Папки_С_моделью_имя_Модели->имя_Функции();
    • обработка информации, работа с переменными (тут используются просто возможности языка php)
    • выбор файла представления (.tpl) для вывода пользователю

      Код:
      if(file_exists(DIR_TEMPLATE.$this->config->get('config_template').'/template/common/header.tpl')){
      $this->template=$this->config->get('config_template').'/template/имя_папки_с_файлом_представления/имя_файла_представления.tpl';
      }else{
      $this->template='default/template/имя_папки_с_файлом_представления/имя_файла_представления.tpl';
      }
    • объявление и инициализация переменных (через $this->data[…] ) видимых для выбранного tpl.

      Код:
      $this->data['имя_перемен_видимой_для_представления']="Значения переменной";
    Мы можем в одном контроллере помимо index() указывать свои функции, но вызываться они будут уже следующим GET запросом

    Код:
    ?route=common/home/имя_функции
    По минимуму ваша «функция обработчик» в контроллере должна иметь две строки

    Код:
    $this->template=$this->config->get('config_template').'/template/одноименная_директория_в_которой_находиться_контроллер/имя_файла_представления.tpl';
    $this->response->setOutput($this->render());
    Где в первой строке мы указываем файл представления, для вывода пользователю, а во второй указываем, что браузеру нужно вернуть ответ.
    Пример

    Создадим, в контроллере catalog\controller\common\home.php функцию public function test() и наполним ее следующим содержимым

    Код:
    $this->data['test']="Тестовая переменная, мы можем присвоить ей значение из GET запроса, из модели или из языкового файла";[/B][/B]
    [B][B]$this->template=$this->config->get('config_template').'/template/common/test.tpl';
    $this->response->setOutput($this->render());

    Далее, создадим файл представления catalog\view\theme\имя_шаблона\template\common\test.tpl, в нем пропишем

    Код:
    <html>[/B][/B]
    [B][B]  <head>
    <meta http-equiv="Content-Type"content="text/html; charset=UTF-8">
      </head>
      <body>
    <h1><?phpecho$test?></h1>
      </body>
    </html>

    При выводе по url адресу «http://site.ru/index.php?route=common/home/test» мы в ответ получим

    1.jpg

    Итог, мы создали свой файл представления test.tpl и прикрутили его к контроллеру home.php.