На основе идеи dorian и eugene_wb отсюда: http://vsupport.club/t1027.html.
Вариант реализации сравнения: eugene_wb (не забываем жать кнопочку "Спасибо!").
Принцип работы:
- Нужно чтобы в meta_keywords товаров были прописаны значения характеристик (теги, метки), по которым хотим сравнивать товары (разделитель по умолчанию - пробел). Пример: "мужские белый тапочки стразы хлопок";
- Сравнивает meta_keywords товара со другими товарами (кроме тех, которых нет в наличии, цена=0 или они в Главной категории);
- Отбирает найденные аналоги по проценту соответствия и выводит нужное кол-во в блок "Аналоги" на странице детального описания товара;
1. В core\includes\product_detailed.php вставить перед последним (внизу) "} else {":
// New Code (Similar Products Module)
$percent = 90; // Минимальный процент совпадения
$num = 3; // Количество выводимых аналогов
$explode_char = " "; // Разделитель в строке meta_keywords
$counter = 0;
function sort_explode_callback($delimiter,$array_string) {
$arr = explode($delimiter,$array_string);
sort($arr);
return $arr;
}
function translit($str) {
$tr = array ("А"=>"a","Б"=>"b","В"=>"v","Г"=>"g","Д"=>"d","Е"=>"e","Ж"=>"j","З"=>"z","И"=>"i","Й"=>"y","К"=>"k","Л"=>"l","М"=>"m","Н"=>"n","О"=>"o","П"=>"p","Р"=>"r","С"=>"s","Т"=>"t","У"=>"u","Ф"=>"f","Х"=>"h","Ц"=>"ts","Ч"=>"ch","Ш"=>"sh","Щ"=>"sch","Ъ"=>"","Ы"=>"yi","Ь"=>"","Э"=>"e","Ю"=>"yu","Я"=>"ya","а"=>"a","б"=>"b","в"=>"v","г"=>"g","д"=>"d","е"=>"e","ж"=>"j","з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l","м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r","с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h","ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"y","ы"=>"yi","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya"," "=>"_","."=>"",","=>"","/"=>"_","'"=>"","°"=>"","+"=>"_");
return strtr($str,$tr);
}
$cur_keywords = metaphone(translit(serialize(sort_explode_callback($explode_char,prdGetMetaKeywordTag($productID)))));
$similar_meta_tags = db_query("SELECT s.productID, s.name, s.Price, s.meta_keywords, t.filename FROM ".PRODUCTS_TABLE." AS s LEFT JOIN ".PRODUCT_PICTURES." AS t on (s.default_picture=t.photoID AND s.productID=t.productID) WHERE s.categoryID!=1 AND s.enabled=1 AND s.productID!=".$productID." AND s.in_stock>0");
while ($row = db_fetch_row($similar_meta_tags)) {
$artig_shuffled[] = $row;
}
shuffle($artig_shuffled);
foreach ($artig_shuffled as $row) {
similar_text($cur_keywords,metaphone(translit(serialize(sort_explode_callback($explode_char,$row["meta_keywords"])))),$sim);
if ($sim > $percent) {
$counter += 1;
if ($counter > $num) break;
if (strlen($row["filename"])>0 && file_exists( "data/small/".$row["filename"])) {
$row["filename"] = "small/".$row["filename"];
} else {
$row["filename"] = "empty.gif";
}
$row["cena"] = $row["Price"];
$row["Price"] = show_price($row["Price"]);
$result_similar[] = $row;
}
}
$smarty->assign("sim_products", $result_similar);
// End of New Code
* Самостоятельно указываем значения переменных (см. начало кода):
- $percent - минимальный процент совпадения Meta-Keywords;
- $num - кол-во аналогов для вывода на страницу детального описания товара;
- $explode_char - разделитель меток (тегов) в Meta-Keywords (пробел по-умолчанию).
3. Сделать дубликат файла core\tpl\user\ваш_шаблон\blocks\popularstatic.tpl.html и обозвать его например similar.tpl.html. Поменять в нем автозаменой (все вхождения) это:
$popular_products
на это:
$sim_products
4. Подключить в Админке similar.tpl.html как новый блок из файла и настроить его отображение только в Подробном описании товара.
P.S. Есть еще добавочный код, для того чтобы в списке аналогов выводились рекомендуемые товары, заданные в Админке - они выводятся впереди списка аналогов, ну это кому нужно будет - скажу как сделать...