Краткое руководство по созданию новых позиций модулей
Небольшое пошаговое руководство, как добавить новую позицию в макете сайта на базе OpenCart 2.3
1. В файле /admin/view/template/design/layout_form.tpl копируем table с позицией и изменяем название позиции на свое, например:
<div class="col-lg-3 col-md-4 col-sm-12">
<table id="module-content_show" class="table table-striped table-bordered table-hover">
<thead>
<tr>
<td class="text-center">Слайдшоу</td>
</tr>
</thead>
<tbody>
<?php foreach ($layout_modules as $layout_module) { ?>
<?php if ($layout_module['position'] == 'content_show') { ?>
<tr id="module-row<?php echo $module_row; ?>">
<td class="text-left"><div class="input-group">
<select name="layout_module[<?php echo $module_row; ?>][code]" class="form-control input-sm">
<?php foreach ($extensions as $extension) { ?>
<optgroup label="<?php echo $extension['name']; ?>">
<?php if (!$extension['module']) { ?>
<?php if ($extension['code'] == $layout_module['code']) { ?>
<option value="<?php echo $extension['code']; ?>" selected="selected"><?php echo $extension['name']; ?></option>
<?php } else { ?>
<option value="<?php echo $extension['code']; ?>"><?php echo $extension['name']; ?></option>
<?php } ?>
<?php } else { ?>
<?php foreach ($extension['module'] as $module) { ?>
<?php if ($module['code'] == $layout_module['code']) { ?>
<option value="<?php echo $module['code']; ?>" selected="selected"><?php echo $module['name']; ?></option>
<?php } else { ?>
<option value="<?php echo $module['code']; ?>"><?php echo $module['name']; ?></option>
<?php } ?>
<?php } ?>
<?php } ?>
</optgroup>
<?php } ?>
</select>
<input type="hidden" name="layout_module[<?php echo $module_row; ?>][position]" value="<?php echo $layout_module['position']; ?>" />
<input type="hidden" name="layout_module[<?php echo $module_row; ?>][sort_order]" value="<?php echo $layout_module['sort_order']; ?>" />
<div class="input-group-btn"><a href="/<?php echo $layout_module['edit']; ?>" type="button" data-toggle="tooltip" title="<?php echo $button_edit; ?>" target="_blank" class="btn btn-primary btn-sm"><i class="fa fa-pencil"></i></a>
<button type="button" onclick="$('#module-row<?php echo $module_row; ?>').remove();" data-toggle="tooltip" title="<?php echo $button_remove; ?>" class="btn btn-danger btn-sm"><i class="fa fa fa-minus-circle"></i></button>
</div>
</div></td>
</tr>
<?php $module_row++; ?>
<?php } ?>
<?php } ?>
</tbody>
<tfoot>
<tr>
<td class="text-left"><div class="input-group">
<select class="form-control input-sm">
<?php foreach ($extensions as $extension) { ?>
<optgroup label="<?php echo $extension['name']; ?>">
<?php if (!$extension['module']) { ?>
<option value="<?php echo $extension['code']; ?>"><?php echo $extension['name']; ?></option>
<?php } else { ?>
<?php foreach ($extension['module'] as $module) { ?>
<option value="<?php echo $module['code']; ?>"><?php echo $module['name']; ?></option>
<?php } ?>
<?php } ?>
</optgroup>
<?php } ?>
</select>
<div class="input-group-btn">
<button type="button" onclick="addModule('content_show');" data-toggle="tooltip" title="<?php echo $button_module_add; ?>" class="btn btn-primary btn-sm"><i class="fa fa-plus-circle"></i></button>
</div>
</div></td>
</tr>
</tfoot>
</table>
</div>
2. В файле admin/language/ru-ru/design/layout.php добавляем значение текста для новой позиции, например:
$_['text_(новая позиция))'] = 'Новая позиция';
3. В файле контроллера layout admin/controller/design/layout.php добавляем значение текста новой позиции, например:
$data['text_(новая позиция)’] = $this->language->get('text_(новая позиция)');
4. Создаем контроллер для новой позиции в папке catalog/controller/common/. К примеру можно скопировать контроллер content_top. И в наименовании класса меняем ContentTop на свое.
5. Далее ищем в новом контроллере строку:
$modules = $this->model_design_layout->getLayoutModules($layout_id, 'content_top');
и меняем название позиции на свое.
6. В этом же файле ищем, есть ли роутинг для нашей страницы (где хотим вывести новую позицию). Это необходимо для того, чтобы задать значение $layout_id для получения списка модулей с помощью функции getLayoutModules. Если нет, добавляем: копируем существующий роутинг, например:
if ($route == 'information/information' && isset($this->request->get['information_id'])) {
$this->load->model('catalog/information');
$layout_id = $this->model_catalog_information->getInformationLayoutId($this->request->get['information_id']);
}
и заменяем route на route нашей страницы (его можно найти в url страницы, например: ?route=checkout/checkout).
7. Далее создаем шаблон нашей позиции в папке catalog/view/theme/(имя шаблона)/template/common/. Можно скопировать также, например, шаблон content_top.
8. Далее заходим в контроллер нашей страницы (модуля) и зададим вызов контроллера новой позиции в переменную. Например:
$data['(новая_позиция)'] = $this->load->controller('common/(новая_позиция)');
9. в шаблоне страницы или модуля добавьте вывод новой позиции, например:
<?php echo $content_new; ?>




