Для начало надо создать модуль для этой панели, после чего его активировать и указать в настройках, порядок вывода.
Описание структуры модуля для Dashboard
Для того чтобы создать модуль для админ панели, а точнее для панели состояния, надо организовать следующий набор файлов
\admin\controller\extension\dashboard\mymodule.php — контроллер
\admin\language\ru-ru\extension\dashboard\mymodule.php — языковой перевод
\admin\view\template\extension\dashboard\mymodule_form.tpl — форма для настроек
\admin\view\template\extension\dashboard\mymodule_info.tpl — форма вывода информации
Структура контроллера
class ControllerExtensionDashboardMymodule extends Controller { private $error = array(); public function index() { } public function install(){ } public function uninstall(){ } protected function validate() { } public function dashboard() { } }
Название всех функций, ну кроме validate, напрямую указано в классах для dashboard, это такие как:
class ControllerExtensionExtensionDashboard
— указано обращение к методу install
$this->load->controller('extension/dashboard/' . $this->request->get['extension'] . '/install');
— указано обращение к методу uninstall
$this->load->controller('extension/dashboard/' . $this->request->get['extension'] . '/uninstall');
class ControllerCommonDashboard
— указано обращение к методу dashboard
$output = $this->load->controller('extension/dashboard/' . $code . '/dashboard');
install и uninstall вроде как можно не использовать, но тут может быть подвох.
Если у вас только модуль для dashboard, который не связан с другими модулями, например для extension/module, то не указав эти методы и не прописав в них регистрацию и удаление extension, вы просто не активируете свой модуль.
А регистрация происходит так
$this->load->model('extension/extension'); $this->model_extension_extension->install('dashboard', 'mymodule');
после чего создается в базе в таблице oc_extension запись, где
type = dashboard
code = mymodule
в таблице oc_setting так же сохраняются настройки модуля, например
code = dashboard_mymodule; key = dashboard_mymodule_status
code = dashboard_mymodule; key = dashboard_mymodule_sort_order
code = dashboard_mymodule; key = dashboard_mymodule_width
обратите внимание, приставка «dashboard_» обязательна, так как по ней потом с таблицы выбираются настройки для вашего модуля в dashboard
Все изменения в базе система делает автоматом, и вручную там править не надо, описал это все чисто для информации, и если ваш модуль по какой то причине не работает то не лишним будет глянуть, а что собственно в базе находится.
И так, со структурой модуля для админки немного разобрались, теперь заполним методы класса, чтоб наш модуль ожил.
Реализация модуля для «Панель состояния»
Ниже привожу код контроллера модуля «\admin\controller\extension\dashboard\mymodule.php»
<?php class ControllerExtensionDashboardMymodule extends Controller { private $error = array(); public function index() { $this->load->language('extension/dashboard/mymodule'); $this->document->setTitle($this->language->get('heading_title')); $this->load->model('setting/setting'); if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) { $this->model_setting_setting->editSetting('dashboard_mymodule', $this->request->post); $this->session->data['success'] = $this->language->get('text_success'); $this->response->redirect($this->url->link('extension/extension', 'token=' . $this->session->data['token'] . '&type=dashboard', true)); } $data['heading_title'] = $this->language->get('heading_title'); $data['text_edit'] = $this->language->get('text_edit'); $data['text_enabled'] = $this->language->get('text_enabled'); $data['text_disabled'] = $this->language->get('text_disabled'); $data['entry_width'] = $this->language->get('entry_width'); $data['entry_status'] = $this->language->get('entry_status'); $data['entry_sort_order'] = $this->language->get('entry_sort_order'); $data['button_save'] = $this->language->get('button_save'); $data['button_cancel'] = $this->language->get('button_cancel'); if (isset($this->error['warning'])) { $data['error_warning'] = $this->error['warning']; } else { $data['error_warning'] = ''; } $data['breadcrumbs'] = array(); $data['breadcrumbs'][] = array( 'text' => $this->language->get('text_home'), 'href' => $this->url->link('common/dashboard', 'token=' . $this->session->data['token'], true) ); $data['breadcrumbs'][] = array( 'text' => $this->language->get('text_extension'), 'href' => $this->url->link('extension/extension', 'token=' . $this->session->data['token'] . '&type=dashboard', true) ); $data['breadcrumbs'][] = array( 'text' => $this->language->get('heading_title'), 'href' => $this->url->link('extension/dashboard/mymodule', 'token=' . $this->session->data['token'], true) ); $data['action'] = $this->url->link('extension/dashboard/mymodule', 'token=' . $this->session->data['token'], true); $data['cancel'] = $this->url->link('extension/extension', 'token=' . $this->session->data['token'] . '&type=dashboard', true); if (isset($this->request->post['dashboard_mymodule_width'])) { $data['dashboard_mymodule_width'] = $this->request->post['dashboard_mymodule_width']; } else { $data['dashboard_mymodule_width'] = $this->config->get('dashboard_mymodule_width'); } $data['columns'] = array(); for ($i = 3; $i <= 12; $i++) { $data['columns'][] = $i; } if (isset($this->request->post['dashboard_mymodule_status'])) { $data['dashboard_mymodule_status'] = $this->request->post['dashboard_mymodule_status']; } else { $data['dashboard_mymodule_status'] = $this->config->get('dashboard_mymodule_status'); } if (isset($this->request->post['dashboard_mymodule_sort_order'])) { $data['dashboard_mymodule_sort_order'] = $this->request->post['dashboard_mymodule_sort_order']; } else { $data['dashboard_mymodule_sort_order'] = $this->config->get('dashboard_mymodule_sort_order'); } $data['header'] = $this->load->controller('common/header'); $data['column_left'] = $this->load->controller('common/column_left'); $data['footer'] = $this->load->controller('common/footer'); $this->response->setOutput($this->load->view('extension/dashboard/mymodule_form', $data)); } public function install(){ if ($this->validate()) { $this->load->model('extension/extension'); $this->model_extension_extension->install('dashboard', 'mymodule'); } } public function uninstall(){ if ($this->validate()) { $this->load->model('extension/extension'); $this->model_extension_extension->uninstall('dashboard', 'mymodule' ); } } protected function validate() { if (!$this->user->hasPermission('modify', 'extension/dashboard/mymodule')) { $this->error['warning'] = $this->language->get('error_permission'); } return !$this->error; } public function dashboard() { $this->load->language('extension/dashboard/mymodule'); $data['heading_title'] = $this->language->get('heading_title'); $data['text_view'] = $this->language->get('text_view'); $data['token'] = $this->session->data['token']; return $this->load->view('extension/dashboard/mymodule_info', $data); } }
Код всех файлов модуля не вывожу в статье, так как это займет много места. Готовый модуль можно скачать по ссылке. Собственно в архиве все файлы модуля для OpenCart v2.3
Установка и активация модуля в следующей статье.
очень полезный материал, интуитивно сам готовил по похожим уже модулям, но хотелось бы увидеть «Готовый модуль можно скачать по ссылке.» к сожалению она не открывается а у меня так и не вышло победить размещение своего модуля, буду рад если найдете время и возможно передадите рабочую ссылку
Отправил вам на почту архив.
Ссылка рабочая, покрайне мере в моем региона, может у вас есть какието ограничения
Благодарю, но и сам успел найти свои ошибки и исправить, я создавал модуль который работал с flot.js график. И вся у меня была проблема правильно в своем контроллере оформить массив для json чтоб ажахнуть в twig в javascript
не могу решить регистрацию своего модуля,
я прописывал функцию public function install(){
if ($this->validate()) {
$this->load->model(‘extension/extension’);
$this->model_extension_extension->install(‘dashboard’, ‘mymodule’);
}
}
но у меня 3 opencart , вернее ocStore 3.0.2.0 и в модели есть папка extension но в ней нет другой extension
как правильно в opencart 3 прописать public function install() ни где нет четких рекомендаций