Добавление в макет новой области в Opencart 3.x

0
2003

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

 

В итоге на сайте в карточке товара будет отображаться нужный модуль:

 

 

 

 

 

 

 

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь