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
Олег (06.09.2018@14:25)
Добрый день. Именно с UPC все стало на 2.3 как и описано. Сейчас мучаюсь с проблемой сделать вместо UPC — Производителя. Я так понял, что там немного различается метод интегрирования, т.к. там помимо значения идет еще и идентификатор, поєтому відает ошибки в выдаче. Не подскажете как правильно прописать Производителя вместо UPC?
Dim565
Олег (06.09.2018@14:29)
Здравствуйте. Давно не работал с OpenCart, нет возможности проверить у себя. Какие ошибки?
Олег
Dim565 (06.09.2018@14:46)
Notice: Undefined index: manufacturer /admin/controller/catalog/product.php
Это я прописал везде, где у вас написано UPC — manufacturer
Dim565
Олег (06.09.2018@14:48)
Какая версия OpenCart (или ocStore)?
Олег
Dim565 (06.09.2018@14:49)
Opencart 2.3.0.2
Ругается на строчку:
‘manufacturer’ => $result[‘manufacturer’],
в блоке $data[‘products’][] = array(
в /admin/controller/catalog/product.php
Dim565
Олег (06.09.2018@15:39)
Да, в таблице products нет названия производителя, а только его id.
Нужно изменить файл /admin/controller/catalog/product.php
Перед строкой $data[‘products’][]
Добавить
$this->load->model(‘catalog/manufacturer’);
$manufacturer_info = $this->model_catalog_manufacturer->getManufacturer($result[‘manufacturer_id’]);
$manufacturer_name = $manufacturer_info[‘name’];
А внутри массива $data[‘products’][] сделать так:
‘manufacturer’ => $manufacturer_name,
Проверьте, должно показывать производителя. И мне кажется неправильно подключать $this->load->model(‘catalog/manufacturer’) во второй раз (ниже по коду он тоже используется), но других идей нет.
Олег
Dim565 (06.09.2018@16:11)
Все сработало! Все показывает. Потом еще доделаю сортировку по производителю и будет все замечательно! Спасибо вам огромное за помощь!!!!
Dim565
Олег (06.09.2018@18:19)
Пожалуйста!
Дмитрий (07.09.2018@23:26)
Добрый день. А как добавить в админку столбец с датой редактирования товара? Opencart 2.3
Dim565
Дмитрий (08.09.2018@08:43)
Здравствуйте. Дата редактирования хранится в поле date_modified, его и добавляете по образцу
Дмитрий
Dim565 (08.09.2018@10:13)
Notice: Undefined index: date_modified in ….view/template/catalog/product_list.tpl on line 166
166 строка:
Подскажите, пожалуйста
Дмитрий
Дмитрий (08.09.2018@10:15)
td class=»text-left»
?php echo $product[‘date_modified’]; ?
/td
треугольные скобки есть, естественно. Просто так не добавляет
Dim565
Дмитрий (08.09.2018@10:25)
Наверное вы не внесли изменения в /admin/controller/catalog/product.php (второй пункт инструкции)
Дмитрий
Dim565 (08.09.2018@11:48)
jsfiddle net /083c9pv4/8/?utm_source=website&utm_medium=embed&utm_campaign=083c9pv4
Вот по шагам всё сделал
Dim565
Дмитрий (08.09.2018@12:08)
Я проделал 1, 2 пункт, столбец появился.
Вот исходники:
template product_list.php: https://pastebin.com/7w9p2Vnw
controller product.php: https://pastebin.com/H9PzTSXV
Дмитрий
Dim565 (08.09.2018@12:39)
Проблема в общем такая — эта ошибка вылазит только в одном случае, когда я удаляю все заказы. Так что не страшно.. Спасибо!
Dim565
Дмитрий (09.10.2018@09:15)
Пожалуйста, рад был помочь
Дмитрий
Dim565 (08.09.2018@12:25)
Теперь есть вопрос.. После чистки кэша стало всё ок, а затем проблема возникла:
Warning: Division by zero in …/system/storage/modification/admin/controller/common/column_left.php on line 1124
Строка 1124 такая: $data[‘other_status’] = round(($other_total / $order_total) * 100);
Везде всё стало мега крупным в админке.
Дмитрий
Dim565 (08.09.2018@12:15)
Это я голова два уха. Кэш модификатора не почистил… Спасибо огромное. Вы очень крутой мега мозг) Крутые штучки подсказываете.
Дмитрий
Dim565 (08.09.2018@11:48)
Вот то, что я сделал
http:// jsfiddle. net/083c9pv4/8/?utm_source=website&utm_medium=embed&utm_campaign=083c9pv4
Николай (05.11.2018@19:21)
Версия ocStore 2.1.0.2.1
Сделал пункт 1 но столбец ( пустой ) не отобразился
Dim565
Николай (05.11.2018@20:15)
Проверил на ocStore 2.1.0.2.1, столбец появился. Может кэш?
Павел (03.01.2019@13:30)
Подскажите а как вывести в колонку атрибуты которые привязаны к товару, версия 2.3.Очень буду благодарен
Dim565
Павел (03.01.2019@15:41)
Вы хотите выводить только названия привязанных к товару атрибутов или еще и их значения?
Павел
Dim565 (03.01.2019@19:45)
канечно было бы хорошо вместе,но это если возможно,в противном случаии хотя бы название
Dim565
Павел (03.01.2019@21:21)
За эффективность/безопасность не отвечаю, но работает (проверял на OcStore 2.3.0.2.3).
1. Файл product_list.tpl (/admin/view/template/catalog/product_list.tpl).
1.1. Перед строкой:
Добавляете:
1.2. После строки
Добавляете:
2. Файл product.php (/admin/controller/catalog/product.php)
2.1. Перед массивом (~430 строка):
Добавляете:
2.2. После строки:
Добавляете:
Павел
Dim565 (03.01.2019@21:40)
Спсибо вам большое
Dim565
Павел (03.01.2019@21:53)
Пожалуйста. Будут проблемы пишите
Павел
Dim565 (04.01.2019@00:39)
Скажите а можно вас попросить написать этот код с коментариями.Учусь по немногу
$this->load->model(‘catalog/attribute’);
$product_attributes = $this->model_catalog_product->getProductAttributes($result[‘product_id’]);
$data[‘product_attributes’] = array(); // обнуляем массив от старых значений
foreach ($product_attributes as $product_attribute) {
$attribute_info = $this->model_catalog_attribute->getAttribute($product_attribute[‘attribute_id’]);
if ($attribute_info) {
$data[‘product_attributes’][] = array(
‘attribute_id’ => $product_attribute[‘attribute_id’],
‘attribute_name’ => $attribute_info[‘name’],
‘product_attribute_description’ => $product_attribute[‘product_attribute_description’]
);
}
}
Dim565
Павел (04.01.2019@10:12)
Напишу так, как я его понимаю.
Павел
Dim565 (13.01.2019@05:39)
Спсибо вам большое
Александр (13.05.2019@22:06)
Здравствуйте, есть ли возможность сделать тоже самое только вместо UPS добавить дату создания товара, заранее спасибо!
Dim565
Александр (13.05.2019@22:36)
Здравствуйте. Возможно, в БД дата создания хранится в поле date_added. Нужно смотреть, есть ли в «контроллере» получение информации из «модели», если нет, тогда придется редактировать довольно много файлов.
Дмитрий (24.06.2019@02:06)
Здравствуйте, как сделали все таки вывод производителя? после этого:
Перед строкой $data[‘products’][]
Добавить
$this->load->model(‘catalog/manufacturer’);
$manufacturer_info = $this->model_catalog_manufacturer->getManufacturer($result[‘manufacturer_id’]);
$manufacturer_name = $manufacturer_info[‘name’];
А внутри массива $data[‘products’][] сделать так:
‘manufacturer’ => $manufacturer_name,
как вывели во вьюхе?
Notice: Undefined index: manufacturer_info in /system/storage/modification/admin/view/template/catalog/product_list.tpl on line 445
Dim565
Дмитрий (29.06.2019@10:29)
Здравствуйте. Прошу извинить за долгий ответ. Исходников не осталось, но думаю, выводить в view нужно так: echo $product[‘manufacturer’]. Проверьте, если не поможет напишите версию движка, проверю.
Артур (21.08.2019@15:54)
Добрый день!Opencart.PRO 2.3Сделал всё по инструкции столбец добавился,а вывода нет.
2019-08-21 15:49:59 — PHP Notice: Undefined variable: sort_sku in /var/www/u0360859/data/www/elbinmotors.ru/admin/view/template/catalog/product_list.tpl on line 198
2019-08-21 15:49:59 — PHP Notice: Use of undefined constant SKU — assumed ‘SKU’ in /var/www/u0360859/data/www/elbinmotors.ru/admin/view/template/catalog/product_list.tpl on line 198
2019-08-21 15:49:59 — PHP Notice: Undefined index: sku in /var/www/u0360859/data/www/elbinmotors.ru/admin/view/template/catalog/product_list.tpl on line 239
Dim565
Артур (21.08.2019@16:10)
На Opencart.PRO не тестировал (до вашего комментария и не слышал о такой сборке), возможно код движка сильно отличается. Хотел проверить, но как понял PRO версия платная.
Артур
Dim565 (21.08.2019@16:18)
Есть бесплатная версия https://opencart.pro/
Dim565
Артур (21.08.2019@17:11)
Бесплатная версия здесь OPENCART.CMS, а OPENCART.PRO платная. Могу конечно проверить на бесплатной, но будет ли работать на PRO?
Артур
Dim565 (22.08.2019@10:23)
Ну что не проверяли?
Dim565
Артур (22.08.2019@12:45)
Проверил на OPENCART.CMS 2.3.0.2.5. Работает, изменений кода в нужных местах нет. Вероятно, вы допустили ошибки при редактировании файлов product_list.tpl или product.php. Можете отправить исходники на info@dim565.ru, проверю
Артур (21.08.2019@16:20)
Я его уже добавил http://prntscr.com/ovm72n а он пустует.
Dim565
Артур (22.08.2019@13:31)
Вы заполняли это поле в карточках товара?
Алекс (24.03.2020@18:59)
Добрый день, извиняюсь за глупый вопрос, переименовать Артикул в ( Код товара ) и добавить столбик SKU в котором будет поиск по SKU-коду. Сделал как вы описали в статье, но даже столбик не появился.
Версия: OPENCART.PRO 2.3.0.2.1
Спасибо за внимание.
Dim565
Алекс (24.03.2020@19:14)
Здравствуйте. Если вы отредактировали файлы, но ничего не изменилось, то обычно дело в кэше. Попробуйте нажать кнопку «очистка» в админ-панели на странице Расширения-Модификаторы (если магазин уже функционирует советую перед этим сделать резервную копию файлов и БД)
Алекс
Dim565 (24.03.2020@20:28)
Спасибо, получилось!
Dim565
Алекс (24.03.2020@20:32)
Пожалуйста!
Алекс
Алекс (24.03.2020@19:00)
Если будет возможность подскажите весь этим что и куда, сам только учусь.
Илья (21.04.2020@14:30)
Добрый! А не у кого не выводится кракозябры. Хочу вывести статус у категорий, использую Opencart 3.0. на последнем этапе выводятся кракозябры, причем всей страницы. Не могу понять почему(((
Dim565
Илья (21.04.2020@16:35)
Здравствуйте, если кодировка слетает после правок возможно дело в текстовом редакторе, вы какой используете?
И еще сегодня в статье заметил проблему с отображением кода, например было так
Правильно так:
Уже исправил, но может вы копировали проблемный код?