Решено: [OCMOD] Статус Enabled/Disabled Категории

Тема в разделе "Модули и дополнения", создана пользователем Maksikus, 1 май 2023.

  1. Maksikus

    Maksikus Пользователь

    Сообщения:
    84
    Симпатии:
    8
    Коллеги, приветствую!

    Opencart Version 3.0.3.7

    Сделал OCMOD:
    Статус Enabled/Disabled Категории
    Вывод статуса Enabled/Disabled Категории в:
    Catalog -> Categories


    Но, ошибка:
    upload_2023-5-1_11-18-52.png

    Плюс ошибка при нажатие Status для сортировки:
    upload_2023-5-1_11-37-35.png

    Не получается разобраться в чём причина.
    Буду рад Вашей помощи!

    Код:
    Код:
    <?xml version="1.0" encoding="UTF-8"?>
    <modification>
        <name>[BackEnd] Статус Enabled/Disabled Категории</name>
        <code>BE_StatusEnabledDisabledCategories</code>
        <version>1.0.0</version>
        <author>MAEmelyanov</author>
        <link>https://t.me/maemelyanov</link>
    <!--
    Description:
    - Catalog -> Categories
    -->
    
        <file path="admin/controller/catalog/category.php">
            <operation>
                <search>
                    <![CDATA['delete'      => $this->url->link('catalog/category/delete', 'user_token=' . $this->session->data['user_token'] . '&category_id=' . $result['category_id'] . $url, true)]]>
                </search>
                <add position="after">
                    <![CDATA[,'status'      => $result['status'] ? $this->language->get('text_enabled') : $this->language->get('text_disabled')]]>
                </add>
            </operation>
            <operation>
                <search>
                    <![CDATA[$data['sort_sort_order'] = $this->url->link('catalog/category', 'user_token=' . $this->session->data['user_token'] . '&sort=sort_order' . $url, true);]]>
                </search>
                <add position="after">
                    <![CDATA[$data['sort_status'] = $this->url->link('catalog/category', 'user_token=' . $this->session->data['user_token'] . '&sort=status' . $url, true);]]>
                </add>
            </operation>
        </file>
    
        <file path="admin/model/catalog/category.php">
            <operation>
                <search>
                    <![CDATA[$sort_data = array(]]>
                </search>
                <add position="after">
                    <![CDATA['status',]]>
                </add>
            </operation>
        </file>
      
        <file path="admin/view/template/catalog/category_list.twig">
            <operation>
                <search>
                    <![CDATA[<td class="text-right">{{ column_action }}</td>]]>
                </search>
                <add position="before">
                    <![CDATA[<td class="text-left">{% if sort == 'status' %}
                            <a href="{{ sort_status }}" class="{{ order|lower }}">{{ entry_status }}</a>
                            {% else %}
                            <a href="{{ sort_status }}">{{ entry_status }}</a>
                            {% endif %}</td>]]>
                </add>
            </operation>
            <operation>
                <search>
                    <![CDATA[<td class="text-right"><a href="{{ category.edit }}" data-toggle="tooltip" title="{{ button_edit }}" class="btn btn-primary"><i class="fa fa-pencil"></i></a></td>]]>
                </search>
                <add position="before">
                    <![CDATA[<td class="text-left">{{ category.status }}</td>]]>
                </add>
            </operation>
            <operation>
                <search>
                    <![CDATA[<td class="text-center" colspan="4">{{ text_no_results }}</td>]]>
                </search>
                <add position="replace">
                    <![CDATA[<td class="text-center" colspan="5">{{ text_no_results }}</td>]]>
                </add>
            </operation>
        </file>
    
    </modification>
     
    Последнее редактирование: 1 май 2023
  2. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    740
    Симпатии:
    100
    Здравствуйте
    По поводу первой ошибки. В модели данных getCaterories не получает значение status. По поводу второй ошибки. Там в запросе две таблицы категорий, поэтому сортировка по колонке status приводит к ошибке, так как не конкретизирована таблица.
     
  3. Maksikus

    Maksikus Пользователь

    Сообщения:
    84
    Симпатии:
    8
    devimirochnik , спасибо!
    Уже сутки разбираюсь, не смогу... :(
    Сил уже нет... и знаний.
    Всё перепробовал , много , что сделал по примерам файлов самого opencart , а тут прям ступор...

    upload_2023-5-1_13-40-13.png
     
  4. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    740
    Симпатии:
    100
    Вам нужно в admin/model/catalog/category.php поменять: добавить в запрос c1.`status`

    Вместо
    PHP:
    public function getCategories($data = array()) {
            
    $sql "SELECT cp.category_id AS category_id, GROUP_CONCAT(cd1.name ORDER BY cp.level SEPARATOR '&nbsp;&nbsp;&gt;&nbsp;&nbsp;') AS name, c1.parent_id, c1.sort_order FROM " DB_PREFIX "category_path cp LEFT JOIN " DB_PREFIX "category c1 ON (cp.category_id = c1.category_id) LEFT JOIN " DB_PREFIX "category c2 ON (cp.path_id = c2.category_id) LEFT JOIN " DB_PREFIX "category_description cd1 ON (cp.path_id = cd1.category_id) LEFT JOIN " DB_PREFIX "category_description cd2 ON (cp.category_id = cd2.category_id) WHERE cd1.language_id = '" . (int)$this->config->get('config_language_id') . "' AND cd2.language_id = '" . (int)$this->config->get('config_language_id') . "'";
    Вот это

    PHP:
    public function getCategories($data = array()) {
            
    $sql "SELECT cp.category_id AS category_id, GROUP_CONCAT(cd1.name ORDER BY cp.level SEPARATOR '&nbsp;&nbsp;&gt;&nbsp;&nbsp;') AS name, c1.parent_id, c1.sort_order, c1.`status` FROM " DB_PREFIX "category_path cp LEFT JOIN " DB_PREFIX "category c1 ON (cp.category_id = c1.category_id) LEFT JOIN " DB_PREFIX "category c2 ON (cp.path_id = c2.category_id) LEFT JOIN " DB_PREFIX "category_description cd1 ON (cp.path_id = cd1.category_id) LEFT JOIN " DB_PREFIX "category_description cd2 ON (cp.category_id = cd2.category_id) WHERE cd1.language_id = '" . (int)$this->config->get('config_language_id') . "' AND cd2.language_id = '" . (int)$this->config->get('config_language_id') . "'";
    Вроде так
     
    Maksikus нравится это.
  5. Maksikus

    Maksikus Пользователь

    Сообщения:
    84
    Симпатии:
    8
    devimirochnik , Друг , Огромедное Тебе Спасибо!!!
    Работает!
     
  6. devimirochnik

    devimirochnik Продвинутый пользователь

    Сообщения:
    740
    Симпатии:
    100
    Пожалуйста. Если не сложно и вам не жалко, то неплохо бы выложить итоговый модификатор. Вдруг кому ещё пригодится ;)
     
    Maksikus нравится это.
  7. Maksikus

    Maksikus Пользователь

    Сообщения:
    84
    Симпатии:
    8
    Итоговый модификатор.
    Для:
    Opencart Version 3.0.3.7

    Код:
    <?xml version="1.0" encoding="UTF-8"?>
    <modification>
        <name>[BackEnd] Статус Enabled/Disabled Категории</name>
        <code>BE_StatusEnabledDisabledCategories</code>
        <version>1.0.0</version>
        <author>MAEmelyanov</author>
        <link>https://t.me/maemelyanov</link>
    <!--
    Description:
    - Catalog -> Categories
    -->
    
        <file path="admin/controller/catalog/category.php">
            <operation>
                <search>
                    <![CDATA['edit'        => $this->url->link('catalog/category/edit', 'user_token=' . $this->session->data['user_token'] . '&category_id=' . $result['category_id'] . $url, true),]]>
                </search>
                <add position="after">
                    <![CDATA['status'      => $result['status'] ? $this->language->get('text_enabled') : $this->language->get('text_disabled'),]]>
                </add>
            </operation>
            <operation>
                <search>
                    <![CDATA[$data['sort_sort_order'] = $this->url->link('catalog/category', 'user_token=' . $this->session->data['user_token'] . '&sort=sort_order' . $url, true);]]>
                </search>
                <add position="after">
                    <![CDATA[$data['sort_status'] = $this->url->link('catalog/category', 'user_token=' . $this->session->data['user_token'] . '&sort=status' . $url, true);]]>
                </add>
            </operation>
        </file>
    
        <file path="admin/model/catalog/category.php">
            <operation>
                <search>
                    <![CDATA[$sql = "SELECT cp.category_id AS category_id, GROUP_CONCAT(cd1.name ORDER BY cp.level SEPARATOR '&nbsp;&nbsp;&gt;&nbsp;&nbsp;') AS name, c1.parent_id, c1.sort_order FROM " . DB_PREFIX . "category_path cp LEFT JOIN " . DB_PREFIX . "category c1 ON (cp.category_id = c1.category_id) LEFT JOIN " . DB_PREFIX . "category c2 ON (cp.path_id = c2.category_id) LEFT JOIN " . DB_PREFIX . "category_description cd1 ON (cp.path_id = cd1.category_id) LEFT JOIN " . DB_PREFIX . "category_description cd2 ON (cp.category_id = cd2.category_id) WHERE cd1.language_id = '" . (int)$this->config->get('config_language_id') . "' AND cd2.language_id = '" . (int)$this->config->get('config_language_id') . "'";]]>
                </search>
                <add position="replace">
                    <![CDATA[$sql = "SELECT cp.category_id AS category_id, GROUP_CONCAT(cd1.name ORDER BY cp.level SEPARATOR '&nbsp;&nbsp;&gt;&nbsp;&nbsp;') AS name, c1.parent_id, c1.sort_order, c1.`status` FROM " . DB_PREFIX . "category_path cp LEFT JOIN " . DB_PREFIX . "category c1 ON (cp.category_id = c1.category_id) LEFT JOIN " . DB_PREFIX . "category c2 ON (cp.path_id = c2.category_id) LEFT JOIN " . DB_PREFIX . "category_description cd1 ON (cp.path_id = cd1.category_id) LEFT JOIN " . DB_PREFIX . "category_description cd2 ON (cp.category_id = cd2.category_id) WHERE cd1.language_id = '" . (int)$this->config->get('config_language_id') . "' AND cd2.language_id = '" . (int)$this->config->get('config_language_id') . "'";]]>
                </add>
            </operation>
            <operation>
                <search>
                    <![CDATA[$sort_data = array(]]>
                </search>
                <add position="after">
                    <![CDATA['status',]]>
                </add>
            </operation>
        </file>
     
        <file path="admin/view/template/catalog/category_list.twig">
            <operation>
                <search>
                    <![CDATA[<td class="text-right">{{ column_action }}</td>]]>
                </search>
                <add position="before">
                    <![CDATA[<td class="text-left">{% if sort == 'status' %}
                            <a href="{{ sort_status }}" class="{{ order|lower }}">{{ entry_status }}</a>
                            {% else %}
                            <a href="{{ sort_status }}">{{ entry_status }}</a>
                            {% endif %}</td>]]>
                </add>
            </operation>
            <operation>
                <search>
                    <![CDATA[<td class="text-right"><a href="{{ category.edit }}" data-toggle="tooltip" title="{{ button_edit }}" class="btn btn-primary"><i class="fa fa-pencil"></i></a></td>]]>
                </search>
                <add position="before">
                    <![CDATA[<td class="text-left">{{ category.status }}</td>]]>
                </add>
            </operation>
            <operation>
                <search>
                    <![CDATA[<td class="text-center" colspan="4">{{ text_no_results }}</td>]]>
                </search>
                <add position="replace">
                    <![CDATA[<td class="text-center" colspan="5">{{ text_no_results }}</td>]]>
                </add>
            </operation>
        </file>
    
    </modification>
     

    Вложения:

    Последнее редактирование: 2 май 2023
    devimirochnik нравится это.
  8. Tom

    Tom Специалист

    Сообщения:
    681
    Симпатии:
    206
    Делал нечто похожее для другой сборки.
    Переписал слегка для opencart-3.0.3.8-rs
    Кроме самого статуса, добавляет возможность менять его там же в общем списке категорий, не заходя в саму категорию.
    Сменил текстовые статусы на иконки.
    Добавил анимацию смены.
    UPD : добавил кнопку для включения сразу нескольких выбранных категорий
    Клик
     

    Вложения:

    Последнее редактирование: 10 май 2023
    devimirochnik нравится это.