Набор характеристик и вариантов (в случае выбора вариантов) создается автоматически исходя из характеристик и вариантов, имеющихся у товаров текущей и дочерних категорий.
В админке дополнения (модуль "Фильтр") можно задать вид характеристики:
- не показывать
- произвольная строка
- варианты
filter.jpg 70.78К 42 Количество загрузок:
Установка:
==========
1. копируем файлы
recursivecat_functions.php -> /core/functions/
addon.php -> core/includes/admin
modules_filter.php -> core/includes/admin/sub/
modules_filter.tpl.html -> core/tpl/admin/
Файл addon.php нужен ОДИН РАЗ для создания в таблицах новых полей.
После первого же захода в админку его можно удалить, если он не удалился сам.
2. в файле default.tpl.html перед строкой
<div class="marg"><a href="{$smarty.const.ADMIN_FILE}?dpt=modules&sub=yandex">{$smarty.const.ADMIN_STRING_YANDEX}</a></div>
вставляем
{* BEGIN автоопределение характеристик для фильтра *}
<div class="marg"><a href="{$smarty.const.ADMIN_FILE}?dpt=modules&sub=filter">Фильтр</a></div>
{* END автоопределение характеристик для фильтра *}
3. в файле core/tpl/admin/menu.tpl.html перед строкой
<table class="adn topj"><tr><td><img src="data/admin/drs.gif" alt=""></td><td width="100%"><a href="{$smarty.const.ADMIN_FILE}?dpt=modules&sub=yandex">{$smarty.const.ADMIN_STRING_YANDEX}</a></td></tr></table>
вставляем
{* BEGIN автоопределение характеристик для фильтра *}
<table class="adn topj"><tr><td><img src="data/admin/drs.gif" alt=""></td><td width="100%"><a href="{$smarty.const.ADMIN_FILE}?dpt=modules&sub=filter">Фильтр</a></td></tr></table>
{* END автоопределение характеристик для фильтра *}
4. в файле core/includes/admin/modules.php перед строкой
array("id"=>"yandex", "name"=>"Яндекс.Маркет" )
вставляем
# BEGIN автоопределение характеристик для фильтра
array("id"=>"filter", "name"=>"Фильтр"),
# END автоопределение характеристик для фильтра
5. в файле admin.php в двух местах перед строкой
<table class="adn topj"><tr><td><img src="data/admin/drs.gif" alt=""></td><td width="100%"><a href="<?php echo ADMIN_FILE; ?>?dpt=modules&sub=yandex"><?php
вставляем
<!-- BEGIN автоопределение характеристик для фильтра -->
<table class="adn topj"><tr><td><img src="data/admin/drs.gif" alt=""></td><td width="100%"><a href="<?php echo ADMIN_FILE; ?>?dpt=modules&sub=filter">
<?php echo "Фильтр"; ?>
</a></td></tr></table>
<!-- END автоопределение характеристик для фильтра -->
------------------
После всего этого в админке в разделе "Модули" появится новый модуль "Фильтр".
Уровень доступа к этому модулю "Общие настройки" (это для тех, у кого кроме админов с полным доступом и клиентов есть еще пользователи с разными уровнями доступа в админке).
6. В файле option_functions.php
6.1. в функции optGetOptionscat в самое начало вставляем
# BEGIN автоопределение характеристик для фильтра
if (CONF_FILTER_ENABLE)
{
$data = db_query("SELECT name, optionID, filter FROM ".PRODUCT_OPTIONS_TABLE." ORDER BY sort_order, name");
$all_options = array();
$all_options2 = array();
while($row = db_fetch_assoc($data))
{
$all_options[] = $row;
$all_options2[$row['optionID']] = $row;
}
$cats = implode(',',recursiveCat($categoryID));
$data = db_query("SELECT productID FROM ".CATEGORIY_PRODUCT_TABLE." WHERE categoryID IN ($cats)");
while ($row = db_fetch_assoc($data)) $prd[] = $row['productID'];
$addonCat = $prd?"(categoryID IN ($cats) OR productID IN (".implode(",",$prd)."))":"categoryID IN ($cats)";
$data = db_query("SELECT DISTINCT optionID, option_type FROM ".PRODUCT_OPTIONS_VALUES_TABLE."
JOIN ".PRODUCTS_TABLE." USING(productID)
WHERE $addonCat AND (LENGTH(option_value)>0 OR option_type=1)");
$oID = array();
while($row = db_fetch_assoc($data))
{
if(!$all_options2[$row['optionID']]['filter']) continue;
if ($row['option_type'] == 1)
{
list($count) = db_fetch_row(db_query("SELECT COUNT(variantID) FROM ".PRODUCTS_OPTIONS_SET_TABLE."
JOIN ".PRODUCTS_TABLE." USING(productID)
WHERE $addonCat AND optionID=".$row['optionID']));
if (!$count) continue;
}
$oID[$row['optionID']] = $row;
}
$options = array();
foreach ($all_options as $option) if (isset($oID[$option['optionID']])) $options[] = $option;
return $options;
}
# END автоопределение характеристик для фильтра
7. В файле search_function.php
7.1. в функции schGetVariantsForSearch в самое начало вставляем
# BEGIN автоопределение характеристик для фильтра
if (CONF_FILTER_ENABLE)
{
$cats = implode(',',recursiveCat($categoryID));
$data = db_query("SELECT productID FROM ".CATEGORIY_PRODUCT_TABLE." WHERE categoryID IN ($cats)");
while ($row = db_fetch_assoc($data)) $prd[] = $row['productID'];
$addonCat = $prd?"(categoryID IN ($cats) OR productID IN (".implode(",",$prd)."))":"categoryID IN ($cats)";
$data = db_query("SELECT DISTINCT variantID FROM ".PRODUCTS_OPTIONS_SET_TABLE."
JOIN ".PRODUCTS_TABLE." USING(productID)
WHERE $addonCat AND optionID=$optionID");
$vID = array();
while($row = db_fetch_assoc($data)) $vID[$row['variantID']] = $row;
$data = db_query("SELECT option_value, variantID FROM ".PRODUCTS_OPTIONS_VALUES_VARIANTS_TABLE." ORDER BY sort_order");
$variants = array();
while($row = db_fetch_assoc($data)) if (isset($vID[$row['variantID']])) $variants[] = $row;
return $variants;
}
# END автоопределение характеристик для фильтра
7.2. в функции schOptionsAreSetToSearch в самое начало вставляем
# BEGIN автоопределение характеристик для фильтра
if (CONF_FILTER_ENABLE)
{
$data = db_query("SELECT optionID, filter FROM ".PRODUCT_OPTIONS_TABLE);
$type = array();
while($row = db_fetch_assoc($data)) $type[$row['optionID']] = $row['filter'];
$set_arb = array();
foreach ($options as $option) $set_arb[$option['optionID']] = $type[$option['optionID']]==2?'0':'1';
return $set_arb;
}
# END автоопределение характеристик для фильтра