1

Тема: ...создать в админке опенкарт что-то свое...

Возникла проблема, точнее не проблема , а затруднение - необходимо в админке опенкарт добавлять, изменять, удалятькакие-либо поля в базе данных ( на деле нужен доступ к таблице продуктов). То есть мне необходимо, что бы в меню админки был пункт, напрмер "МyQ", при переходе с которого открывается страница моего шаблона в админке, в котором я могу редактировать таблицы БД (или другие действия... не обязательно с БД... например, открывается страница собственной админской записной книжки).

Вопрос в том, как это можно реализовать? Интересует только создание в админке соответствующего пункта меню и управление действием по ссылке из него? Куда мы должны попасть по этой ссылке (наверно нужно начинать с моего ...admin/controller/myq_pl.php)

Файл admin/controller/myq.php создан.

<?php
class ControllerCatalogMyQ extends Controller {
   private $error = array();

   public function index() {
     $this->load->language('catalog/myq_pl');

     $this->document->setTitle($this->language->get('heading_title'));

     $this->load->model('catalog/myq_pl');

     $this->getList();
   }

Поделиться

2

Re: ...создать в админке опенкарт что-то свое...

Дополнительный пункт меню в админку опенкарт вставляем следующим образом:

Открываем файл шаблона вертикального меню админки: admin/view/template/common/menu.tpl и в нужное место кода вставляем:

      <li><a href="<?php echo $myq_pl; ?>"><?php echo $text_myq_pl; ?></a></li>    

Открываем языковой файл: admin/language/russian/common/menu.php и добавляем в него строку:

$_['text_myq_pl']                = 'МyQ';

Открываем файл  контроллера: admin/controller/common/menu.php и находим там, например, следующий код:

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

Ниже добавляем:

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

Находим в этом же файле, например, следующий код:

        $data['product'] = $this->url->link('catalog/product', 'token=' . $this->session->data['token'], 'SSL');

Ниже добавляем:

        $data['myq_pl'] = $this->url->link('catalog/myq_pl', 'token=' . $this->session->data['token'], 'SSL');

Поделиться

3

Re: ...создать в админке опенкарт что-то свое...

Дорабатываем ранее созданный (см. первый пост) файл admin/controller/myq_pl.php следующим образом:

<?php
class ControllerCatalogMyQ extends Controller {
    public function index() {
        $this->load->language('catalog/myq_pl');

        $this->document->setTitle($this->language->get('heading_title'));

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

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

        $data['breadcrumbs'] = array();

        $data['breadcrumbs'][] = array(
            'text' => $this->language->get('text_home'),
            'href' => $this->url->link('common/dashboard', 'token=' . $this->session->data['token'], 'SSL')
        );

        $data['breadcrumbs'][] = array(
            'text' => $this->language->get('heading_title'),
            'href' => $this->url->link('catalog/myq_pl', 'token=' . $this->session->data['token'], 'SSL')
        );
        
        $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('catalog/myq_pl_form.tpl', $data));
    }


    
}

Создаем файл шаблона myq_pl_form.tpl в admin/view/template/catalog

<?php echo $header; ?><?php echo $column_left; ?>

<div id="content">
<div class="page-header">
  <div class="container-fluid">
    <h1><?php echo $heading_title; ?></h1>
    <ul class="breadcrumb">
      <?php foreach ($breadcrumbs as $breadcrumb) { ?>
      <li><a href="<?php echo $breadcrumb['href']; ?>"><?php echo $breadcrumb['text']; ?></a></li>
      <?php } ?>
    </ul>
  </div>
</div>
<div class="container-fluid">
  <div class="panel panel-default">
    <div class="panel-heading">
      <h3 class="panel-title"><i class="fa fa-exclamation-triangle"></i> <?php echo $heading_title; ?></h3>
    </div>
    <div class="panel-body">
      <p class="text-center"><?php echo "Здесь организуем вывод каких-то данных..."; ?></p>
    </div>
  </div>
</div>




<?php echo $footer; ?>

Поделиться

4

Re: ...создать в админке опенкарт что-то свое...

Тема очень востребована и уже имеются конкретные предложения.

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


PS: Это сырой шаблон, поэтому у новичка он даже в таком виде работать не будет. Но функциональность НОВОГО КОДА админки я гарантирую.

Поделиться

5

Re: ...создать в админке опенкарт что-то свое...

При добавлении в БД нового продукта, он во фронтенде (на странице сайта) не отображается, хотя в базе есть все, что необходимо для этого. Есно, раз тема по собственному контроллеру, то в базу продукт добавлялся минуя стандартные функции опенкарт, которые отвечают за добавление нового товара, то есть в админке мы заносили данные о новом товаре непосредственно в БД (понятно, что не руками, а соответствующим кодом).

Сразу замечу, что новые товары не будут видны и в админке (при их наличии в БД), если при занесении в БД не будет правильно определено поле(ячейка) language_id в таблице product_description. По умолчанию - она 0. Ее необходимо определить в соответствии со своим действующим языком. Для русской версии опенкарт language_id по умолчанию должен соответствовать единице. То есть language_id вашего товара в этой таблице =1.

Продолжу. Для того, чтобы новые товары отображались на страницах сайта (например, в том же поиске) необходимо, чтобы ID товара был ОБЯЗАТЕЛЬНО занесен в таблицу product_to_store. Для этого достаточно в вашем контроллере, в том месте где вы добавляли данные о продукте в таблицы, просто определить массив product_store, и больше делать ничего не нужно:

                        // Данные для таблицы product_to_story
                        $data['product_store'][] = array();

Ну и конечно же в модель вашего контроллера добавить, если там нет следующего кода:

        if (isset($data['product_store'])) {
            foreach ($data['product_store'] as $store_id) {
                $this->db->query("INSERT INTO " . DB_PREFIX . "product_to_store SET product_id = '" . (int)$product_id . "', store_id = '" . (int)$store_id . "'");
            }
        }

Поделиться

6

Re: ...создать в админке опенкарт что-то свое...

Небольшое уточнеybе. В первом - третьем постах каталог для собственного контроллера указан не совсем верно (admin/controller/myq.php). Скорее всего разработчик будет ориентироваться на уже существующие подпапки. Например, admin/controller/catalog/myq.php

Поделиться