Magento Themes and Magento Extensions

Implementing Alphabetical Search in Magento

Share

Implementing alphabetical search in Magento can be tedious if you dont know the right approach. But its as easy as anything. You just need to alter two files to make it work.
Note: Do not edit or add this code to your core files if you wish to upgrade Magento to newer versions in the future. Please create below mentioned files in the app/core/code/local directory with complete directory structure as in Magento core.

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

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>
            <?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 ?>">
<?php echo $search_array_value; ?></a>   

            <?php endforeach; ?>

        </p>

    </div>
And it is done. Your alphabetical search is ready to use:)

Leave a Reply

You must be logged in to post a comment.