Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Вывод атрибутов вместо описания в категориях


ingenerks

Recommended Posts

Уважаемые знатоки, прочитал тему от корки до корки да и в гугле не забанен, но  пробовал вывести определённые атрибуты из карточки как описано у Вас и тут ( https://opencartforum.com/topic/33811-%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%BE-%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4-%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%BD%D1%8B%D1%85-%D0%B0%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82%D0%BE%D0%B2/ ) например, вывести атрибут в карточке товара получается без проблем, но как только я пытаюсь вывести таким же образом атрибуты в категории у меня опенкарт ругается на неопределённую переменную https://yadi.sk/i/3_AtexCf34ftPM , хотя я добавил уже в оба контроллера в массив продукта строчку https://yadi.sk/i/slk6Z90w34ftzn (хотя вроде определение есть в продукт.тпл). Вся надежда на Вас)

Надіслати
Поділитися на інших сайтах


Похвально,что в начале была хотя бы попытка найти решение.
 
В контроллер category.php  после  

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

добавить

'attribute_groups' => $this->model_catalog_product->getProductAttributes($result['product_id']),

в шаблон категории в нужном месте в виде списка атрибутов
 

<p>
<?php if ($product['attribute_groups']) { ?>
<?php foreach ($product['attribute_groups'] as $attribute_group) { ?>
<strong><?php echo $attribute_group['name']; ?>:</strong>
<?php foreach ($attribute_group['attribute'] as $attribute) { ?>
<span><?php echo $attribute['name']; ?>:</span> <?php echo $attribute['text']; ?><br />   
<?php } ?>
<?php } ?>
<?php } ?>
</p>

 или таблицей вариант 2

<p>
  <?php if ($product['attribute_groups']) { ?>
<div class="tab-pane" id="tab-specification">
  <table class="table table-bordered">
    <?php foreach ($product['attribute_groups'] as $attribute_group) { ?>
    <thead>
    <tr>
      <td colspan="2"><strong><?php echo $attribute_group['name']; ?></strong></td>
    </tr>
    </thead>
    <tbody>
    <?php foreach ($attribute_group['attribute'] as $attribute) { ?>
    <tr>
      <td><?php echo $attribute['name']; ?></td>
      <td><?php echo $attribute['text']; ?></td>
    </tr>
    <?php } ?>
    </tbody>
    <?php } ?>
  </table>
</div>
<?php } ?>
</p>

или в одну строку,через слеш вариант 3

 

<p>
<?php if ($product['attribute_groups']) { ?>
<?php foreach ($product['attribute_groups'] as $attribute_group) { ?>
<strong><?php echo $attribute_group['name']; ?>:</strong>
<?php foreach ($attribute_group['attribute'] as $attribute) { ?>
<span><?php echo $attribute['name']; ?>:</span> <?php echo $attribute['text']; ?> /   
<?php } ?>
<?php } ?>
<?php } ?>
</p>
  • +1 1
Надіслати
Поділитися на інших сайтах

и если Вам не сложно подскажите ещё деталь: 
 

<?php if ($product['attribute_groups']) { ?>
<?php foreach ($product['attribute_groups'] as $attribute_group) { ?>



<?php foreach ($attribute_group['attribute'] as $attribute) { ?>
            <?php if(in_array($attribute['attribute_id'], array(20))) { ?>
                <?php echo $attribute['name']; ?>
                <?php echo $attribute['text']; ?>
            <?php }?>
        <?php }?>
	
<?php } ?>
<?php } ?>

сделал вывод по айди атрибута, но по итогу хочу получить таблицу такого плана:

<div class='group_attr'>
  <span>значение первого атрибута['text']</span> 
  <i>*</i>
  <span>значение второго атрибута['text']</span> 
  <i>=</i>
  <span>значение третьего атрибута['text']</span>
</div>
<div class='group_attr__second'>
  <span>{блок одного цвета - цвет зависит от значения атрибута['attribute_id']}</span> 
</div>

Подскажите, если не трудно, как ПРАВИЛЬНО это сделать а не перебирать кучей вызовов? Я так понимаю что в случае с цветом можно просто к спану последнему добавить определённый класс который зависит от значения атрибута 
 
 
 
Пока что придумал как решение такой вариант 

<div class='group_attr'>
<span>
<?php if ($attribute['attribute_id'] == 20) { ?> 
<?php echo $attribute['text']; ?> 
<?php }?> 
</span>
<i>*</i>
<span>
<?php if ($attribute['attribute_id'] == 19) { ?> 
<?php echo $attribute['text']; ?> 
<?php }?> 
</span>
<i>=</i>
<span>
<?php if ($attribute['attribute_id'] == 12) { ?> 
<?php echo $attribute['text']; ?> 
<?php }?> 
</span>
</div>
<div class='group_attr__second'>
<span class="color-<?php if ($attribute['attribute_id'] == 12) { ?> 
<?php echo $attribute['text']; ?> 
<?php }?> " >Цвет:{тут будет псевдоэлементом выводиться цвет в зависимости от класса}
</span>
 
</div>

но вот только это не верно с точки зрения кода потому как выводит только инфу с одного поля(((    разобрался - такой цикл выводит просто массив  и если я ?php echo $attribute['text']; ?>  таким образом вывожу нужные мне атрибуты то они становятся в том порядке в котором они обозначены в админке((

Змінено користувачем wildbee
Надіслати
Поділитися на інших сайтах


  • 5 weeks later...

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

Надіслати
Поділитися на інших сайтах


  • 10 months later...

Ребята, добрый всем день! Может подскажете как вывести те же атрибуты в карточке только на версии 3.0.2.0

То есть как мне преобразовать этот код для twig:

<?php foreach($product['attribute_groups'] as $attribute_group) { ?>
                <?php foreach($attribute_group['attribute'] as $attribute) { ?>
                    <?php if($attribute['attribute_id'] == 21) { ?>
                        <div class="attr-cat">Вес: <?php echo $attribute['text']; ?></div>
                    <?php } ?><?php } ?><?php } ?>

 

Спасибо за помощь.

PS php еще не до конца разобрал, а тут уже шаблонизатор встроили - вообще напряг(

Змінено користувачем Sharapov317
ошибка к в тексте
Надіслати
Поділитися на інших сайтах


Ну, в общем методом тыка получилось)

Вот кому нужно:

{% for attribute_group in product.attribute_groups %}
                {% for attribute in attribute_group.attribute %}
                {% if attribute.attribute_id == 21 %}
                <div class="attr-cat">Вес: {{ attribute.text }}</div>
                {% endif %}
                {% endfor %}
                {% endfor %}

Надіслати
Поділитися на інших сайтах


  • 3 months later...

Всем, привет,

затронули полезную тему. 

Решил и у себя реализовать вывод атрибутов.

Однако, столкнулся с такой проблемой: поправил файлы, обновляю страницу - на секунду все отображается как надо - вместо описания характеристики, но через секунду опять все заменяется описанием.

Кто знает, что на это может влиять? Модификаторы, вроде бы эти файлы не затрагивают

modif.JPG

Надіслати
Поділитися на інших сайтах


  • 2 weeks later...

Всем привет!

Подскажите пожалуйста в чем моя ошибка .

делаю как написано во всех примерах :

в файле category.php

                $data['attribute_groups'] = $this->model_catalog_product->getProductAttributes($this->request->get['product_id']);
                $data['products'][] = array(
                    'product_id'  => $result['product_id'],
                    'thumb'       => $image,
                    'name'        => $result['name'],
                    'description' => utf8_substr(trim(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8'))), 0, $this->config->get('theme_' . $this->config->get('config_theme') . '_product_description_length')) . '..',
                    'price'       => $price,
                    'special'     => $special,
                    'tax'         => $tax,
                    'minimum'     => $result['minimum'] > 0 ? $result['minimum'] : 1,
                    'rating'      => $result['rating'],
                    'href'        => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url)

 

в файле category.twig

<h4><a href="{{ product.href }}">{{ product.name }}</a></h4>
                <p>{{ product.description }}</p>
                <p>{% if attribute_groups %}
                <div class="tab-pane" id="tab-specification">
                  <table class="table table-bordered">
                    {% for attribute_group in attribute_groups %}
                    <thead>
                      <tr>
                        <td colspan="2"><strong>{{ attribute_group.name }}</strong></td>
                      </tr>
                    </thead>
                    <tbody>
                    {% for attribute in attribute_group.attribute %}
                    <tr>
                      <td>{{ attribute.name }}</td>
                      <td>{{ attribute.text }}</td>
                    </tr>
                    {% endfor %}
                      </tbody>
                    {% endfor %}
                  </table>
                </div>
                {% endif %}</p>

 

В итоге все шрифты - иероглифы, атрибутов тоже не видать

 

Надіслати
Поділитися на інших сайтах


  • 1 year later...

на ocstore 3 делал для себя так: если есть атрибуты есть, то выводятся все, что есть, если нет то выводится описание:

 

{% if product.attribute_groups %} 
  <ul class="list-unstyled">
  {% for attribute_group in product.attribute_groups %} 
  {% for attribute in attribute_group.attribute %} 
  <li><strong>{{ attribute.name }}</strong> : {{ attribute.text }}</li>
 {% endfor %} 
   {% endfor %} 
 </ul>
 {% else %} 
<p>{{ product.description }}</p>
  {% endif %}

  • +1 1
Надіслати
Поділитися на інших сайтах


  • 3 weeks later...

Подскажите, пожалуйста, есть группа атрибутов 1, 2, 3 и т.п., в каждой группе находятся атрибуты 1.1, 1.2, 2.1, 3.1 и т.п

Когда начинаю выводить атрибуты из разных групп, только атрибуты из первой группы выводиться в таблице, остальные сплошным текстом. Как исправить, чтобы все в таблице выводились?

Код:

в файле category.php
 'attribute_groups' => $this->model_catalog_product->getProductAttributes($result['product_id']),

 

в файле category.tpl
  
                <?php if($product['attribute_groups']) { ?>
<table style="margin-bottom:10px;">
    <?php foreach($product['attribute_groups'] as $attribute_group) { ?>
    
    <tbody>
        <?php foreach($attribute_group['attribute'] as $attribute) { ?>
        <?php if(in_array($attribute['attribute_id'], array(15,16,19,25,29,40,41))){ ?>
        <tr>
            <td style="padding-right:10px; font-size: 11px"><?php echo $attribute['name']; ?></td>
            <td style="font-size: 11px"><?php echo $attribute['text']; ?></td>
        </tr>
        <?php } ?>
    </tbody>
    <?php } ?>
</table>
<?php } ?>
<?php } ?>

 

Надіслати
Поділитися на інших сайтах


  • 1 month later...
В 02.12.2017 в 12:31, Sharapov317 сказал:

Ну, в общем методом тыка получилось)

Вот кому нужно:

{% for attribute_group in product.attribute_groups %}
                {% for attribute in attribute_group.attribute %}
                {% if attribute.attribute_id == 21 %}
                <div class="attr-cat">Вес: {{ attribute.text }}</div>
                {% endif %}
                {% endfor %}
                {% endfor %}

ДАЙ БОГ ТЕБЕ ЗДОРОВЬЯ БРАТИК

Надіслати
Поділитися на інших сайтах


  • 1 year later...

Здравствуйте, испробовал все варианты что были здесь, но единственное что мне выводит в карточке товара это двоеточие. Мне кажется что opencart не может найти эти атрибуты для их вывода и проблема в controller, но понять какая именно проблема не могу. Версия 3.0.2.0. Прошу помогите

Надіслати
Поділитися на інших сайтах


12 минут назад, StivenLight сказал:

Прошу помогите

для начала, покажите что сделали

Надіслати
Поділитися на інших сайтах

1 час назад, fanatic сказал:

для начала, покажите что сделали

Файл controller отредактировал так:

$data['products'][] = array(
				    'attribute_groups' => $this->model_catalog_product->getProductAttributes($result['product_id']),

Далее добавил этот код в файл категорий:

<p>
<?php if ($product['attribute_groups']) { ?>
<?php foreach ($product['attribute_groups'] as $attribute_group) { ?>
<strong><?php echo $attribute_group['name']; ?>:</strong>
<?php foreach ($attribute_group['attribute'] as $attribute) { ?>
<span><?php echo $attribute['name']; ?>:</span> <?php echo $attribute['text']; ?><br />   
<?php } ?>
<?php } ?>
<?php } ?>
</p>

Вместо этого:

<p>{{ product.description }}</p>

Я хотел избавиться от описания и вместо него поставить вывод атрибутов в карточке товара

Надіслати
Поділитися на інших сайтах


2 часа назад, StivenLight сказал:

Версия 3.0.2.0.

там же twig

а вы в шаблоне обычный php

Надіслати
Поділитися на інших сайтах

<table class="table table-bordered">
  {% for attribute_group in attribute_groups %}
  <thead>
    <tr>
      <td colspan="2"><strong>{{ attribute_group.name }}</strong></td>
    </tr>
  </thead>
  <tbody>
  {% for attribute in attribute_group.attribute %}
  <tr>
    <td>{{ attribute.name }}</td>
    <td>{{ attribute.text }}</td>
  </tr>
  {% endfor %}
    </tbody>
  {% endfor %}
</table>

посмотрите в product.twig  как выводятся атрибуты

Надіслати
Поділитися на інших сайтах

31 минуту назад, fanatic сказал:

<table class="table table-bordered">
  {% for attribute_group in attribute_groups %}
  <thead>
    <tr>
      <td colspan="2"><strong>{{ attribute_group.name }}</strong></td>
    </tr>
  </thead>
  <tbody>
  {% for attribute in attribute_group.attribute %}
  <tr>
    <td>{{ attribute.name }}</td>
    <td>{{ attribute.text }}</td>
  </tr>
  {% endfor %}
    </tbody>
  {% endfor %}
</table>

посмотрите в product.twig  как выводятся атрибуты

Да, я видел как там выводятся, но вместо вывода атрибутов у меня показывается таблица с пустыми значениями

Надіслати
Поділитися на інших сайтах


48 минут назад, StivenLight сказал:

Да, я видел как там выводятся, но вместо вывода атрибутов у меня показывается таблица с пустыми значениями

Notice: Undefined variable: result in 136

Вот такая ошибка появилась теперь

 

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.