Добавление новых модулей в OpenCart 2

Я хочу добавить дополнительные позиции для модулей. Как добавить новую позицию модуля в opencart 2?

Здесь мне нравится эта информация. но это работает только для старой версии OpenCart. http://www.opencartnews.com/tutorials/adding-new-modules-positions/

Как можно сделать то же самое в Opencart 2?

Пожалуйста помоги…!

Вы можете добиться этого, изменив следующий файл ядра.

  1. admin / view / template / design / layout_form.tpl добавить новую позицию в этот тег select

    <select name="layout_module[<?php echo $module_row; ?>][position]"

    а также в этом методе в нижней части файла

    function addModule() {

  2. И тогда вам нужно добавить шаблон и контроллер в каталог / view / theme / default / template / common, вы можете использовать тот же код, что и в content_top.php и content_top.tpl, просто переименуйте файл в качестве своего нового имени позиции ,

  3. А затем в домашнем контроллере или на любой другой странице, где требуется эта позиция, вы должны добавить

    $data['new_position'] = $this->load->controller('common/new_position');

  4. После добавления его в контроллер вам нужно добавить его в файлы шаблонов. Добавьте ко всем шаблонам страниц, на которых вы хотите отобразить пользовательскую позицию.

    <?php echo $new_position; ?>

Например, чтобы показать позицию на домашней странице, вы добавите <?php echo $new_position; ?> <?php echo $new_position; ?> в catalog/view/theme/YOUR_THEME/template/common/home.tpl

Я знаю, что это немного поздно, но это может быть полезно другим, также приведенный выше ответ помог мне, но для новичков легко понять, что я пишу это.

Я вставляю в него новую позицию content_footer.

Протестировано для 2.3.0.2

Сначала мы будем редактировать файлы для администратора.

1] Перейти к admin / view / template / design / layout_form.tpl

По умолчанию opencart дает 4 позиции для модулей, которые находят код ниже

  <table id="module-content-bottom" class="table table-striped table-bordered table-hover"> 

поэтому после копирования весь этот раздел от начала таблицы до таблицы закрываем и вставляем ее ниже и меняем content_bottom на content_footer

  <table id="module-content-footer" class="table table-striped table-bordered table-hover"> <thead> <tr> <td class="text-center"><?php echo $text_content_footer; ?></td> </tr> </thead> <tbody> <?php foreach ($layout_modules as $layout_module) { ?> <?php if ($layout_module['position'] == 'content_footer') { ?> <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-footer');" 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> 

2] Теперь найдите функцию addModule () и найдите следующую строку

 $('#module-column-left, #module-column-right, #module-content-top, #module-content-bottom ').delegate 

Теперь добавьте # module-content-footer

 $('#module-column-left, #module-column-right, #module-content-top, #module-content-bottom , #module-content-footer').delegate( 

Тот же путь ниже строки для триггера

 $('#module-column-left, #module-column-right, #module-content-top, #module-content-bottom , #module-content-footer' ).trigger 

3] В admin / controller / design / layout.php найдите следующую функцию

 protected function getForm() 

и эта строка в нем

 $data['text_content_footer'] = $this->language->get('text_content_footer'); 

4] Теперь добавьте следующую строку в admin / language / en-gb / layout.php

 $_['text_content_footer'] = 'Content Footer'; 

Изменение лицевых файлов

1] Создайте новый файл шаблона в каталоге / view / theme / themename / template / common / content_footer.tpl

 <?php foreach ($modules as $module) { ?> 

2] Создайте новый файл контроллера в каталоге / controller / common / content_footer.php и поместите нижеприведенный код

  <?php class ControllerCommonContentFooter extends Controller { public function index() { $this->load->model('design/layout'); if (isset($this->request->get['route'])) { $route = (string)$this->request->get['route']; } else { $route = 'common/home'; } $layout_id = 0; if ($route == 'product/category' && isset($this->request->get['path'])) { $this->load->model('catalog/category'); $path = explode('_', (string)$this->request->get['path']); $layout_id = $this->model_catalog_category->getCategoryLayoutId(end($path)); } if ($route == 'product/product' && isset($this->request->get['product_id'])) { $this->load->model('catalog/product'); $layout_id = $this->model_catalog_product->getProductLayoutId($this->request->get['product_id']); } 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']); } if (!$layout_id) { $layout_id = $this->model_design_layout->getLayout($route); } if (!$layout_id) { $layout_id = $this->config->get('config_layout_id'); } $this->load->model('extension/module'); $data['modules'] = array(); $modules = $this->model_design_layout->getLayoutModules($layout_id, 'content_footer'); foreach ($modules as $module) { $part = explode('.', $module['code']); if (isset($part[0]) && $this->config->get($part[0] . '_status')) { $module_data = $this->load->controller('extension/module/' . $part[0]); if ($module_data) { $data['modules'][] = $module_data; } } if (isset($part[1])) { $setting_info = $this->model_extension_module->getModule($part[1]); if ($setting_info && $setting_info['status']) { $output = $this->load->controller('extension/module/' . $part[0], $setting_info); if ($output) { $data['modules'][] = $output; } } } } return $this->load->view('common/content_footer', $data); }} 

3] Теперь добавьте следующую строку в каталог / controller / common / home.php

 $data['content_footer'] = $this->load->controller('common/content_footer'); 

4] Наконец, чтобы показать позицию на главной странице, вы добавите

 <?php echo $content_footer; ?> 

в каталог / просмотр / тема / имя / шаблон / общий / home.tpl

введите описание изображения здесь