OpenCart, прикручиваем представление к контроллеру
<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» мы в ответ получим
Итог, мы создали свой файл представления test.tpl и прикрутили его к контроллеру home.php.