OpenCart 🇺🇦

Статья "Шаблонизатор в OpenCart"

Шаблонизатор в opencart не что иное как... да нет его здесь вовсе! Самый обычный php-код, вот и все. Никаких smarty, twig и прочего. Вместо шаблонизатора здесь работает примерно следующий механизм:
  1. В контроллере происходит вызов метода $this->render(), при этом название шаблона береться из приватного свойства $this->template
  2. Затем происходит распаковка из контроллера массива $this->data (читайте документацию про функцию php extract()
  3. Сразу после подключается файл, который был указан в $this->template, вот так: DIR_TEMPLATE . $this->template, где DIR_TEMPLATE - путь к папке с шаблонами.
  4. Интерпретатор выполняет весь код, который был внутри и затем html-результат выводится на экран
В чем особенности? Когда мы в нашем контроллере добавляем данные в массив данных (например:
$this->data['foo'] = 'какой-то текст';
), то в представлении обращение к этой-же самой переменной происходит обычным
< ?php echo $foo; ?>
Вторая особенность - влаживание страниц. Благодаря $this->children в контроллере мы можем влаживать страницы одну в одну. Как это работает? в родительском контроллере перечисляется список маршрутов:
$this->children = array(
	'common/column_left',
	'common/column_right',
	'common/content_top',
	'common/content_bottom',
	'common/footer',
	'common/header'		
);
затем по всем этим маршрутам вызываются соответсвующие контроллеры. Их содержжимое компилируется в готовую страницу (html-код) и возвращается родительскому контроллеру. После всех этих махинаций мы можем спокойно выводить скомпилированый html-код дочерних контроллеров (таблица соответсвий):
'common/column_left', | < ?php echo $column_left; ?>
'common/column_right', | < ?php echo $column_right; ?>
'common/content_top', | < ?php echo $content_top; ?>
'common/content_bottom', | < ?php echo $content_bottom; ?>
'common/footer', | < ?php echo $footer; ?>
'common/header' | < ?php echo $header; ?>
Вот, в принципе, и весь механизм работы шаблонизатора...