1) Файл product_list.tpl (/admin/view/template/catalog/product_list.tpl)
В product_list.tpl формируется таблица со списком товаров. Начинаем с заголовка таблицы (thead). Пусть новый столбец будет выводиться после столбца "Статус", находим этот фрагмент кода:
<td class="text-left"><?php if ($sort == 'p.status') { ?> <a href="<?php echo $sort_status; ?>" class="<?php echo strtolower($order); ?>"><?php echo $column_status; ?></a> <?php } else { ?> <a href="<?php echo $sort_status; ?>"><?php echo $column_status; ?></a> <?php } ?></td>
Добавляем после него:
<td class="text-left"><?php if ($sort == 'p.upc') { ?> <a href="<?php echo $sort_upc; ?>" class="<?php echo strtolower($order); ?>"><?php echo 'UPC'; ?></a> <?php } else { ?> <a href="<?php echo $sort_upc; ?>"><?php echo 'UPC'; ?></a> <?php } ?></td>
То есть мы скопировали код вывода столбца "Статус" в шапке таблицы и вставили ниже, изменив p.upc вместо p.status, $sort_upc вместо $sort_status, а вместо "echo $column_status" написали 'echo UPC', иначе пришлось бы вносить изменения еще в языковой файл.
Теперь тело таблицы (tbody). Находим:
<td class="text-left"><?php echo $product['status']; ?></td>
Добавляем строку ниже:
<td class="text-left"><?php echo $product['upc']; ?></td>
Последнее мелкое изменение:
<td class="text-center" colspan="8"><?php echo $text_no_results; ?></td>
Изменяем colspan на 9, чтобы таблица не "ломалась", если товары не найдены.
Смотрим, что получилось:
Столбец добавился, но внутри пока ничего не выводится. Если на сервере включено отображение предупреждений может быть так: "Notice: Undefined index: upc in [путь]/public_html/admin/view/template/catalog/product_list.tpl on line 255".
2) Файл product.php (/admin/controller/catalog/product.php)
Этот файл отвечает за вызов "model", обработку и подготовку полученных данных для вывода в "view".
Делаем поиск по sort_status, будет всего одна строчка. Дублируем и меняем на sort_upc, должно получиться так:
$data['sort_status'] = $this->url->link('catalog/product', 'token=' . $this->session->data['token'] . '&amp;sort=p.status' . $url, 'SSL'); $data['sort_upc'] = $this->url->link('catalog/product', 'token=' . $this->session->data['token'] . '&amp;sort=p.upc' . $url, 'SSL');
Затем находим массив $data['products'][] и после строки:
'status' => ($result['status']) ? $this->language->get('text_enabled') : $this->language->get('text_disabled'),
добавляем:
'upc' => $result['upc'],
3) Файл product.php (/admin/model/catalog/product.php)
В этом файле формируются запросы к базе данных, которые затем используются в "controller". Нужно внести только одну изменение: находим массив $sort_data и добавляем p.upc, получится так:
$sort_data = array( 'pd.name', 'p.model', 'p.price', 'p.quantity', 'p.status', 'p.upc', 'p.sort_order' );
Все работает:
Если после этих действий ничего не заработало:
- попробуйте очистить кэш на странице "Расширения"-"Модификаторы" (если магазин уже функционирует советую перед этим сделать резервную копию файлов и БД)
- возможно, вы допустили ошибки в коде, проверьте логи в админ-панели или в файле /system/logs/error.log
Vlad (23.11.2020@15:36)
Здравствуйте.
В принципе все работает. Добавил колонку с stock_status_id
Но:
1. Выдает только значения из БД. Я так понимаю нужно языковой фаил поправлять?
2. Не работает сортировка. Вылетает на страницу авторизации админпанели.
Dim565
Vlad (23.11.2020@17:54)
Здравствуйте.
1) Не понял, какие значения из БД, можете описать подробней?
2) Какая у вас версия движка? Постараюсь проверить
Vlad
Dim565 (24.11.2020@14:35)
Коды половину срезались.
Поэтому если ест желание и возможность, то контакт написал выше.
Dim565
Vlad (24.11.2020@14:42)
Да, здесь код режется, отправьте на info@dim565.ru
Письмо получил, вышло сделать так:
В /admin/controller/catalog/product.php после строки
Добавить
Ниже в массив добавить stock_status_id и stock_status_name:
Теперь в файле tpl сможете выводить не только stock_status_id, а stock_status_name
Vlad
Dim565 (24.11.2020@14:34)
Версия движка ocStore 2.3.0.2.3
С доработками, но они админку и БД не затрагивают.
Параметр добавляемый в админку p.stock_status_id — отображает статус заказов. У меня в частности статус товаров с нулевым остатком.
Произведенные изменения на примере добавления UPC
Файл product_list.tpl (/admin/view/template/catalog/product_list.tpl)
Добавлено
<a href="» class=»»>
<a href="»>
Добавлено
Изменено на 9
Файл product.php (/admin/controller/catalog/product.php)
Добавлено
‘stock_status_id’ => $result[‘stock_status_id’],
Вот на сколько я понимаю как раз в этом месте и проблема. stock_status_id хранит в себе значение в цифрах статуса. А само наименование статуса хранится в другом месте. То есть код верно отрабатывает — выдает значение статуса. А хочется что бы выдавал наименование.
Файл product.php (/admin/model/catalog/product.php)
Добавлено
‘p.stock_status_id’,
Все добавления делались как по инструкции.
Можем связаться напрямую и обговорить момент доната.
8 917 892 60 51 — Владислав
Ватсап, телега.
Денис
Vlad (01.01.2021@11:45)
Скажите, а можно ли сделать так, чтобы можно было менять цену не заходя в карточку товара?
Dim565
Денис (01.01.2021@12:35)
Можно, есть готовые модули быстрого редактирования, нашел https://opencart.com/index.php?route=marketplace/extension/info&extension_id=38992 (для OpenCart 2 и 3 версий)
Денис
Dim565 (02.01.2021@13:48)
Спасибо за модуль, не думал что есть такой модуль. А еще вопрос, а можно ли аналогичным методом как вы писали в статье, вывести столбец с ценами со скидками от количества?
Dim565
Денис (02.01.2021@14:45)
Вы про цены из вкладки «Скидки» в карточке товара? Вывести можно, но думаю придется копировать дополнительные куски кода из контроллера product.php, похожий пример в моем комментарии от 24.11.2020@14:42, только у вас первая строчка похоже будет $product_discounts = $this->model_catalog_product->getProductDiscounts($this->request->get[‘product_id’]);
Денис
Dim565 (03.01.2021@00:45)
Да, я про Скидки имел ввиду, спасибо, попробую вывести.