Добавить подменю в OpenCart по событиям в админке
Я хочу добавить подменю в OpenCart, под меню каталога в админке. в прошлом мы использовали ocmod или vqmod для этого, пример ocmod здесь:
<?xml version="1.0" encoding="utf-8"?>
<modification>
<code>submenu5</code>
<name>submenu5</name>
<version>2.3</version>
<author>codertj</author>
<link>codertj.com</link>
<!-- edit header controller -->
<file path="admin/controller/common/column_left.php">
<!-- create link to your page -->
<operation error="log">
<search><![CDATA[if ($this->user->hasPermission('access', 'catalog/product')) {]]></search>
<add position="before"><![CDATA[
if ($this->user->hasPermission('access', 'catalog/product')) {
$catalog[] = array(
'name' => $this->language->get('text_hello_world'),
'href' => $this->url->link('report/helloworld', 'token=' . $this->session->data['token'], true),
'children' => array()
);
}
]]></add>
</operation>
</file>
<!-- edit header template -->
<file path="admin/language/en-gb/common/column_left.php">
<operation error="log">
<search><![CDATA[$_['text_product']]]></search>
<add position="before"><![CDATA[
$_['text_hello_world'] = 'Hello World';
]]></add>
</operation>
</file>
</modification>
Сейчас opencart использует систему Events, но я не могу найти решение для преобразования этого ocmod в событие!
1 ответ
Вы можете сделать это следующим образом. Мы предполагаем, что вы записали событие в базу данных, если вы этого не сделали, вы можете быстро создать его с помощью следующего запроса:
INSERT INTO `oc_event` (`code`, `trigger`, `action`, `status`) VALUES ('mymodule', 'admin/view/common/column_left/before', 'extension/module/mymodule/addSubmenu', 1)
админ \ контроллер \ расширение \ модуль \mymodule.php
<?php
class ControllerExtensionModuleMymodule extends Controller {
public function addSubmenu(&$route = false, &$data = false, &$output = false){
$my_language = $this->load->language('extension/module/mymodule');
$data['menus'][1]['children'][] = array(
'name' => $my_language['text_hello_world'],
'href' => $this->url->link('report/helloworld', 'token=' . $this->session->data['token'], true),
'children' => array()
);
}
}
админ \ язык \ ан-гб \ расширение \ модуль \mymodule.php
<?php
$_['text_hello_world'] = 'Hello World!';
Я проверил это с OpenCart 2.3
Как добавить запись в меню администратора для Opencart 3x под заданный пункт меню администратора с помощью событий
Эта текущая тема посвящена добавлению элемента подменю над ссылкой "Каталог -> Продукты".
- Удалите событие, если оно существует, зарегистрируйте событие (возможно, в вашем расширении при установке)
Вариант A: используйте метод Opencart
$this->load->model('настройка / событие');
$ this-> model_setting_event->deleteEvent('
MY_EVENT
');$ this->model_setting_event->addEvent('
MY_EVENT
',' admin / view / common / column_left / before',' extension / module /MY_EXTENSION
/ADDTOADMINMENU
');
Вариант B: вставьте свой код в базу данных из модели Opencart (или даже из функции контроллера, если вас не слишком заботит MVC):
$this->db->query("
INSERT INTO
`oc_event`
(`code`, `trigger`, `action`, `status`, `sort_order`)
VALUES
('MY_EVENT', 'admin/view/common/column_left/before', 'extension/module/MY_EXTENSION/ADDTOADMINMENU', 1, 0)
");
Вариант C: запустите этот запрос в базе данных Opencart (из phpMyAdmin, Adminer и т. Д.):
INSERT INTO
`oc_event`
(`code`, `trigger`, `action`, `status`, `sort_order`)
VALUES
('MY_EVENT', 'admin/view/common/column_left/before', 'extension/module/MY_EXTENSION/ADDTOADMINMENU', 1, 0)
Добавьте общедоступную функцию события в свое расширение
public function ADDTOADMINMENU(&$route, &$data){ /** * Check if current logged in user has permission to access that link * Replace "extension/module/MY_EXTENSION" with your target path * This check can very well be ignored/deleted... **/ if ($this->user->hasPermission('access', 'extension/module/MY_EXTENSION')) { $my_menu_entry = array( 'id' => 'menu-MY_EXTENSION', 'icon' => 'fa-check', 'name' => 'My menu entry', 'href' => $this->url->link('extension/module/MY_EXTENSION', 'user_token=' . $this->session->data['user_token'], true), 'children' => array() ); $target_menu_id = 'menu-catalog'; $target_submenu_href = $this->url->link('catalog/product', 'user_token=' . $this->session->data['user_token'], true); $new_menu = array(); foreach( $data['menus'] as &$menu ) { if( $menu['id'] == $target_menu_id ) { $new_submenu = array(); foreach( $menu['children'] as $submenu ) { if( $submenu['href'] == $target_submenu_href ) { $new_submenu[] = $my_menu_entry; $new_submenu[] = $submenu; } else { $new_submenu[] = $submenu; } } $menu['children'] = $new_submenu; $new_menu[] = $menu; } else { $new_menu[] = $menu; } } $data['menus'] = $new_menu; } }