Делаем развесистый фильтр товаров (обкатка, написание, дополнения)
#121
Отправлено 23 April 2012 - 07:55 AM
#122
Отправлено 23 April 2012 - 11:23 AM
Заменить штатно выводимую фразу "нет товаров" на желаемую "товар не найден" в russian.phpСкажите а как сделать чтобы при выборе нескольких значений если результат выводится пустой т.е. ничего не найдено выводило сообщение что товар не найден ?
#123
Отправлено 23 April 2012 - 12:08 PM
У меня штатно не выводится т.к. изменен файл category.html в стандарте было если нету сортировки товара то выводится нет товара это не очень удобно, вопрос можно ли сделать как нибудь это в самом фильтре ?Заменить штатно выводимую фразу "нет товаров" на желаемую "товар не найден" в russian.phpСкажите а как сделать чтобы при выборе нескольких значений если результат выводится пустой т.е. ничего не найдено выводило сообщение что товар не найден ?
#124
Отправлено 28 April 2012 - 07:43 PM
Статистика ошибок говорит следующее
WARNING: Invalid argument supplied for foreach() Line: 107 File: /var/www/xxxxxxxxxxx/data/www/xxxxxxxxxx.ru/core/includes/advanced_search_in_category.php Link: /roga-i-kopita/ Date: 28.04.12 - 21:07:04 Dump: array(2) { ["cat_alias"]=> string(17) "roga-i-kopita/" ["categoryID"]=> int(532) } array(0) { }
Мой участок кода в advanced_search_in_category.php
от 89 строки до 132 строки:
while($row=db_fetch_assoc($data)) { if ($oID <> $row['optionID']) { $oID = $row['optionID']; $p_counter += 1; $params[] = array('optionID' => $row['optionID'], 'name' => $row['name'], 'controlIsTextField' => 0, 'set' => "checked"); } $count = db_fetch_assoc(db_query( 'SELECT COUNT(*) AS count FROM '.PRODUCTS_OPTIONS_SET_TABLE.' pos LEFT JOIN '.PRODUCTS_TABLE.' p USING (productID) LEFT JOIN '.CATEGORIY_PRODUCT_TABLE.' cp USING (productID) WHERE p.enabled=1 AND (p.categoryID IN ('.$catIDs.') OR cp.categoryID IN ('.$catIDs.')) AND variantID='.$row['variantID'].$showNullStock)); $set = ""; foreach ($getData as $key => $item) if ((int)$key == (int)$row['optionID'] && $item['param'] == $row['variantID']) { $set = "checked"; $params[$p_counter]['set'] = ""; } $params[$p_counter]['variants'][] = array('variantID' => $row['variantID'], 'value' => $row['option_value'], 'count' => $count['count'], 'set' => $set); }[/font][/color] [color=#282828][font=helvetica, arial, sans-serif] if ( isset($_GET["search_name"]) ) $smarty->assign( "search_name", $_GET["search_name"]);[/font][/color] [color=#282828][font=helvetica, arial, sans-serif]if (!isset($_GET["search_price_from"]) && !isset($_GET["search_price_to"])) { $data = db_query( 'SELECT MIN(p.price) as min, MAX(p.price) as max FROM '.PRODUCTS_TABLE.' p LEFT JOIN '.CATEGORIY_PRODUCT_TABLE.' cp USING (productID) WHERE p.enabled=1 AND (p.categoryID IN ('.$catIDs.') OR cp.categoryID IN ('.$catIDs.'))'.$showNullStock); if ($row = db_fetch_assoc($data)) { $max_price = $row['max']; $min_price = $row['min'];} else { $min_price = 0; $max_price = 0;}[/font][/color] [color=#282828][font=helvetica, arial, sans-serif]
Конкретно 107 строка:
foreach ($getData as $key => $item)
Что это в коде взялось?! Откукда?! При вставке сюда на форум появилось
[color=#282828] if ( isset($_GET["search_name"]) ) $smarty->assign( "search_name", $_GET["search_name"]);[/color]
[color=#282828][font=helvetica, arial, sans-serif]if (!isset($_GET["search_price_from"]) && !isset($_GET["search_price_to"])) {
#125
Отправлено 29 April 2012 - 01:59 AM
Копируете откудато где этот код выделен цветом. А тут в коде цвет не поддерживается вот и выдалоЧто это в коде взялось?! Откукда?! При вставке сюда на форум появилось
#126
Отправлено 29 April 2012 - 03:35 PM
WARNING: Invalid argument supplied for foreach() Line: 107 File: /var/www/xxxxxxxxxxx/data/www/xxxxxxxxxx.ru/core/includes/advanced_search_in_category.php Link: /roga-i-kopita/ Date: 28.04.12 - 21:07:04 Dump: array(2) { ["cat_alias"]=> string(17) "roga-i-kopita/" ["categoryID"]=> int(532) }
1. Там в foreach() используется массив $getData = ScanGetVariableWithId( array("param"));
По крайней мере, должен использоваться .
function ScanGetVariableWithId($varnames)
{
$data = array();
foreach ($varnames as $name)
{
foreach ($_GET as $key => $value)
{
if (strstr($key, $name."_"))
{
$key = str_replace($name."_", "", $key);
$data[$key][$name] = $value;
}
}
}
return $data;
}
Т.е. никаких элементов массива с ключем ['cat_alias'] и строчным значением эта функция отдавать не должна.
2. В шапке лежит не последняя версия. Наверное, я таки выложу (на буднях) в шапку последнюю, а то каждый раз приходится спрашивать, сделано ли исправление, которое описано где-то на четвертой и пятой странице. Правда, то исправление к этой ошибке никаким боком, насколько я понимаю. Но все равно лучше плясать от полной последней версии.
#127
Отправлено 30 April 2012 - 07:49 PM
Теперь последняя.В шапке лежит не последняя версия
#128
Отправлено 04 May 2012 - 06:46 PM
открываем файл admin.php и:
7.1 ищем строку STRING_ADVANCED_SEACH_TITLE (именно так - SEACH!), чуть выше будет строка <table class="adn">
перед ней вставляем строку <!--
7.2 ищем строку ADMIN_NO_VALUES_CH, чуть ниже будет строка с data/admin/pixel.gif
после нее вставляем строку -->
Это мы закомментировали этот блок, но можно его и удалить.
#129
Отправлено 05 May 2012 - 06:04 PM
И галку я бы добавлял не в категориях, а в "Характеристиках" т.е. там где они добавляются.
Добавляем в админке к "дополнительным характеристикам" галочку "показывать эту характеристику в фильтре"
1. добавляем поле filter_show в таблицу дополнительных характеристик.
Я это делаю в консоли MySQL командой
ALTER TABLE xxxx_product_options ADD filter_show BOOL DEFAULT 1;
(где xxxx - префикс таблиц), но можно это сделать и в phpadmin,
тут уж как кому привычнее.
2. в файле catalog_extra.tpl.html
перед строкой
<td align="left" width="100%" >{$smarty.const.ADMIN_CUSTOM_OPTION_TITLE}</td>
вставляем строку
<td align="left">Filter</td>
а перед строкой
<td align="left"><input type=text class="textp" name="extra_option_{$options[i][0]}" value="{$options[i][1]}" size="46"></td>
строку
<td align="left"><input type="checkbox" class="round" name="extra_filter_{$options[i].optionID}" {if $options[i].filter_show}checked{/if} title="Filter this characteristic"></td>
3. в файле option_functions.php:
в функции optGetOptions
меняем строку
$SQL = 'select ps.optionID, ps.name, ps.sort_order, COUNT(povv.variantID) as count_variants FROM '.PRODUCT_OPTIONS_TABLE.' as ps
на
$SQL = 'select ps.optionID, ps.name, ps.sort_order, COUNT(povv.variantID) as count_variants, ps.filter_show FROM '.PRODUCT_OPTIONS_TABLE.' as ps
в функции optUpdateOptions
меняем строку
"', sort_order=".(int)$val["extra_sort"]." where optionID=".(int)$key);
на
"', sort_order=".(int)$val["extra_sort"].", filter_show=".(isset($val["extra_filter"])?1:0)." where optionID=".(int)$key);
4. в файле catalog_extra.php:
меняем строку
$updateOptions = ScanPostVariableWithId( array( "extra_option", "extra_sort" ) );
на
$updateOptions = ScanPostVariableWithId( array( "extra_option", "extra_sort", "extra_filter" ) );
5. в файле advanced_search_in_category.php
меняем строку
WHERE p.enabled=1 AND (p.categoryID IN ('.$catIDs.') OR cp.categoryID IN ('.$catIDs.'))'.$showNullStock.'
на
WHERE po.filter_show=1 AND p.enabled=1 AND (p.categoryID IN ('.$catIDs.') OR cp.categoryID IN ('.$catIDs.'))'.$showNullStock.'
Прикрепленные файлы
#130
Отправлено 10 May 2012 - 09:27 PM
У меня работает, ошибок пока не вылезло, но мне эта фишка не нужна, поэтому особо и не искал. В общем, ставьте, ищите, сообщайте.
В шапке уже исправленная версия.
#131
Отправлено 01 June 2012 - 01:23 PM
Есть файлы
Есть инструкция
Устанавливали люди вообще далекие от программирования и все удачно работало.
Включайте мозги и хватит лениться.
7 страниц темы бла бла бла
#132
Отправлено 19 June 2012 - 02:20 PM
Новые фишки:
1. в админке в "Характеристики товаров" добавил к характеристикам чекбоксы "Показывать в кратком описании товара" и "Показывать в полном описании товара". Если галка не стоит, то характеристика не показывается. Иногда это удобно.
2. Там же: чтобы фильтров (блоков) можно было сделать больше одного чекбокс "показывать характеристику в фильтре" заменен на три аналогичных чекбокса - по одному на фильтр. Например, можно характеристику "Производитель" вынести горизонтально (блок фильтра сверху), а остальные оставить в стандартном блоке фильтра, который обычно слева. См. пример на тестовом сайте.
админка теперь выглядит так:
#133
Отправлено 19 June 2012 - 02:24 PM
#134
Отправлено 19 June 2012 - 02:39 PM
Да просто подумалось, что городить отдельный модуль "Фильтр по производителю" как-то излишне.абалдеть.
Фильтр-2 ведь можно не блоком оформлять, а в шаблон вставить.
А само ядро уже есть, ничего писать не надо.
#135
Отправлено 19 June 2012 - 06:03 PM
Вот еще бы "Новинки" в фильтр добавить
#136
Отправлено 19 June 2012 - 06:11 PM
"Новинки" - это что, это где и куда это добавить в фильтр?Вот еще бы "Новинки" в фильтр добавить
Подозреваю, что решение можно "свести к предыдущей задаче".
Т.е. завести характеристику "Новинка" .
#137
Отправлено 20 June 2012 - 06:38 PM
Характеристику "Новинка" как вариант, наверное, можно задать. Но как-то надо ее регулярно и автоматически обновлять по дате добавления товара.
#138
Отправлено 20 June 2012 - 07:04 PM
В принципе, что в фильтр добавлять отдельный чекбокс "Новинки" со своей логикой обработки, что вводить характеристику "Новинки" (оставляя единую логику работы фильтра) и следить за правильностью присутствия-отсутствия - оба варианта кривые. Но в первом случае кривизну придется встраивать в довольно аккуратную и красивую логику работы фильтра, а во втором кривизна будет совершенно отдельным модулем (файлом, функцией) "обновление характеристики "Новинки"", периодически запускаемой вручную, а проще и правильнее раз в сутки cron-ом. Вариант с выносом кривизны в отдельный модуль мне нравится намного больше, да и писать при таком раскладе куда меньше. Подозреваю, что весь модуль можно уложить в одну строку SQL-запроса, которая будет добавлять/убирать у товара хар-ку "Новинка" в зависимости от даты заведения товара . Т.е. даже PHP не понадобится, только командная строка."Новинки" - добавить в фильтр радиобаттон или чек-бокс, чтобы можно было в выбранной категории выбрать новинки. Характеристику "Новинка" как вариант, наверное, можно задать. Но как-то надо ее регулярно и автоматически обновлять по дате добавления товара.
PS. Кстати, вопрос знатокам! Понятно, что на своем сервере, где я царь и бог запустить что угодно хроном никакой проблемы не составляет. А как решается необходимость периодического выполнения в час Х какого-либо PHP-кода у хостеров? Я пока не сталкивался с этой стороной сайтописания.
#139
Отправлено 20 June 2012 - 07:30 PM
У этой же характеристики можно еще значения сделать "Акция", "Распродажа" и т.д.
Осталось только придумать SQL-запрос и с cron-ом разобраться
#140
Отправлено 20 June 2012 - 09:31 PM
1)все так же через тот же крон у хостера, у них в панели можно создавать задачиА как решается необходимость периодического выполнения в час Х какого-либо PHP-кода у хостеров?
2)fetch/wget со своего сервака по крону (грубо говоря запускаеш скрипт от себя)
3)cronjobs.ru и подобные сервисы