Добавим новую область отображения модулей в макетах Дизайна в 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 }}
В итоге на сайте в карточке товара будет отображаться нужный модуль:
















