Ребята, решение есть - ссылка. Но на всякий пожарный, если вдруг через несколько дней (недель, месяцев и т.д) страница с решением перестанет открываться, привожу инструкцию ниже:
Начнем.
Главное что нужно запомнить перед началом добавления, структуру папки по адресу admin/view/template/module/название.tpl, каждый шаблон отвечает за вывод модуля. Важно выбрать один необходимый модуль, можно несколько или хоть все. Например шаблон featured.tpl отвечает за вывод рекомендуемых товаров и т.д.
Сейчас по порядку. Пример: Допустим нам нужно вывести модуль слайдера в отдельный блок и назвать его <?php echo $content_slider; ?>
1. Создание контроллера
Нужно создать головной файл с настройками в catalog/controller/common/ с названием content_slider.php в него добавить код:
<?php
class ControllerCommonContentSlider extends Controller {
public function index() {
$this->load->model('design/layout');
$this->load->model('catalog/category');
$this->load->model('catalog/product');
$this->load->model('catalog/information');
if (isset($this->request->get['route'])) {
$route = (string)$this->request->get['route'];
} else {
$route = 'common/home';
}
$layout_id = 0;
if ($route == 'product/category' && isset($this->request->get['path'])) {
$path = explode('_', (string)$this->request->get['path']);
$layout_id = $this->model_catalog_category->getCategoryLayoutId(end($path));
}
if ($route == 'product/product' && isset($this->request->get['product_id'])) {
$layout_id = $this->model_catalog_product->getProductLayoutId($this->request->get['product_id']);
}
if ($route == 'information/information' && isset($this->request->get['information_id'])) {
$layout_id = $this->model_catalog_information->getInformationLayoutId($this->request->get['information_id']);
}
if (!$layout_id) {
$layout_id = $this->model_design_layout->getLayout($route);
}
if (!$layout_id) {
$layout_id = $this->config->get('config_layout_id');
}
$module_data = array();
$this->load->model('setting/extension');
$extensions = $this->model_setting_extension->getExtensions('module');
foreach ($extensions as $extension) {
$modules = $this->config->get($extension['code'] . '_module');
if ($modules) {
foreach ($modules as $module) {
if ($module['layout_id'] == $layout_id && $module['position'] == 'content_slider' && $module['status']) {
$module_data[] = array(
'code' => $extension['code'],
'setting' => $module,
'sort_order' => $module['sort_order']
);
}
}
}
}
$sort_order = array();
foreach ($module_data as $key => $value) {
$sort_order[$key] = $value['sort_order'];
}
array_multisort($sort_order, SORT_ASC, $module_data);
$this->data['modules'] = array();
foreach ($module_data as $module) {
$module = $this->getChild('module/' . $module['code'], $module['setting']);
if ($module) {
$this->data['modules'][] = $module;
}
}
if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/common/content_slider.tpl')) {
$this->template = $this->config->get('config_template') . '/template/common/content_slider.tpl';
} else {
$this->template = 'default/template/common/content_slider.tpl';
}
$this->render();
}
}
?>
обязательно проверьте номера строк: 2 (ControllerCommonContentSlider), 50, 79, 80, 82 в них должны быть имена совпадающие с названием шаблона у меня это content_slider, в дальнейшем при создании новых блоков необязательно копировать весь текст, достаточно поправить строчки с необходимым названием, например content_sale и т.д.
2. Создание шаблона
Далее нам необходимо сделать файл шаблона для вывода модуля в catalog/view/theme/default/template/common/ здесь создаем шаблон с именем который у нас носит контроллер content_slider.tpl с внутренностями
<?php foreach ($modules as $module) { ?>
<?php echo $module; ?>
<?php } ?>
3. Объявляем модуль в нужном месте
Теперь необходимо дать понять движку где выводить наш модуль, на главной в хедере или футере. Переходим в catalog/controller/common/название.php для вывода слайдера на главной мне нужен home.php открываю его и дописываю в код
$this->children = array(
'common/column_left',
'common/column_right',
'common/content_top',
'common/content_bottom',
'common/footer',
'common/header',
);
строчку ’common/content_slider’, (Будьте внимательны, дописывайте код перед футером и хедером. Связано это из за возможных проблем с jQuery!) получится:
$this->children = array(
'common/column_left',
'common/column_right',
'common/content_top',
'common/content_bottom',
'common/content_slider',
'common/footer',
'common/header'
);
если Вы добавляете например в футер, то там Вы можете не обнаружить строчку $this->children = array, в этом случает перед $this->render(); добавьте $this->children = array(‘common/content_slider’);
4. Вывод хозяйства в шаблоне
Выводим наш модуль в шаблоне, для этого я в catalog/view/theme/default/template/common/home.tpl добавляю строчку в нужном мне месте
<?php echo $content_slider; ?>
5. Отображение в Админке
Что бы мы могли выбрать нашу новую позицию нам нужно что бы она отображалась в админке, это логично;) тут вспоминаем что было сказано в самом начале о самом важном, выбираем в admin/view/template/module/название.tpl нужный шаблон, у меня это slideshow.tpl, в нем находим
<?php if ($module['position'] == 'content_top') { ?>
<option value="content_top" selected="selected"><?php echo $text_content_top; ?></option>
<?php } else { ?>
<option value="content_top"><?php echo $text_content_top; ?></option>
<?php } ?>
и перед ним (можно после, эта строка отвечает за вывод названия из выпадающего списка в адмике) вставляем
<?php if ($module['position'] == 'content_slider') { ?>
<option value="content_slider" selected="selected">Slider Box</option>
<?php } else { ?>
<option value="content_slider">Slider Box</option>
<?php } ?>
теперь в этом же файле (ниже), ищем строку
html += ' <option value="content_top"><?php echo $text_content_top; ?></option>';
и добавляем перед ним строку
html += ' <option value="content_slider">Slider Box</option>';
Все!
Проверено мной - работает!