Magento, карточка товара: пропуск пустых атрибутов при отображении

Как показывать только заполненные характеристики товара

[10 ноября 2016 г.]    Российская сборка Magento 2.49.12
Magento 2: модули и услуги
#1 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8884
  • Регистрация: 20.02.2010

03.06.2010 19:23

Magento по умолчанию показывает на карточке товара витрины все атрибуты: и заполненные, и пустые.
Если вы хотите пропускать пустые значения, ниже дано решение.

За отображение таблицы атрибутов в стандартных темах Magento отвечает следующий блок:

<block type="catalog/product_view_attributes" name="product.attributes" as="additional" template="catalog/product/view/attributes.phtml"/>


Откройте файл шаблона для этого блока.
В указанном выше примере это файл catalog/product/view/attributes.phtml вашей текущей темы, либо темы-предка (в Magento работает наследование тем).

Для темы Magento Default это будет шаблон app/design/frontend/base/default/template/catalog/product/view/attributes.phtml

В данном шаблоне вы увидите программный код построения в цикле таблицы атрибутов:

<?php 
	foreach ($_additional as $_data) {
		?>
			<tr>
				<th class="label"><?php echo $this->htmlEscape($this->__($_data['label'])) ?></th>
				<td class="data"><?php echo $_helper->productAttribute($_product, $_data['value'], $_data['code']) ?></td>
			</tr>
		<?php
	}
?>



Так вот перед тем, как отображать строку, добавьте проверку на наличие значения атрибута.
Например, для атрибутов типа Dropdown (выбор значения из фиксированного множества; на витрине это обычно выпадающий список) значением по умолчанию является "Нет" (или "No", в зависимости от текущего языка интерфейса).
Можно пропускать пустые атрибуты следующим образом:

<?php 
	foreach ($_additional as $_data) {
[b]		if (
				(Mage::helper('eav')->__('No') == $_data['value'])
		) {
			continue;
		}[/b]
		?>
			<tr>
				<th class="label"><?php echo $this->htmlEscape($this->__($_data['label'])) ?></th>
				<td class="data"><?php echo $_helper->productAttribute($_product, $_data['value'], $_data['code']) ?></td>
			</tr>
		<?php
	}
?>


#2 Евгений Шевченко (вор)
  • ворует чужие модули и перепродаёт
  • Группа: Заблокирован
  • Сообщений: 126
  • Регистрация: 17.08.2010

18.12.2010 11:15

Для версии 1.4.2 новый код
<?php foreach ($_additional as $_data): if (

                                (Mage::helper('eav')->__('N/A') == $_data['value'])

                ) {

                        continue;

                } ?>
            <tr>
                <th class="label"><?php echo $this->htmlEscape($this->__($_data['label'])) ?></th>
                <td class="data"><?php echo $_helper->productAttribute($_product, $_data['value'], $_data['code']) ?></td>
            </tr>
        <?php endforeach; ?>


#3 Олег Шмаков
  • Группа: Клиент
  • Сообщений: 10
  • Регистрация: 01.02.2011

01.02.2011 01:02

Если стоит модуль "Easy Tabs", то править нужно в нем, тот же attributes.phtml

В случае усли у вас пустые значения были разные "Нет" и "Не применимо", то просто повторите код с другим значением проверки
                if // проверяем на "Неприменимо" // (

                                (Mage::helper('eav')->__('N/A') == $_data['value'])

                ) {

                        continue;

                }
                if  // проверяем на "Нет" //(

                                (Mage::helper('eav')->__('No') == $_data['value'])

                ) {

                        continue;

                }
                 ?>


PS Ничего не смыслю в программировании, так что сильно не пинать, методом тыка сделал.

#4 Олег Шмаков
  • Группа: Клиент
  • Сообщений: 10
  • Регистрация: 01.02.2011

02.02.2011 11:32

Пришел программист, посмотрел, настучал по шее и переправил :D
После чего все вообще все перестало работать, сказал что ща переправит, но за мой костыль, надо руки вырывать.
<?  foreach ($_additional as $_data)
    {
      $h1=Mage::helper('eav')->__('N/A');
      $h2=Mage::helper('eav')->__('No'); 
      $v=$_data['value'];
      echo 'debug: '.$h1.' : '.$h2.' : '.$v;'
      if (($h1 != $v) && ($h2 != $v)) 
      {
?>
  <tr>
    <th class="label"><?=$this->htmlEscape($this->__($_data['label']))?></th>
    <td class="data"><?=$_helper->productAttribute($_product, $_data['value'], $_data['code'])?></td>
  </tr>
<?
      }
    }
?>


Поделиться темой: