2011-03-06 64 views
0

我一直在試圖找到強制屬性顯示爲下拉菜單而不是選項塊但卻沒有運氣的方法。代碼電流看起來像這樣:Magento - 將屬性選擇更改爲高級搜索中的下拉列表

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

有誰知道如何使它看起來像一個下拉列表呢?

在此先感謝

+0

哪個文件是這? – 2011-03-06 06:40:35

+0

template/catalogsearch/advanced/form.phtml – Jason 2011-03-09 19:30:32

回答

0

對不起,我的英語...我是法國人;-)

在管理控制檯中,你可以選擇你的屬性類型

確保您的屬性被聲明爲一個列表。在我的Magento版本中,它是屬性管理面板中代碼和範圍之後的第三個信息。

PoyPoy

+0

感謝您的回覆。我剛剛檢查過兩次,它被設置爲下拉菜單。這是否還有其他原因? – Jason 2011-03-09 17:51:16

1

我今天早些時候有同樣的問題和奇怪的是,我不得不屬性(下拉)具有相同的屬性,但一個顯示在下拉菜單和其他多選擇菜單高級搜索。

我用不同的設置進行了一些測試,結果證明,在高級搜索中,每個屬性都是一個列表(下拉和多選),並且它有多於兩個選項顯示爲多選。

我看了一下存儲在/app/code/core/Mage/CatalogSearch/Block/Advanced/Form.php中的Mage_CatalogSearch_Block_Advanced_Form,我看到了這個條件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(); 
} 

你需要做的下一件事是一個小的,如果內聲明(見下圖),它將檢查屬性的名稱並基於該名稱調用getAttributeSelectElement()或我們的新方法getAttributeDropDownElement()。我離開這個工作給你:)

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

希望這是有幫助的。

P.S.爲壞的英語道歉 - 不是我的母語!

0

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(); 
相關問題