Возникла проблема с отображением опций атрибутов 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 при выборе только одного параметра? благодарю!
Проблема заключается в том, что getAttributeText()
фактически возвращает массив только в том случае, если имеется более одного параметра, иначе он просто возвращает единственную опцию в виде строкового литерала. Я думаю, что объявление метода на самом деле неправильно здесь, но я могу подтвердить, что это поведение из опыта.
Вы должны добавить простую проверку:
if ($targetValues = $_product->getAttributeText('ni_featured_logo_multi')) {
if (is_string($targetValues)) {
$targetValues = array($targetValues);
}
foreach ($targetValues as $_target) ...
}
хотел опубликовать рабочий код - с помощью 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;
}
?>
Спасибо, фантастический!
var_dump($targetValues)
в свой код?