0

フッターにアルファベット順を表示します..のように

A | B | C | ....Y | Z 

ユーザーが任意のアルファベットをクリックした場合、ユーザーが文字「B」をクリックしたとします。製品リスト ページには、文字「B」で始まる製品名が表示されます。

Magento で利用可能な任意の拡張機能、またはこれをコーディングする必要があります。

4

2 に答える 2

0

以下のファイルを app/core/code/local ディレクトリに作成し、Magento コアと同様の完全なディレクトリ構造を作成してください。

app\code\local\Mage\Catalog\Block\Product\List\Toolbar.php

このファイルで、setCollection 関数を次のように置き換えます。

public function setCollection($collection)
    {
        $this->_collection = $collection;

        $this->_collection->setCurPage($this->getCurrentPage());

        // we need to set pagination only if passed value integer and more that 0
        $limit = (int)$this->getLimit();
  $postData = '';
        if ($limit) {
            $this->_collection->setPageSize($limit);
        }
        if ($this->getCurrentOrder()) 
  {
   /**********Alphabetic search Code Start From here**********/
   $postData = Mage::app()->getRequest()->getParam('alpha').'%';
   if(isset($postData['alpha']) && $postData['alpha']!= '' && trim($postData) !='ALL')
   {
    $this->_collection->setOrder($this->getCurrentOrder(), $this->getCurrentDirection())->addAttributeToFilter(array(
                    array('attribute'=>'name', 'like'=>$postData)
                ));
   }
   else
   {
      $this->_collection->setOrder($this->getCurrentOrder(), $this->getCurrentDirection());
   }
   /**********Alphabetic search Code ends here**********/
        }
        return $this;
    }

app\design\frontend\default\default\template\catalog\product\list\toolbar_bottom.phtml

このファイルを開き、コードを以下に置き換えます。

<?php 
$search_array = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','ALL');

/*Find if the URL already contains any querystring variable or not */
if (strstr( $this->helper('core/url')->getCurrentUrl(), "&" ))
{
 $separator = '&'; 
}
else
{
    $separator = '?';
}
?>
    <div>
        <p class="view-mode-list-bot">
            <?php 
   $postData = Mage::app()->getRequest()->getParam('alpha');
   foreach ($search_array  as $search_array_value):

   /*Clean the URL*/
   if (strstr( $this->helper('core/url')->getCurrentUrl(), "?" ) )
   {
    $new_Url =  $this->str_replace_once('&','?',str_replace("?alpha=".trim($postData['alpha']),'',str_replace($separator."alpha=".trim($postData['alpha']),'',$this->helper('core/url')->getCurrentUrl())));
   }
   else
   {
    $new_Url = str_replace("?alpha=".trim($postData['alpha']),'',str_replace($separator."alpha=".trim($postData['alpha']),'',$this->helper('core/url')->getCurrentUrl()));
   }

   $alphaURL = $new_Url.$separator.'alpha='.$search_array_value;
?>

                    <a href="<?php echo $alphaURL; ?>" title="<?php echo $_label ?>" class="<?php echo strtolower($_code); ?> <?php if($search_array_value == $postData){ echo 'remove_under'; } ?>"><?php echo $search_array_value; ?></a>   

            <?php endforeach; ?>

        </p>

    </div>

次のファイルに関数「str_replace_once」を追加します

app\code\local\Mage\Catalog\Block\Product\List\Toolbar.php

関数、

public function str_replace_once ($needle, $replace, $haystack) {
     // Looks for the first occurence of $needle in $haystack
     // And replaces it with $ replace.
         $pos = strpos ($haystack, $needle);
         if ($pos === false) {
             // Nothing found
         return $haystack;
         }
    return substr_replace ($haystack, $replace, $pos, strlen($needle));
 }

そして、それは行われます。アルファベット順検索を使用する準備ができました:) フッターに追加するには、次のブロックをフッター ブロックに追加します。

<block type="catalog/product_list_toolbar" name="product_list_toolbar" template="catalog/product/list/toolbar.phtml">
                            <block type="page/html_pager" name="product_list_toolbar_pager"/>
</block>

注:将来、Magento を新しいバージョンにアップグレードする場合は、このコードを編集したり、コア ファイルに追加したりしないでください。以下のファイルを app/core/code/local ディレクトリに作成し、Magento コアと同様の完全なディレクトリ構造を作成してください。

于 2013-06-11T09:40:12.280 に答える