<html>
   <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
   </head>
   <body>
	<h1><?php echo $test ?></h1>
   </body>
</html>

 

В OpenCart, на один контроллер можно посадить не только один файл представления, но и не сколько. Когда в адресной строке своего браузера, вы прописываете

 

«http://доменное_ия/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 запроса, из модели или из языкового файла";
$this->template = $this->config->get('config_template') . '/template/common/test.tpl';
$this->response->setOutput($this->render());

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

 

<html>
   <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
   </head>
   <body>
	<h1><?php echo $test ?></h1>
   </body>
</html>

 

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

17

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

 

<html>
   <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
   </head>
   <body>
    <h1><?php echo $test ?></h1>
   </body>
</html>