Jump to content

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


chixx
 Share

Go to solution Solved by chixx,

Recommended Posts

Кто знает, как их вывести?) 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 %}

 

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

Link to comment
Share on other sites

В 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`, чтобы они отображались как вам нужно.

Link to comment
Share on other sites

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

 

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

 

image.thumb.png.3ba1115a4ba546d1942aa355cf979919.png

 

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

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

 

image.png.1d781ddc997409c192507059fe7f471d.png

Link to comment
Share on other sites

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

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

 

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

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

Link to comment
Share on other sites

В 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 />

 

Edited by chixx
Link to comment
Share on other sites

  • 2 weeks later...
  • Solution

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

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

В 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 %}

 

Edited by chixx
Link to comment
Share on other sites

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

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

 

image.png.67e8b5304c41f7f8b2fcc3c3e8f3ea50.png

 

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

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

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

Link to comment
Share on other sites

В 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;

 

Edited by chixx
Link to comment
Share on other sites

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

 

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

 

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

 

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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...