Magento - Изменить атрибут выбора в раскрывающемся списке в Adv Search - PullRequest
1 голос
/ 06 марта 2011

Я пытался найти способ заставить атрибут отображаться как раскрывающийся список, а не блок параметров, но безуспешно.Текущий код выглядит следующим образом:

case 'select': ?>
    <div class="input-box"> <?php echo $this->getAttributeSelectElement($_attribute) ?> </div>
    <?php endswitch; ?>

Кто-нибудь знает, как сделать его похожим на выпадающий список?

Заранее спасибо

Ответы [ 3 ]

2 голосов
/ 02 мая 2012

У меня была такая же проблема ранее сегодня, и самое странное, что у меня были атрибуты (раскрывающиеся) с теми же свойствами, но один отображал выпадающее меню, а другой - меню множественного выбора в расширенном поиске.

Я провел некоторое тестирование с различными настройками, и оказалось, что в расширенном поиске каждый атрибут, представляющий собой список (выпадающий и множественный выбор) и имеющий более 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; ?>
0 голосов
/ 10 мая 2017

Magento имеет класс для генерации выборок, доступный как класс Mage_Core_Block_Html_Select (/app/code/core/Mage/Core/Block/Html/Select.php).

В вашем шаблоне каталога шаблонов / catalogsearch / advanced / form.phtml замените

echo $this->getAttributeSelectElement($_attribute);

С

echo $this->getLayout()->createBlock('core/html_select')
                    ->setOptions( $_attribute->getSource()->getAllOptions(true))
                    ->setName($_attribute->getAttributeCode())
                    ->setClass('select')
                    ->setId($_attribute->getAttributeCode())
                    ->setTitle($this->getAttributeLabel($_attribute))
                    ->getHtml();
0 голосов
/ 07 марта 2011

Извините за мой английский ... я француз; -)

В вашей админ-панели вы можете выбрать тип ваших атрибутов

Убедитесь, что ваш атрибут объявлен как список. В моей версии Magento это третья информация в админ-панели атрибутов после кода и области видимости.

PoyPoy

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...