Advanced search in Magento and how to use it in your own way

advanced-search-glass

Magento’s default catalog search can be a powerful tool. It’s versatility is something every customer can appreciate.

One of the coolest features of the built-in advanced search is the ability to search by attributes assigned to a product. But what if your client’s plans for search are a bit different, and advanced search is too cluttered for his or her needs?

Let’s say your client wants his customers to be able to search by brand or SKU, with all other fields removed from the search, and wishes for custom URL for each one of those search types.

The solution

Attached in this article is a little “module” that enables you to use your custom URL for advanced search.

This means that instead of
http://your-store.com/catalogsearch/advanced/ you could use
http://your-store.com/search/ for advanced search.

Not only that, but you can specify a single attribute you want to search by!

You could even use this to implement search by brand or SKU. In any case, the search form action URL is e.g. http://your-store.com/search/results/for/?sku=1, which can be useful and very SEO-friendly.

Keep in mind, though, that this is a custom developed module, without admin options, so everything you want to do with this search module has to be done by code.

Walkthrough

I’ll walk you through a few basic modifications to this module.

Changing the URL of your advanced search

  • in app\code\community\Inchoo\Search\etc\config.xml replace ‘search‘ with your desired url
<frontName>search</frontName>

Replacing SKU (default in this module) with another attribute

  • in app\design\frontend\base\default\template\inchoo\search\form.phtml change the condition (‘sku‘) to attribute of your desire. Note that the attribute must be set as visible and searchable in Admin->Catalog->Attributes->Manage attributes
<?php if($_code == 'sku'):>
  • open app\code\community\Inchoo\Search\Block\Results.php and change attribute ‘sku‘ to the attribute of your desire
$title = $this->__("Search results for: '%s'", $this->getRequest()->getQuery('sku'));

And you are done! Now you have somewhat more custom url, and only one custom field displayed on your advanced search.

Download zipped source or view this module on GitHub.

Note: This is a revamp of the article originally written in November 2008.

Interested in hiring us?

Have a chat with us. You would be surprised how small changes can make your business even more successful.


2 comments

  1. How can I disable advanced search feature in Magento? I tried to remove the link initially, but I discovered some visitors are using catalogsearch/advanced/ in link. I found that using Advanced Search feature you can provide to your competition, very easy and fast, information about how many products do you have enabled from each brand/category/in total. For example search for price between 0 and 1000000 and you will get for sure all products. Search for all manufacturers and you will the number of all products in your store. In my opinion this should be protected. Advanced Search feature could be used but with precaution. The main question is how to Enable/Disable Advanced Search (mainly as providing as I mentioned above, and as a special feature “Remove Advanced Search link” from frontend. Thank you.

  2. Hi, I have 4 tabs in a page (tab1, tab2, tab3, tab4).
    How can I place new product based on category only.(filter)
    Thanks

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <blockquote cite=""> <code> <del datetime=""> <em> <strike> <strong>. You may use following syntax for source code: <pre><code>$current = "Inchoo";</code></pre>.