У меня была такая же проблема ранее сегодня, и самое странное, что у меня были атрибуты (раскрывающиеся) с теми же свойствами, но один отображал выпадающее меню, а другой - меню множественного выбора в расширенном поиске.
Я провел некоторое тестирование с различными настройками, и оказалось, что в расширенном поиске каждый атрибут, представляющий собой список (выпадающий и множественный выбор) и имеющий более 2 параметров, отображается как множественный выбор.
Я посмотрел на Mage_CatalogSearch_Block_Advanced_Form, хранящийся в /app/code/core/Mage/CatalogSearch/Block/Advanced/Form.php, и увидел, где проверяется это условие 2. Команда разработчиков magento сделала так, чтобы убедиться, что «yesno» или логический список отображаются в виде выпадающего списка.
В вышеупомянутом файле, начиная со строки 173 (в текущей версии magento)
это следующий код:
public function getAttributeSelectElement($attribute)
{
$extra = '';
$options = $attribute->getSource()->getAllOptions(false);
$name = $attribute->getAttributeCode();
// 2 - avoid yes/no selects to be multiselects
if (is_array($options) && count($options)>2) {
. . .
Если вы измените число два в последней строке на число 5, расширенный поиск отобразит раскрывающееся меню для каждого атрибута, который имеет менее 6 параметров.
Что я сделал для себя, так это добавил новый метод getAttributeDropDownElement (), ниже getAttributeSelectElement (), который выглядит следующим образом:
public function getAttributeDropDownElement($attribute)
{
$extra = '';
$options = $attribute->getSource()->getAllOptions(false);
$name = $attribute->getAttributeCode();
// The condition check bellow is what will make sure that every
// attribute will be displayed as dropdown
if (is_array($options)) {
array_unshift($options, array('value'=>'', 'label'=>Mage::helper('catalogsearch')->__('All')));
}
return $this->_getSelectBlock()
->setName($name)
->setId($attribute->getAttributeCode())
->setTitle($this->getAttributeLabel($attribute))
->setExtraParams($extra)
->setValue($this->getAttributeValue($attribute))
->setOptions($options)
->setClass('multiselect')
->getHtml();
}
Следующее, что вам нужно сделать, - это небольшой оператор if внутри переключателя формы (см. Ниже), который будет проверять имя атрибута и основываться на нем для вызова либо getAttributeSelectElement (), либо нашего нового метода getAttributeDropDownElement () , Я оставляю вам эту работу :)
case 'select': ?>
<div class="input-box"> <?php echo $this->getAttributeSelectElement($_attribute) ?> </div>
<?php endswitch; ?>