Добавим новую область отображения модулей в макетах Дизайна в CMS Opencart 3.x
В других версиях OpenCart все аналогично:
Добавим в админке новую область, файл /admin/view/template/design/layout_form.twig
Сделаем, например, копию нижней области макета. Найдем код верстки:
<table id=»module-content-bottom» class=»table table-striped table-bordered table-hover»>
…
</table>
После этой таблицы вставим копию и изменим везде «bottom» на «bottom2«, получится такой код новой таблицы:
<table id="module-content-bottom2" class="table table-striped table-bordered table-hover"> <thead> <tr> <td class="text-center">Низ страницы (для карточки товара)</td> </tr> </thead> <tbody> {% for layout_module in layout_modules %} {% if layout_module.position == 'content_bottom2' %} <tr id="module-row{{ module_row }}"> <td class="text-left"><div class="input-group"> <select name="layout_module[{{ module_row }}][code]" class="form-control input-sm"> {% for extension in extensions %} <optgroup label="{{ extension.name }}"> {% if not extension.module %} {% if extension.code == layout_module.code %} <option value="{{ extension.code }}" selected="selected">{{ extension.name }}</option> {% else %} <option value="{{ extension.code }}">{{ extension.name }}</option> {% endif %} {% else %} {% for module in extension.module %} {% if module.code == layout_module.code %} <option value="{{ module.code }}" selected="selected">{{ module.name }}</option> {% else %} <option value="{{ module.code }}">{{ module.name }}</option> {% endif %} {% endfor %} {% endif %} </optgroup> {% endfor %} </select> <input type="hidden" name="layout_module[{{ module_row }}][position]" value="{{ layout_module.position }}" /> <input type="hidden" name="layout_module[{{ module_row }}][sort_order]" value="{{ layout_module.sort_order }}" /> <div class="input-group-btn"><a href="{{ layout_module.edit }}" type="button" data-toggle="tooltip" title="{{ button_edit }}" target="_blank" class="btn btn-primary btn-sm"><i class="fa fa-pencil"></i></a> <button type="button" onclick="$('#module-row{{ module_row }}').remove();" data-toggle="tooltip" title="{{ button_remove }}" class="btn btn-danger btn-sm"><i class="fa fa fa-minus-circle"></i></button> </div> </div></td> </tr> {% set module_row = module_row + 1 %} {% endif %} {% endfor %} </tbody> <tfoot> <tr> <td class="text-left"><div class="input-group"> <select class="form-control input-sm"> <option value=""></option> {% for extension in extensions %} <optgroup label="{{ extension.name }}"> {% if not extension.module %} <option value="{{ extension.code }}">{{ extension.name }}</option> {% else %} {% for module in extension.module %} <option value="{{ module.code }}">{{ module.name }}</option> {% endfor %} {% endif %} </optgroup> {% endfor %} </select> <div class="input-group-btn"> <button type="button" onclick="addModule('content-bottom2');" data-toggle="tooltip" title="{{ button_module_add }}" class="btn btn-primary btn-sm"><i class="fa fa-plus-circle"></i></button> </div> </div></td> </tr> </tfoot> </table>
Также ниже в этом же файле допишем id «#module-content-bottom2»
Перейдем в phpmyadmin и изменим длину поля «position» минимум на 18 символов (т.к. если этого не сделать — список модулей не сохранится в макете):
Далее добавим отображение модуля из макета в публичной части сайта.
Файл /catalog/controller/product/product.php
найдем строку
$data['content_bottom'] = $this->load->controller('common/content_bottom');
и допишем после нее
$data['content_bottom2'] = $this->load->controller('common/content_bottom2');
В каталоге /catalog/controller/common/ создадим файл content_bottom2.php (копия content_bottom.php — в той же папке)
и в 3-х местах где встречается «bottom» поменяем на «bottom2«:
class ControllerCommonContentBottom2 extends Controller { ... $modules = $this->model_design_layout->getLayoutModules($layout_id, 'content_bottom2'); ... return $this->load->view('common/content_bottom2', $data);
В каталоге /catalog/view/theme/имя_темы/template/common/ создадим файл content_bottom2.twig с содержимым:
{% for module in modules %}
{{ module }}
{% endfor %}
Далее выводим, например, в карточке товара в нужном месте в файле /catalog/view/theme/имя_темы/template/product/product.twig
{{ content_bottom2 }}
В итоге на сайте в карточке товара будет отображаться нужный модуль: