Вывести Главную Категорию в карточке товара

Тема в разделе "Дизайн, оформление и шаблоны", создана пользователем tp-20, 15 фев 2025.

  1. tp-20

    tp-20 Новичок

    Сообщения:
    24
    Симпатии:
    0
    Приветствую!
    Хочу вывести название главной категории в карточке товара.
    Нашёл решение с выводом всех категорий, присвоенных конкретному товару. В данном случае их три (первый скриншот). Но нужно вывести только Главную.

    В контроллере product/product.php такой код: (скриншот 3 для понятного восприятия)
    $data['catprod'] = array();
    $product_category = $this->model_catalog_product->getCategories($product_id);

    foreach ($product_category as $catprod){
    $category_info = $this->model_catalog_category->getCategory($catprod['category_id']);
    if ($category_info) {
    $data['catprod'][] = array(
    'name' => $category_info['name'],
    'image' => '/image/'.$category_info['image'],
    'href' => $this->url->link('product/category', 'path=' . $category_info['category_id'])
    );
    }
    }


    в шаблоне выводится так:
    <?php foreach ($catprod as $catp) { ?><a href="<?php echo $catp['href']; ?>"><?php echo $catp['name']; ?></a><?php } ?><img src="<?php echo $catp['image']; ?>" />

    на сайте выводится так - скриншот 2

    что нужно дописать, чтобы вывести только главную категорию?
     

    Вложения:

    • 1.jpg
      1.jpg
      Размер файла:
      50,2 КБ
      Просмотров:
      8
    • 2.jpg
      2.jpg
      Размер файла:
      82,9 КБ
      Просмотров:
      8
    • 3.jpg
      3.jpg
      Размер файла:
      51,8 КБ
      Просмотров:
      6
  2. Blast

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

    Сообщения:
    240
    Симпатии:
    84
    после
    Код:
    foreach ($product_category as $catprod){
    добавьте
    Код:
    if (!$catprod['main_category']) continue;
     
    tp-20 нравится это.
  3. tp-20

    tp-20 Новичок

    Сообщения:
    24
    Симпатии:
    0
    спасибо большое, всё отлично сработало!

    помогите пожалуйста то же самое в админке сделать - вывести в списке товаров ГЛАВНУЮ категорию к каждому товару.
    я воспользовался этой инструкцией: мануал. но там выводятся все категории, присвоенные товару (скриншот 1).

    по вашему совету в цикл foreach вставил if (!$result['main_category']) continue; но это не помогло. ничего не выводится, а список товаров полностью исчезает.

    что нужно поменять в этом коде? или может в другом месте?
    и для удобства - скрин 2

    foreach ($results as $result) {
    if (!$result['main_category']) continue;
    if (is_file(DIR_IMAGE . $result['image'])) {
    $image = $this->model_tool_image->resize($result['image'], 40, 40);
    $categories = $this->model_catalog_product->getProductCategoriesName($result['product_id']);
    $categories = implode('<br>', $categories);
    } else {
    $image = $this->model_tool_image->resize('no_image.png', 40, 40);
    }
     

    Вложения:

  4. Blast

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

    Сообщения:
    240
    Симпатии:
    84
    в getProductCategoriesName после WHERE дописать
    Код:
    pc.main_category = 1 AND
     
    tp-20 нравится это.
  5. tp-20

    tp-20 Новичок

    Сообщения:
    24
    Симпатии:
    0
    спасибо, Помогло!

    у меня завершающий вопрос по категориям/товарам.
    В карточке товара нужно вывести все товары из этой же категории. т.е. все дочерние товары.
    есть модуль "рекомендованные товары", но он уже занят под другие цели.
    поставил модуль Similar Products 4.1.14. но он работает неверно - выводит товары как-то рандомно.

    нашёл манул, там выводятся вообще все товары. но взял его за основу.
    подскажите, что поменять в этом коде (скриншот 1), чтобы выводились товары из текущей категории?

    $results = $this->model_catalog_product->getProducts($filter_data); - в этой строке не подхватывается ID категории и выводятся вообще все имеющиеся товары. Думаю здесь в фильтре загвоздка.
    у меня opencart версии 2.1.0.1.

    Весь код целиком:

    $parts = explode('_', (string)$this->request->get['path']);
    $category_id = (int)array_pop($parts);

    $filter_data = array(
    'filter_category_id' => $category_id
    );

    $data['products_variant'] = array();
    $results = $this->model_catalog_product->getProducts($filter_data);

    foreach ($results as $result) {
    if ($result['image']) {
    $image = 'image/' . $result['image'];
    } else {
    $image = $this->model_tool_image->resize('placeholder.png', $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height'));
    }

    $data['products_variant'][] = array(
    //'category_id' => $category_id,
    'name' => $result['name'],
    'image' => $image,
    'href' => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url)
    );
    }


    заранее спасибо!
     

    Вложения: