Перейти к содержанию

Вывод категорий в карточке товара Опенкарт 3


Перейти к решению Решений chixx,

Рекомендуемые сообщения

Кто знает, как их вывести?) Chat GPT предлагает такой вариант. Пробовать страшно) Подскажите)

 

1. Отредактируйте файл catalog/controller/product/product.php:// Добавьте следующий код после строки

$data['manufacturer'] = $product_info['manufacturer'];
$data['categories'] = array();

$categories = $this->model_catalog_product->getCategories($this->request->get['product_id']);

foreach ($categories as $category) {
    $data['categories'][] = array(
        'name' => $category['name'],
        'href' => $this->url->link('product/category', 'path=' . $category['path'])
    );
}

2. Теперь отредактируйте файл шаблона, например catalog/view/theme/default/template/product/product.twig:

{# Добавьте следующий код в нужное вам место, например, после блока с производителем #}
 

{% if categories %}
  <div class="product-categories">
    <h2>{{ text_category }}</h2>
    <ul>
      {% for category in categories %}
        <li><a href="{{ category.href }}">{{ category.name }}</a></li>
      {% endfor %}
    </ul>
  </div>
{% endif %}

 

Но я так опнимаю, это он предлагает выводить после производителя, а я бы в идеале хотел, чтоб оно выводилось в характеристиках в самом низу и было кликабельным.

Ссылка на комментарий
Поделиться на другие сайты

В 06.01.2024 в 13:30, chixx сказал:

Кто знает, как их вывести?) Chat GPT предлагает такой вариант. Пробовать страшно) Подскажите)   1. Отредактируйте файл catalog/controller/product/product.php: // Добавьте следующий код после строки $data['manufacturer'] = $product_info['manufacturer']; $data['categories'] = array(); $categories = $this->model_catalog_product->getCategories($this->request->get['product_id']); foreach ($categories as $category) {     $data['categories'][] = array(         'name' => $category['name'],         'href' => $this->url->link('product/category', 'path=' . $category['path'])     ); } 2. Теперь отредактируйте файл шаблона, например catalog/view/theme/default/template/product/product.twig: {# Добавьте следующий код в нужное вам место, например, после блока с производителем #} {% if categories %}   <div class="product-categories">     <h2>{{ text_category }}</h2>     <ul>       {% for category in categories %}         <li><a href="{{ category.href }}">{{ category.name }}</a></li>       {% endfor %}     </ul>   </div> {% endif %}   Но я так опнимаю, это он предлагает выводить после производителя, а я бы в идеале хотел, чтоб оно выводилось в характеристиках в самом низу и было кликабельным.

Для вывода категорий в характеристиках в нижней части страницы товара в OpenCart сделайте следующее:

1. Редактируйте файл `catalog/controller/product/product.php`:
- Найдите: `$data['manufacturer'] = $product_info['manufacturer'];`
- Сразу после этой строки добавьте следующий код:

$data['categories'] = array();
$categories = $this->model_catalog_product->getCategories($this->request->get['product_id']);

foreach ($categories as $category) {
    $data['categories'][] = array(
        'name' => $category['name'],
        'href' => $this->url->link('product/category', 'path=' . $category['path'])
    );
}


2. Редактируйте файл шаблона, например `catalog/view/theme/default/template/product/product.twig`:
- Найдите место, где хотите вывести категории в характеристиках (например, после блока с производителем).
- Между тегами `{% if categories %}` и `{% endif %}` добавьте следующий код для вывода категорий и создания кликабельных ссылок:

{% if categories %}
  
{{ text_category }} {% for category in categories %} {{ category.name }} {% endfor %}
{% endif %}


Обратите внимание, что вам может потребоваться применить CSS-стили для классов `product-attribute-category` и `attribute-title`, чтобы они отображались как вам нужно.

Ссылка на комментарий
Поделиться на другие сайты

В 06.01.2024 в 20:12, AlexDW сказал:

 

Да, я видел Ваш модуль, но меня смутила вот эта строка

 

image.thumb.png.3ba1115a4ba546d1942aa355cf979919.png

 

Я ничего не понял, но понял, что хочу чтобы ссылки были как есть на категории (ЧПУ)

И вывести хочу тупо вот как на зеленом сайте

 

image.png.1d781ddc997409c192507059fe7f471d.png

Ссылка на комментарий
Поделиться на другие сайты

ссылки и будут с ЧПУ, если ЧПУ включено и задано

на демо для 2х как раз часть тегов категорий с ЧПУ, а у части просто они не заполнены

 

если нужно для самих посетителей и удобства навигации - ajax не помеха

если нужно для ботов, чтобы индексировались - копать по методу жпт

Ссылка на комментарий
Поделиться на другие сайты

В 06.01.2024 в 21:03, AlexDW сказал:

ссылки и будут с ЧПУ, если ЧПУ включено и задано

на демо для 2х как раз часть тегов категорий с ЧПУ, а у части просто они не заполнены

 

если нужно для самих посетителей и удобства навигации - ajax не помеха

Мне нужно для тех и для других. Но больше для перелинковки.

 

Я нагуглил некоторые варианты, но в основном модификаторы на бурже. Но я не хочу модификатор) Нашел, метод, как в шаблон добавить, но у меня не сработало(

 

Цитата

файл — catalog/controller/product/product.php

после 
$this->load->model('catalog/product');

добавить

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

файл — catalog/view/theme/*/template/product/product.tpl

перед
<?php if ($manufacturer) { ?>

добавить

<span>Категория: </span><?php foreach ($catprod as $catp) { ?> <a href="<?php echo $catp['href']; ?>"><?php echo $catp['name']; ?></a> |<?php } ?><br />

 

Изменено пользователем chixx
Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...
  • Решение

В общем-то справился я.

Для тех, кто тоже будет искать, что я делал:

В catalog/controller/product/product.php после строки $product_info = $this->model_catalog_product->getProduct($product_id);

Добавил

Спойлер

        $data['text_linked_categories'] = $this->language->get('text_linked_categories');
        $query_linked_categories = $this->model_catalog_product->getCategories($product_id);
        $linked_categories = array();
        foreach( $query_linked_categories as $linked_category_data ) {
        $linked_category = $this->model_catalog_category->getCategory($linked_category_data['category_id']);
        $linked_category_info['id'] = $linked_category_data['category_id'];
        $linked_category_info['href'] = $this->url->link('product/category', 'path=' . $linked_category_data['category_id']);
        $linked_category_info['name'] = $linked_category['name'];
        $linked_categories[] = $linked_category_info;

        }
        $data['linked_categories'] = $linked_categories;

 

Далее в catalog/language/*/product/product.php перед $_['text_manufacturer']

Добавил

Спойлер

$_['text_linked_categories']   = 'Категории:';

 

Далее в catalog/view/theme/*/template/product/product.twig перед строкой {% if manufacturer %}

Добавил

Спойлер

{% if linked_categories %}
<li>{{ text_linked_categories }}
{% for linked_category in linked_categories %}
<a href="{{ linked_category.href }}">{{ linked_category.name }}</a>,;
{% endfor %}
</li>

{% endif %}

 

Изменено пользователем chixx
Ссылка на комментарий
Поделиться на другие сайты

В 15.01.2024 в 04:18, chixx сказал:

Только вот у меня в конце ставиться запятая. Кто знает, что дописать, чтобы не ставилась?)

 

image.png.67e8b5304c41f7f8b2fcc3c3e8f3ea50.png

 

переделать свое

<a href="{{ linked_category.href }}">{{ linked_category.name }}</a>,;

с учетом последнего элемента

Ссылка на комментарий
Поделиться на другие сайты

В 15.01.2024 в 05:10, AlexDW сказал:

 

переделать свое

<a href="{{ linked_category.href }}">{{ linked_category.name }}</a>,;

с учетом последнего элемента

Это я догадался))) Вот если бы было решение, было бы прекрасно. Я в итоге сделал так, помогло

 

Спойлер

{% if linked_categories %}
{% for linked_category in linked_categories %}
<a style="color:#71be00;" <a href="{{ linked_category.href }}">{{ linked_category.name }}</a>{% if not loop.last %}, {% endif %}
{% endfor %}
</li>
{% endif %}

 

Хз, правильно или нет) Но работает

 

Кстати, кому надо. У меня модуль HPM и выводились его пустые категории, добавил проверку, чтобы не тянулись выключенные категориии. В итоге получилось так

 

Спойлер

$data['text_linked_categories'] = $this->language->get('text_linked_categories');
$query_linked_categories = $this->model_catalog_product->getCategories($product_id);
$linked_categories = array();
foreach( $query_linked_categories as $linked_category_data ) {
$linked_category = $this->model_catalog_category->getCategory($linked_category_data['category_id']);
if ($linked_category['status']) {
$linked_category_info['id'] = $linked_category_data['category_id'];
$linked_category_info['href'] = $this->url->link('product/category', 'path=' . $linked_category_data['category_id']);
$linked_category_info['name'] = $linked_category['name'];
$linked_categories[] = $linked_category_info;
}
}
$data['linked_categories'] = $linked_categories;

 

Изменено пользователем chixx
Ссылка на комментарий
Поделиться на другие сайты

На этом все не закончилось. Вылезло предупреждение.

 

PHP Notice:  Undefined index: status in /var/www/storage/modification/catalog/controller/product/product.php on line 272

 

На эту строку ворчит if ($linked_category['status']) {

 

Кто подскажет, что делать дальше?)

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...