Краткое руководство по созданию новых позиций модулей

Небольшое пошаговое руководство, как добавить новую позицию в макете сайта на базе 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"><?php echo $text_content_show; ?></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; ?>