Отображение категорий «того же уровня» в Opencart: 2.3.0.2 - PullRequest
0 голосов
/ 01 февраля 2020

Вот изменения, примененные в соответствии с ответом @ daniel.

В \ catalog \ view \ theme \ default \ template \ extension \ module \ sibling_category.tpl

          <div class="box box-with-categories">
              <div class="box-heading check_2"><?php echo $heading_title; ?></div>
              <div class="strip-line"></div>
              <div class="box-content box-category">
                <ul class="accordion" id="accordion-category">
                  <?php $i = 0; foreach ($categories as $category) { $i++; ?>
                  <li class="panel">
                    <?php if ($category['category_id'] == $category_id) { ?>
                    <a href="<?php echo $category['href']; ?>" class="active"><?php echo $category['name']; ?></a>
                    <?php } else { ?>
                    <a href="<?php echo $category['href']; ?>"><?php echo $category['name']; ?></a>
                    <?php } ?>
                  </li>
                  <?php } ?>
                </ul>
              </div>
            </div>

\ catalog \ controller \ extension \ module \ sibling_category. php

  <!--Have changed the controller logic, like you said -->

и In \ catalog \ language \ en-gb \ extension \ module \ sibling_category. php

<?php
// Heading
$_['heading_title'] = 'Sibling Categories';

Итак, что теперь делать, чтобы появиться в списке -> внутри разметки категории. И есть ли какой-нибудь способ, которым мы можем сделать это в кодировании, чтобы это появилось в файле product / category.tpl, поэтому нам не нужно создавать все файлы в папке администратора.

1 Ответ

0 голосов
/ 04 февраля 2020

РЕДАКТИРОВАТЬ: Я переписал этот ответ, чтобы было проще следовать.

Лучше всего здесь создать новый модуль, а не включать его в шаблон. Есть два этапа: создание административных файлов и создание интерфейсных файлов.

FRONT END

Начните с дублирования всех интерфейсных файлов стандартной категории "Категория" модуль, который состоит из следующих файлов, переименуйте их в соответствии с вашим собственным определением, например sibling_category, где бы вы ни находились category:

\catalog\view\theme\default\template\extension\module\category.tpl
\catalog\controller\extension\module\category.php
\catalog\language\en-gb\extension\module\category.php

Здесь нам не нужна модель как модель для этого, так как У класса ModelCatalogCategory уже есть желаемая способность.

Так что теперь вам нужно изменить логи контроллера c, отредактировать вновь созданный файл контроллера sibling_category.php. Здесь мы получаем данные текущей категории ($current_id & $current_category), извлекаем идентификатор родительской категории (parent_id), а затем получаем всех потомков parent_id aka «братьев и сестер»

<?php
class ControllerExtensionModuleSiblingCategory extends Controller {
    public function index() {
        $this->load->language('extension/module/category');

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

        if (isset($this->request->get['path'])) {
            $parts = explode('_', (string)$this->request->get['path']);
        } else {
            $parts = array();
        }

        if (isset($parts[0])) {
            $data['category_id'] = $parts[0];
        } else {
            $data['category_id'] = 0;
        }

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

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

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

        $current_id = $parts[count($parts) - 1];

        $current_category = $this->model_catalog_category->getCategory($current_id);

        $siblings = $this->model_catalog_category->getCategories($current_category['parent_id']);

        foreach ($siblings as $category) {

            $data['sibling_categories'][] = array(
                'category_id' => $category['category_id'],
                'name'        => $category['name'] ,
                'href'        => $this->url->link('product/category', 'path=' . $category['category_id'])
            );
        }

        $data['current_id'] = $current_id;

        return $this->load->view('extension/module/sibling_category', $data);
    }
}

Вот настроенный по умолчанию файл модулей category.tpl шаблона O C (отредактируйте для вашего файла шаблона, соответственно заменив "$ category_id" на "$ current_id":

<div class="list-group">
  <?php foreach ($sibling_categories as $category) { ?>
  <?php if ($category['category_id'] == $current_id) { ?>
  <a href="<?php echo $category['href']; ?>" class="list-group-item active"><?php echo $category['name']; ?></a>
  <?php if ($category['children']) { ?>
  <?php foreach ($category['children'] as $child) { ?>
  <?php if ($child['category_id'] == $child_id) { ?>
  <a href="<?php echo $child['href']; ?>" class="list-group-item active">&nbsp;&nbsp;&nbsp;- <?php echo $child['name']; ?></a>
  <?php } else { ?>
  <a href="<?php echo $child['href']; ?>" class="list-group-item">&nbsp;&nbsp;&nbsp;- <?php echo $child['name']; ?></a>
  <?php } ?>
  <?php } ?>
  <?php } ?>
  <?php } else { ?>
  <a href="<?php echo $category['href']; ?>" class="list-group-item"><?php echo $category['name']; ?></a>
  <?php } ?>
  <?php } ?>
</div>

ADMIN ОБЛАСТЬ Чтобы управлять модулем в административной области, вам нужно будет продублировать языковой файл и создать контроллер и представление:

\admin\language\en-gb\extension\module\category.php

Создать новый файл по пути \admin\controller\extension\module\sibling_category.php и вставьте этот код:

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

    public function index() {
        $this->load->language('extension/module/sibling_category');

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

        $this->load->model('extension/module');

        if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
            if (!isset($this->request->get['module_id'])) {
                $this->model_extension_module->addModule('sibling_category', $this->request->post);
            } else {
                $this->model_extension_module->editModule($this->request->get['module_id'], $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=module', 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_status'] = $this->language->get('entry_status');

        $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=module', true)
        );

        if (!isset($this->request->get['module_id'])) {
            $data['breadcrumbs'][] = array(
                'text' => $this->language->get('heading_title'),
                'href' => $this->url->link('extension/module/html', 'token=' . $this->session->data['token'], true)
            );
        } else {
            $data['breadcrumbs'][] = array(
                'text' => $this->language->get('heading_title'),
                'href' => $this->url->link('extension/module/html', 'token=' . $this->session->data['token'] . '&module_id=' . $this->request->get['module_id'], true)
            );
        }

        if (!isset($this->request->get['module_id'])) {
            $data['action'] = $this->url->link('extension/module/sibling_category', 'token=' . $this->session->data['token'], true);
        } else {
            $data['action'] = $this->url->link('extension/module/sibling_category', 'token=' . $this->session->data['token'] . '&module_id=' . $this->request->get['module_id'], true);
        }

        $data['cancel'] = $this->url->link('extension/extension', 'token=' . $this->session->data['token'] . '&type=module', true);

        if (isset($this->request->get['module_id']) && ($this->request->server['REQUEST_METHOD'] != 'POST')) {
            $module_info = $this->model_extension_module->getModule($this->request->get['module_id']);
        }

        if (isset($this->request->post['name'])) {
            $data['name'] = $this->request->post['name'];
        } elseif (!empty($module_info)) {
            $data['name'] = $module_info['name'];
        } else {
            $data['name'] = '';
        }

        if (isset($this->request->post['module_description'])) {
            $data['module_description'] = $this->request->post['module_description'];
        } elseif (!empty($module_info)) {
            $data['module_description'] = $module_info['module_description'];
        } else {
            $data['module_description'] = array();
        }

        $this->load->model('localisation/language');

        $data['languages'] = $this->model_localisation_language->getLanguages();

        if (isset($this->request->post['status'])) {
            $data['status'] = $this->request->post['status'];
        } elseif (!empty($module_info)) {
            $data['status'] = $module_info['status'];
        } else {
            $data['status'] = '';
        }

        $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/module/sibling_category', $data));
    }

    protected function validate() {
        if (!$this->user->hasPermission('modify', 'extension/module/category')) {
            $this->error['warning'] = $this->language->get('error_permission');
        }

        return !$this->error;
    }
}

Наконец создайте файл представления по пути \admin\view\template\extension\module\sibling_category.tpl и вставьте следующее:

<?php echo $header; ?><?php echo $column_left; ?>
<div id="content">
  <div class="page-header">
    <div class="container-fluid">
      <div class="pull-right">
        <button type="submit" form="form-category" data-toggle="tooltip" title="<?php echo $button_save; ?>" class="btn btn-primary"><i class="fa fa-save"></i></button>
        <a href="<?php echo $cancel; ?>" data-toggle="tooltip" title="<?php echo $button_cancel; ?>" class="btn btn-default"><i class="fa fa-reply"></i></a></div>
      <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">
    <?php if ($error_warning) { ?>
    <div class="alert alert-danger"><i class="fa fa-exclamation-circle"></i> <?php echo $error_warning; ?>
      <button type="button" class="close" data-dismiss="alert">&times;</button>
    </div>
    <?php } ?>
    <div class="panel panel-default">
      <div class="panel-heading">
        <h3 class="panel-title"><i class="fa fa-pencil"></i> <?php echo $text_edit; ?></h3>
      </div>
      <div class="panel-body">
        <form action="<?php echo $action; ?>" method="post" enctype="multipart/form-data" id="form-html" class="form-horizontal">        
          <div class="form-group">
            <label class="col-sm-2 control-label" for="input-status"><?php echo $entry_status; ?></label>
            <div class="col-sm-10">
              <input type="hidden" name="name" value="<?php echo $heading_title; ?>" id="input-name" class="form-control" />
              <select name="status" id="input-status" class="form-control">
                <?php if ($status) { ?>
                <option value="1" selected="selected"><?php echo $text_enabled; ?></option>
                <option value="0"><?php echo $text_disabled; ?></option>
                <?php } else { ?>
                <option value="1"><?php echo $text_enabled; ?></option>
                <option value="0" selected="selected"><?php echo $text_disabled; ?></option>
                <?php } ?>
              </select>
            </div>
          </div>
        </form>
      </div>
 </div>
  </div>
</div>
<?php echo $footer; ?>

После того, как вы это сделали, вам может понадобиться Обновите свои права администратора. Перейдите к «Настройки => Пользователи => Группы пользователей» и отредактируйте свой тип пользователя «Администратор». Убедитесь, что либо «Выберите все» для разрешения на чтение и изменение, либо выберите его вручную.

Вам необходимо затем «установить» этот м odule, а затем отредактируйте его, включите и сохраните. Вы заметите «Субмодуль», указанный под «Категории братьев и сестер», который предназначен для получения модуля на странице «Макеты». Не создавайте несколько экземпляров модуля, так как это может привести к путанице в макетах - если только вы не понимаете, что делаете.

NB. При дублировании языковых файлов не забудьте найти и заменить все экземпляры модуля. «Категория» с «Категория братьев и сестер»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...