Как вывести информацию в «Панель состояния» на OpenCart

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

Для начало надо создать модуль для этой панели, после чего его активировать и указать в настройках, порядок вывода.

Описание структуры модуля для 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

Установка и активация модуля в следующей статье.

 

5 комментариев

  • Vlad

    очень полезный материал, интуитивно сам готовил по похожим уже модулям, но хотелось бы увидеть «Готовый модуль можно скачать по ссылке.» к сожалению она не открывается а у меня так и не вышло победить размещение своего модуля, буду рад если найдете время и возможно передадите рабочую ссылку

    • admin

      Отправил вам на почту архив.
      Ссылка рабочая, покрайне мере в моем региона, может у вас есть какието ограничения

      • Vlad

        Благодарю, но и сам успел найти свои ошибки и исправить, я создавал модуль который работал с flot.js график. И вся у меня была проблема правильно в своем контроллере оформить массив для json чтоб ажахнуть в twig в javascript

  • Vlad

    не могу решить регистрацию своего модуля,
    я прописывал функцию 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

    • Vlad

      как правильно в opencart 3 прописать public function install() ни где нет четких рекомендаций

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *