Коллеги, приветствую! Opencart Version 3.0.3.7 Сделал OCMOD: Статус Enabled/Disabled Категории Вывод статуса Enabled/Disabled Категории в: Catalog -> Categories Но, ошибка: Плюс ошибка при нажатие Status для сортировки: Не получается разобраться в чём причина. Буду рад Вашей помощи! Код: Код: <?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>
Здравствуйте По поводу первой ошибки. В модели данных getCaterories не получает значение status. По поводу второй ошибки. Там в запросе две таблицы категорий, поэтому сортировка по колонке status приводит к ошибке, так как не конкретизирована таблица.
devimirochnik , спасибо! Уже сутки разбираюсь, не смогу... Сил уже нет... и знаний. Всё перепробовал , много , что сделал по примерам файлов самого opencart , а тут прям ступор...
Вам нужно в 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 ' > ') 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 ' > ') 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') . "'"; Вроде так
Пожалуйста. Если не сложно и вам не жалко, то неплохо бы выложить итоговый модификатор. Вдруг кому ещё пригодится
Итоговый модификатор. Для: 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 ' > ') 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 ' > ') 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>
Делал нечто похожее для другой сборки. Переписал слегка для opencart-3.0.3.8-rs Кроме самого статуса, добавляет возможность менять его там же в общем списке категорий, не заходя в саму категорию. Сменил текстовые статусы на иконки. Добавил анимацию смены. UPD : добавил кнопку для включения сразу нескольких выбранных категорий Клик