Краткое руководство по созданию новых позиций модулей
Небольшое пошаговое руководство, как добавить новую позицию в макете сайта на базе 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; ?>