Opencart standart yapısında kullanılışlı bir filtreleme maalesef bulunmuyor. Ajax yani sayfa yenilenmeden filtreleme yapabileceğiniz
ücretsiz bir eklenti arıyorsanız
Dreamvention tarafından yayınlanan
Ajax Filter Free eklentisini öneririm:
MODÜL İÇİN TAVSİYE ETTİĞİM AYARLAR:
Aşağıdaki ayarlar tavsiye niteliğindedir fakat bazı ayarlar modülün çalışmasını direk etkilediği için önemlidir.
GÖRDÜĞÜM HATALAR ve ÇÖZÜMLERİ:
Buradan sonra yazacaklarım Opencart 2.3.0.2 versiyonu ve eklentisi için geçerlidir, diğer versiyonlarda benzer sorunlar mevcut ise uygulayabilirsiniz.
Sorun 1: Bir kategori sayfasını açtınız diyelim ve hiç beklemeden menüden başka bir kategoriye tıkladınız. Bu durumda hala ilk tıkladığınız kategorinin ürünlerini görmeye devam ediyorsanız, bunun nedeni Ajax Filter eklentisinin veritabanındaki TEMP tablodan işlem yapmasıdır. Arada az zaman geçtiği için hala eski sorgudaki ürünleri listelemektedir.
Çözüm: Eklentiyi indirip kurduktan sonra aşağıdaki kodları bir xml dosyası olarak kaydedip vqmod/xml klasörünüze ekleyiniz. Vqmod kullanmıyorsanız ilgili dosyalardan bu değişiklikleri manuel olarak yapabilirsiniz. Burada HTTP_USER_AGENT hatası ile ilgili ek olarak bir düzeltme daha var, onu da eklemenizi tavsiye ederim.
<file path="catalog/controller/extension/module/d_ajax_filter.php">
<operation info="HTTP_USER_AGENT error">
<search><![CDATA[if (preg_match('/(iPhone|iPod|iPad|Android|Windows Phone)/', $this->request->server['HTTP_USER_AGENT'])) {]]></search>
<add position="replace"><![CDATA[
if ( isset($this->request->server['HTTP_USER_AGENT']) && preg_match('/(iPhone|iPod|iPad|Android|Windows Phone)/', $this->request->server['HTTP_USER_AGENT']) ) {
]]></add>
</operation>
</file>
<file path="catalog/model/extension/module/d_ajax_filter.php">
<operation info="fix temp database">
<search><![CDATA[$this->db->query($sql);]]></search>
<add position="before" index="1"><![CDATA[
$this->db->query("DROP TEMPORARY TABLE IF EXISTS `".DB_PREFIX."af_temporary`");
]]></add>
</operation>
</file>
Sorun 2: "Kurdum, ayarlamaları yaptım, fakat ajax mode çalışmıyor. Yani filtreleme yaptığımda hiçbir değişiklik olmuyor." diyorsanız bunun nedeni muhtemelen modülün ayarlarında bulunan Content Path'in doğru girilmemesidir. Burada bir jquery seçici girilmiştir. Fakat sizin temanıza ait kategori listeleme sayfasında bu id'ye sahip bir div elemanı bulunmadığı için ajax modu çalışmamaktadır.
Çözüm: Kendi temanıza ait kategori listeleme sayfasını açın ve <div id="content"> elemanından sonra gelen ilk div'e ait id'yi bulup buraya girin. Bu düzenlemeyi yukarıdaki modül ayarlarına ait resimlerde görebilirsiniz.