Zdravim,
ak by mal niekto zaujem tak som nedavno pre jednu zakaznicku prerabal alha filter na nieco uzitocnejsie. Je to celkom jednoduche.
Pozriet si to mozete tu:
link Tu je postup:
1. Treba vytvorit novu tabulku v databaze:
CREATE TABLE IF NOT EXISTS `cat_filter` ( `cat_filter_id` int(11) NOT NULL AUTO_INCREMENT, `cat_filter_value` varchar(255) NOT NULL, `cat_filter_name` varchar(255) NOT NULL, `categories_id` int(11) NOT NULL, PRIMARY KEY (`cat_filter_id`), KEY `categories_id` (`categories_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
2.
Tento subor rozbalit a nakopirovat dp catalog/admin/
3. drobna uprava admin/categories.php. Priblizne v riadku 765 najdete tento kod
$contents[] = array('text' => '<br />' . TEXT_EDIT_CATEGORIES_IMAGE . '<br />' . zen_draw_file_field('categories_image'));
tak po to pridajte tento riadok
$contents[] = array('text' => '<br />' . '<a href="(tammairanslip)void(0)" onClick="window.open(\'cat_filter.php?cID='.$HTTP_GET_VARS['cID'].'\',\'Category filter\',\'width=600,height=600\')">Add category filter</a>');
4. v catalog/includes/modules/ upavte subor product_listing_alpha_sorter.php takto
Tento kod:
// build alpha sorter dropdown if (PRODUCT_LIST_ALPHA_SORTER == 'true') { if ((int)$_GET['alpha_filter_id'] == 0) { $letters_list[] = array('id' => '0', 'text' => TEXT_PRODUCTS_LISTING_ALPHA_SORTER_NAMES); } else { $letters_list[] = array('id' => '0', 'text' => TEXT_PRODUCTS_LISTING_ALPHA_SORTER_NAMES_RESET); } for ($i=65; $i<91; $i++) { $letters_list[] = array('id' => sprintf('%02d', $i), 'text' => chr($i) ); } for ($i=48; $i<58; $i++) { $letters_list[] = array('id' => sprintf('%02d', $i), 'text' => chr($i) ); }
nahradte takto
//category filter start $cat_filter_query = "SELECT Count(*) as num_rows FROM cat_filter where categories_id = '".(int)$current_category_id."'"; $cat_filter=$db->Execute($cat_filter_query); $cat_filter_num = $cat_filter->fields['num_rows']; // build alpha sorter dropdown if ((PRODUCT_LIST_ALPHA_SORTER == 'true') AND ($cat_filter_num > 0) ) { $cat_filter_query = "SELECT * FROM cat_filter where categories_id = '".(int)$current_category_id."'"; $cat_filter=$db->Execute($cat_filter_query); if ((int)$_GET['alpha_filter_id'] == 0) { $letters_list[] = array('id' => '0', 'text' => TEXT_PRODUCTS_LISTING_ALPHA_SORTER_NAMES); } else { $letters_list[] = array('id' => '0', 'text' => TEXT_PRODUCTS_LISTING_ALPHA_SORTER_NAMES_RESET); } for ($i=0; $i<$cat_filter_num; $i++) { $letters_list[] = array('id' => $cat_filter->fields["cat_filter_id"], 'text' => $cat_filter->fields["cat_filter_name"]); $cat_filter->MoveNext(); }
5. v catalog/index_filters/ upravte subor default_filter.php takto
Tento kod:
if (isset($_GET['alpha_filter_id']) && (int)$_GET['alpha_filter_id'] > 0) { $alpha_sort = " and pd.products_name LIKE '" . chr((int)$_GET['alpha_filter_id']) . "%' "; } else { $alpha_sort = ''; }
nahradte takto
if (isset($_GET['alpha_filter_id']) && (int)$_GET['alpha_filter_id'] > 0) { $cat_filter_query = "SELECT * FROM cat_filter where cat_filter_id = '".$_GET['alpha_filter_id'] ."'"; $cat_filter=$db->Execute($cat_filter_query); $cat_filter_value= $cat_filter->fields["cat_filter_value"]; $cat_filter_array = explode(";", $cat_filter_value); $alpha_sort = " and ("; $i=1; foreach ($cat_filter_array as $cat_filter_list1) { if ($i==count($cat_filter_array)){ $alpha_sort .= " pd.products_name LIKE '%".$cat_filter_list1."%' or pd.products_description LIKE '%".$cat_filter_list1."%'"; //varianta fulltext // $cat_filter_search .= " MATCH pd.products_name,pd.products_description AGAINST('".$cat_filter_list1."')"; }else{ $alpha_sort .= " pd.products_name LIKE '%".$cat_filter_list1."%' or pd.products_description LIKE '%".$cat_filter_list1."%' or"; //varianta fulltext // $cat_filter_search .= " MATCH pd.products_name,pd.products_description AGAINST('".$cat_filter_list1."') or"; } $i++; } $alpha_sort .= " )"; // echo $cat_filter_value; } else { $alpha_sort = ''; }
Princip je jednoduchy. V administracii si otvorte kategoriu pre ktoru chcete zadat filter a ak ste vyssie uvedene upravy spravili dobre, najdete na stranke upravy kategorie (pod pridanim obrazka) odkaz "Add category filter". Ak nan kliknete otvori sa nove okno v ktorom mozete zadavat filtre pre danu kategoriu. Ak chcete zadat viac klucovych slov (fraz) v ramci jedneho filtra oddelujte ich znakom ; . Ako vidite v kode suboru default_filter.php na vyhladanie som pouzil operator OR. Ak potrebujete operator AND tak si to tam zmente podla potreby.
Nakoniec este samozrejme treba vo vasom jazykovom subore upravit texty pre
define('TEXT_PRODUCTS_LISTING_ALPHA_SORTER_NAMES', '--produkt filter--'); define('TEXT_PRODUCTS_LISTING_ALPHA_SORTER_NAMES_RESET', '-- zrušiť filter --');
Uprava vam nezaberie ani 10 minut a prinos je dost znacny. Netreba potom vytvarat vela podkategorii, ale vyriesit to takto.