Атрибут Magento multi select - не будет отображаться на внешнем интерфейсе, если для продукта выбрана только 1 опция

1

Возникла проблема с отображением опций атрибутов multi-select: следующий код, используемый в каталоге /product/list.phtml, отлично работает, чтобы отображать выбранные атрибуты, но только если выбрана опция БОЛЬШЕ ЧЕМ ONE, поэтому, если только один параметр из мультивыбора атрибут выбран, он ничего не отображает?

<?php
$targetValues = $_product->getAttributeText('ni_featured_logo_multi');
foreach($targetValues as $_target) :?>
<div class="featuredlogolist">
<span class="helper"></span>
<img src="<?php echo $this->getSkinUrl() ?>FEATURED_LOGOS/<?php echo $_target ?>.png" class="featuredlogo"></img>
</div>
<?php endforeach;
?>

Это верно и для страницы продукта (код, используемый в каталоге /product/view.phtml)

 <?php
   $multiSelectArray = $this->getProduct ()->getAttributeText('ni_featured_logo_multi');
   $lastItem = end ($multiSelectArray);
   foreach ($multiSelectArray as $multiSelectItem) :?>
   <img src="<?php echo $this->getSkinUrl() ?>FEATURED_LOGOS/<?php echo $multiSelectItem ?>.png" class="featuredlogo"></img>
   <?php endforeach;
 ?>

любые идеи о том, как настроить вызов, чтобы отображать атрибут multi select при выборе только одного параметра? благодарю!

Теги:
attributes
magento
multi-select

2 ответа

1
Лучший ответ

Проблема заключается в том, что getAttributeText() фактически возвращает массив только в том случае, если имеется более одного параметра, иначе он просто возвращает единственную опцию в виде строкового литерала. Я думаю, что объявление метода на самом деле неправильно здесь, но я могу подтвердить, что это поведение из опыта.

Вы должны добавить простую проверку:

if ($targetValues = $_product->getAttributeText('ni_featured_logo_multi')) {
    if (is_string($targetValues)) {
        $targetValues = array($targetValues);
    }
    foreach ($targetValues as $_target) ...
}
  • 0
    Спасибо за ответ! - не могу заставить этот код работать? не могли бы вы уточнить, как использовать его в списке продуктов и продуктов? Спасибо за помощь
  • 0
    @chrismmmmm - Что произойдет, если вы var_dump($targetValues) в свой код?
Показать ещё 1 комментарий
1

хотел опубликовать рабочий код - с помощью edit from fantasticrice: multi select в каталоге /product/list.phtml: (это получение имени изображения из папки скинов)

 <?php if ($targetValues = $_product->getAttributeText('your_attribute_code')) {
    if (is_string($targetValues)) {
        $targetValues = array($targetValues);
    }
        foreach($targetValues as $_target) :?>
         <div class="featuredlogo">
         <img src="<?php echo $this->getSkinUrl() ?>FEATURED_LOGOS/<?php echo $_target ?>.png" class="featuredlogo"></img>
         </div>
        <?php endforeach;
                 }
    ?>

и вот в каталоге /product/view.phtml:

  <?php
    if ($multiSelectArray = $this->getProduct ()->getAttributeText('your_attribute_code')) {
    if (is_string($multiSelectArray)) {
        $multiSelectArray = array($multiSelectArray);
    }
    foreach ($multiSelectArray as $multiSelectItem) :?>
   <img src="<?php echo $this->getSkinUrl() ?>FEATURED_LOGOS/<?php echo $multiSelectItem ?>.png" class="featuredlogo"></img>
   <?php endforeach;

                    }
    ?>

Спасибо, фантастический!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню