Оценок: 1
551
Админка Opencart. Показать категории товара в списке

Админка Opencart. Показать категории товара в списке

Сейчас понадобилось вывести в список товаров, для каждого товара категории, где этот товар есть. Полезно для проверки, не забыл ли добавить связи в каком то из товаров.

Хотел скопировать готовое решение, но быстро не нашел, так что добавлю небольшую инструкцию, пригодится. Понадобится минут 5

В модели product уже есть функция, которая выводит все категории, к которым привязан товар, но выводит она только ID этих категорий, что в данном случае не подходит т.к. нужны названия. Сделаю копию этой функции и немного изменю.

Изменения в модели

В admin/model/catalog/product.php нахожу функцию getProductCategories и перед ней добавляю новую "getProductCategoriesName":

    public function getProductCategoriesName($product_id) {
		$product_category_data = array();
		$query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "product_to_category` pc LEFT JOIN `" . DB_PREFIX . "category_description` cd ON (cd.category_id = pc.category_id) WHERE pc.product_id = '" . (int)$product_id . "' AND cd.language_id = '" . (int)$this->config->get('config_language_id') . "'");
		foreach ($query->rows as $result) {
			$product_category_data[] = $result['name'];
		}
		return $product_category_data;
	}

Эта функция вернет имена категорий.

Изменения в контроллере

Далее нужен контроллер admin/controller/catalog/product.php, здесь в функции getList находим foreach товаров:

        $results = $this->model_catalog_product->getProducts($filter_data);

		foreach ($results as $result) {

Добавляем:

	$categories = $this->model_catalog_product->getProductCategoriesName($result['product_id']);
	$categories = implode('<br>', $categories);

Здесь получен массив категорий и преобразован в строку. Еще чуть ниже, в массиве товара:

$data['products'][] = array(

Нужно добавить:

'categories'      => $categories,

Осталось вывести в шаблон - admin/view/template/catalog/product_list.twig

Находим вывод названия товара:

<td class="text-left">{{ product.name }}</td>

Сюда как раз и можно вывести категории, вполне удобно:

<td class="text-left">{{ product.name }}<div class="cats">{{ product.categories }}</div></td>

Вот и все. При желании можно еще добавить куда то в самый низ шаблона стили:

td .cats {background: #ddd;border-radius: 6px;padding: 3px 5px;width: fit-content;}

Или какие то свои. Не забываем обновить модификаторы. Теперь точно все.

Оценок: 1

Комментарии (0)

    Надежный хостинг VPS серверов
    • Свои ISO образы
    • VDS с оплатой раз и навсегда
    • Аренда VDS на любой срок, с оплатой по дням
    • Большое разнообразие конфигураций
    • Дата-центры в ЕС и России
    + скидка 10%