Показать последнюю дочернюю категорию на странице продукта — Opencart

#xml #opencart

Вопрос:

Я нашел этот код и изменил его для темы Journal3, и он работает. Но теперь он показывает все родительские и дочерние категории. Я хотел бы видеть только ПОСЛЕДНЮЮ дочернюю категорию, в которой находится данный продукт. Кто-нибудь может помочь мне скорректировать код? В данном случае мне нужна только последняя категория (фишки)

Нужна только последняя категория

Версия: 3.0.3.7 Журнал: 3.1.8

 <?xml version="1.0" encoding="UTF-8"?>
<modification>
<code>Show_Linked_Categories_on_Product_page</code>
<name>Show Linked Categories on Product page</name>
<version>1.0.0</version>
<author></author>
<link></link>
<file path="catalog/controller/product/product.php">
<operation error="log">
<search><![CDATA[$product_info = $this->model_catalog_product->getProduct($product_id);]]></search>
<add position="after" index="1"><![CDATA[
$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;
}
]]></add>
</operation>

<operation error="log">
<search><![CDATA[$data['manufacturer'] = $product_info['manufacturer'];]]></search>
<add position="before"><![CDATA[
$data['linked_categories'] = $linked_categories;
]]></add>
</operation>
</file>

<file path="catalog/language/nl-nl/product/product.php">
<operation error="log">
<search><![CDATA[$_['text_manufacturer']]]></search>
<add position="before"><![CDATA[
$_['text_linked_categories']        = 'Categorie:';
]]></add>
</operation>
</file>

<file path="catalog/view/theme/journal3/template/product/product.twig">
<operation error="log">
<search><![CDATA[<li class="product-sku"><b>{{ j3.settings.get(stylePrefix ~ 'ProductSKUText') }}:</b> <span> {{ product_sku }}</span></li>]]></search>
<add position="before"><![CDATA[
{% if linked_categories %}
  <li class="product-sku"><b>{{ text_linked_categories }}</b> 
  {% for linked_category in linked_categories %}
            <span><a href="{{ linked_category.href }}">{{ linked_category.name }}</a></span>;
            {% endfor %}
            </li>
            {% endif %}

]]></add>
</operation>
</file>
</modification>
 

В итоге я получил этот рабочий код:

 <?xml version="1.0" encoding="UTF-8"?>
<modification>
    <code></code>
    <name></name>
    <version></version>
    <ocver></ocver>
    <author></author>
    <date></date>

    <file path="catalog/controller/product/product.php">
        <operation error="log">
            <search><![CDATA[$product_info = $this->model_catalog_product->getProduct($product_id);]]></search>
            <add position="after" index="0">
                <![CDATA[
                $data['text_linked_category']   = $this->language->get( 'text_linked_category' );
                $data['linked_category_info']   = [];

                $linked_categories = $this->model_catalog_product->getCategories($product_id);
                $last_category = array_pop( $linked_categories );

                if( $target_category = $this->model_catalog_category->getCategory( $last_category['category_id'] ) ) {
                    $data['linked_category_info'] = [
                        'id'    => $target_category['category_id'],
                        'href'  => $this->url->link( 'product/category', 'path=' . $target_category['category_id'], true ),
                        'name'  => $target_category['name']
                    ];
                }
                ]]>
            </add>
        </operation>
    </file>

    <file path="catalog/language/nl-nl/product/product.php">
        <operation error="log">
            <search><![CDATA[$_['text_manufacturer']]]></search>
            <add position="before"><![CDATA[$_['text_linked_category']        = 'Categorie:';]]></add>
        </operation>
    </file>

    <file path="catalog/view/theme/journal3/template/product/product.twig">
        <operation error="log">
            <search><![CDATA[<li class="product-sku"><b>{{ j3.settings.get(stylePrefix ~ 'ProductSKUText') }}:</b> <span> {{ product_sku }}</span></li>]]></search>
            <add position="before">
            <![CDATA[
            {% if linked_category_info %}
              <li class="product-sku"><b>{{ text_linked_category }}</b>
                <span><a href="{{ linked_category_info.href }}" style="text-decoration: none">{{ linked_category_info.name }}</a></span>
                </li>
            {% endif %}
            ]]>
            </add>
        </operation>
    </file>
</modification>
 

Комментарии:

1. Что вам нужно на самом деле? пожалуйста, загрузите скриншот для лучшего понимания для нас.

2. Привет, Муджахид, я добавил скриншот.

3. но теперь он работает над скриншотом.

4. Это работает! Но он также показывает родительские категории. Я хочу показать только последнюю категорию детей. В данном случае ЧИПСЫ.

5. да, поймите, я скоро увижу код и обновлю его

Ответ №1:

Замените следующий код в Своем XML — файле:

 <modification>
<code>Show_Linked_Categories_on_Product_page</code>
<name>Show Linked Categories on Product page</name>
<version>1.0.0</version>
<author></author>
<link></link>
<file path="catalog/controller/product/product.php">
<operation error="log">
<search><![CDATA[$product_info = $this->model_catalog_product->getProduct($product_id);]]></search>
<add position="after" index="1"><![CDATA[
$data['text_linked_categories'] = $this->language->get('text_linked_categories');
$query_linked_categories = $this->model_catalog_product->getCategories($product_id);
//echo '<pre>'; print_r($query_linked_categories); echo '</pre>';
$linked_categories = array();
foreach( $query_linked_categories as $linked_category_data ) {
$linked_category = $this->model_catalog_category->getCategory($linked_category_data['category_id']);
//echo '<pre>'; print_r($linked_category); echo '</pre>';
$linked_category_info['id'] = $linked_category_data['category_id'];
$linked_category_info['href'] = $this->url->link('product/category', 'path=' . $linked_category_data['category_id']);
// CALL custom Function getCategoryName HERE
$linked_category_info['name'] = $this->model_catalog_product->getCategoryName($linked_category_data['category_id']);

$linked_categories[] = $linked_category_info;
}
]]></add>
</operation>

<operation error="log">
<search><![CDATA[$data['manufacturer'] = $product_info['manufacturer'];]]></search>
<add position="before"><![CDATA[
$data['linked_categories'] = $linked_categories;
echo '<pre>'; print_r($data['linked_categories']); echo '</pre>';
]]></add>
</operation>
</file>

<file path="catalog/model/catalog/product.php">
<operation error="log">
<search><![CDATA[public function getProducts($data = array()) {]]></search>
<add position="before"><![CDATA[public function getCategoryName($category_id) {
        $query = $this->db->query("SELECT GROUP_CONCAT(cd1.name ORDER BY cp.level SEPARATOR 'amp;nbsp;amp;nbsp;amp;>amp;nbsp;amp;nbsp;') AS name FROM " . DB_PREFIX . "category_path cp LEFT JOIN " . DB_PREFIX . "category c1 ON (cp.category_id = c1.category_id) LEFT JOIN " . DB_PREFIX . "category c2 ON (cp.path_id = c2.category_id) LEFT JOIN " . DB_PREFIX . "category_description cd1 ON (cp.path_id = cd1.category_id) LEFT JOIN " . DB_PREFIX . "category_description cd2 ON (cp.category_id = cd2.category_id) WHERE cp.category_id = '" . (int)$category_id . "'");
          
        return $query->row['name'];}]]></add>
</operation>
</file>

<file path="catalog/language/nl-nl/product/product.php">
<operation error="log">
<search><![CDATA[$_['text_manufacturer']]]></search>
<add position="before"><![CDATA[
$_['text_linked_categories']        = 'Categorie:';
]]></add>
</operation>
</file>

<file path="catalog/view/theme/journal3/template/product/product.twig">
<operation error="log">
<search><![CDATA[<li class="product-sku"><b>{{ j3.settings.get(stylePrefix ~ 'ProductSKUText') }}:</b> <span> {{ product_sku }}</span></li>]]></search>
<add position="before"><![CDATA[
{% if linked_categories %}
  <li class=""><b>{{ text_linked_categories }}</b> 
  {% for linked_category in linked_categories %}
            <span><a href="{{ linked_category.href }}">{{ linked_category.name }}</a></span>;
            {% endfor %}
            </li>
            {% endif %}

]]></add>
</operation>
</file>
</modification>
 

Комментарии:

1. Вы можете увидеть здесь: inceptionsystem.com/bmc/index.php?route=product/…

2. Спасибо вам за вашу работу! В итоге у меня появился другой код. Смотрите мой первый пост.