Еще один фильтр. Теперь на AJAX.
#161
Отправлено 29 November 2015 - 11:47 PM
#162
Отправлено 30 November 2015 - 08:25 PM
#163
Отправлено 01 December 2015 - 09:57 AM
Работает.Слайдер с ползунками выбора min/max цены в штатном Фильтре товаров , я об этом
Не работает он, как правило, когда где-то еще раз грузится jquery.
Выглядит это так:
1. в head.tpl.html грузится jquery, затем jquery-ui, который нужен для слайдера и которому нужен jquery.
2. где-то ниже ЕЩЕ РАЗ грузится jquery, который сносит вышестоящие jquery+jquery-ui и слайдер, естественно, не работает.
PS. Учитесь пользоваться отладчиком (например, firebug-ом), он в явном виде сообщает, что не так и почему не работает. А "посмотреть исходный код" и Ctrl-F (поиск) помогут найти повторную загрузку jquery.
#164
Отправлено 10 December 2015 - 01:25 PM
- при выдаче товара в поиске выдает вот такое (раздел "часы"): (картинка 1)
- на сайте, в самом товаре ничего подобного нет: (картинка 2)
- заходишь в правку товара, там в "настройка характеристик", в частности, "Диагональ, дюймы" стоит "Выбор из возможных значений (1 вар.)": (картинка 3)
- если нажать на "Настроить", там стоит галка: (картинка 4)
Как можно удалить эти непонятные галки (скорее всего, раньше под этим артикулом был другой товар, например, телевизор, с хар-ками "диагональ", и от него остались эти хвосты) ?
P.S. в файле импорта csv, к примеру, тоже нет этих галок у этих товаров. Думал, удалить их хоть так, но удалять оказалось нечего.
Прикрепленные файлы
#165
Отправлено 10 December 2015 - 02:07 PM
Как раз сюда.Скорее всего не сюда (перенесу в другую тему, не нашел куда)
В ShopCMS при смене характеристики с "набор вариантов" на "произвольная строка" или "отключено" выбранный набор вариантов не удаляется, а так и остается висеть мертвым грузом в таблице product_options_set.получается, при выдаче результатов на сайт фильтр тянет скорее всего какие-то непонятные хвосты.
Сейчас я уже не помню, как у меня в фильтре устроена выборка вариантов, но когда писался фильтр я этого еще не знал.
Возможно, каким-то образом вылезают как раз эти "мертвые" записи.
В данное время разобраться с этой проблемой (которая для меня еще и теоретическая, а не практическая) возможности нет, занят.
#166
Отправлено 09 August 2016 - 11:58 PM
Из описания понятно что фильтр работает ТОЛЬКО с вариантами характеристик, прописал именно варианты :
Доп.Характеристики.jpg 39.46К 14 Количество загрузок:
Но при выводе фильтра их почему-то не показывает, при этом цена, сортировка, автопоказ и т.д все работает:
фильтр.jpg 31.79К 14 Количество загрузок:
Что это может быть ? Специально выбрал категорию где прописаны варианты характеристик у всех товаров.
Заранее благодарен за наставление на путь истинный ))
#167
Отправлено 10 August 2016 - 01:05 PM
Раз движки цен и сами цены показываются, значит аякс-запрос отрабатывает и результат возвращает.Что это может быть ?
Но в результате нет ни одной характеристики товара.
Рискну предположить, что по какой-то причине один из SQL-запросов в filter.php вызывает ошибку.
Убедиться, что это так (или не так) можно в админке в разделе "Статистика ошибок".
#168
Отправлено 10 August 2016 - 09:16 PM
Убедиться, что это так (или не так) можно в админке в разделе "Статистика ошибок".
Да, какие-то ошибки пишет :
ERROR: 1052:Column 'productID' in field list is ambiguous
Sql: SELECT optionID,variantID, COUNT(productID) AS count
FROM fses_product_options_set
JOIN fses_products USING(productID)
WHERE enabled=1 AND Price>=0 AND Price<=905.76 AND categoryID>1
GROUP BY optionID,variantID
Link: /index.php?do=filter&filter=1
Date: 10.08.16 - 22:10:20
Dump:
array(2) {
["do"]=>
string(6) "filter"
["filter"]=>
string(1) "1"
}
array(4) {
["sort"]=>
string(16) "sort_order, name"
["prdPerPage"]=>
string(2) "18"
["categoryID"]=>
string(1) "1"
["cID"]=>
string(1) "6"
}
А в верхнем окне :
WARNING: in_array() [<a href='function.in-array'>function.in-array</a>]: Wrong datatype for second argument
Line: 130
File: /home/braun/public_html/core/cache/%%CB^CBF^CBF3F2B9%%product_brief.tpl.html.php
Link: /index.php?do=filter&filter=2
Date: 10.08.16 - 00:39:23
Dump:
array(2) {
["do"]=>
string(6) "filter"
["filter"]=>
string(1) "2"
}
array(7) {
["filterauto"]=>
string(1) "1"
["sort"]=>
string(16) "sort_order, name"
["prdPerPage"]=>
string(2) "18"
["categoryID"]=>
string(2) "80"
["cID"]=>
string(1) "1"
["price_from"]=>
string(2) "47"
["price_to"]=>
string(2) "77"
}
#169
Отправлено 11 August 2016 - 11:56 AM
в общем, Вы первый сообщивший, у кого такая конструкция не работает.ERROR: 1052:Column 'productID' in field list is ambiguous
Sql: SELECT optionID,variantID, COUNT(productID) AS count
FROM fses_product_options_set
JOIN fses_products USING(productID)
WHERE enabled=1 AND Price>=0 AND Price<=905.76 AND categoryID>1
GROUP BY optionID,variantID
У меня вполне работает, да и клиентам поставлено этих аякс-фильтров несколько десятков.
Вылечить проблему просто - указать конкретную таблицу, откуда будет браться productID:mysql> SELECT optionID,variantID, COUNT(productID) AS count
-> FROM shop3_product_options_set
-> JOIN shop3_products USING(productID)
-> WHERE enabled=1 AND Price>=0 AND Price<=905.76 AND categoryID>1
-> GROUP BY optionID,variantID;
+----------+-----------+-------+
| optionID | variantID | count |
+----------+-----------+-------+
| 1 | 4 | 149 |
| 1 | 5 | 1 |
| 1 | 271 | 6 |
| 1 | 272 | 6 |
| 1 | 273 | 5 |
| 2 | 1 | 4 |
| 2 | 126 | 2 |
| 2 | 264 | 41 |
| 2 | 269 | 59 |
| 2 | 270 | 65 |
| 3 | 7 | 3 |
| 3 | 8 | 3 |
| 3 | 297 | 1 |
| 3 | 298 | 1 |
| 3 | 299 | 1 |
| 10 | 27 | 3 |
| 10 | 28 | 1 |
| 10 | 29 | 1 |
| 13 | 35 | 1 |
| 13 | 300 | 1 |
| 43 | 261 | 2 |
| 43 | 302 | 2 |
| 44 | 265 | 99 |
| 44 | 268 | 1 |
+----------+-----------+-------+
24 rows in set (0.00 sec)
$data = db_query("SELECT optionID,variantID, COUNT(pos.productID) AS count
FROM ".PRODUCTS_OPTIONS_SET_TABLE." AS pos
...
т.е. одной из таблиц присваиваем алиас (AS pos), а полю productID указываем, из какой таблицы его брать (pos.productID)
#170
Отправлено 11 August 2016 - 01:22 PM
Вылечить проблему просто - указать конкретную таблицу, откуда будет браться productID:
$data = db_query("SELECT optionID,variantID, COUNT(pos.productID) AS count
FROM ".PRODUCTS_OPTIONS_SET_TABLE." AS pos
...
т.е. одной из таблиц присваиваем алиас (AS pos), а полю productID указываем, из какой таблицы его брать (pos.productID)
Спасибо за ответ.
Изменил строку в filter.php по Вашим рекомендациям.
Теперь выдает другую ошибку :
ERROR: 1064:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM fses_product_options_set
JOIN fses_products USING(product' at line 3
Sql: SELECT optionID,variantID, COUNT(pos.productID) AS count
FROM fses_product_options_set AS pos
FROM fses_product_options_set
JOIN fses_products USING(productID)
WHERE enabled=1 AND Price>=0 AND Price<=294.12 AND categoryID IN (18)
GROUP BY optionID,variantID
Link: /index.php?do=filter&filter=1
#171
Отправлено 11 August 2016 - 01:41 PM
Вы ее не изменили, а добавили:Изменил строку в filter.php по Вашим рекомендациям.
FROM fses_product_options_set AS pos
FROM fses_product_options_set
Что вполне естественно. Уберите строку "FROM fses_product_options_set".Теперь выдает другую ошибку :
#172
Отправлено 11 August 2016 - 03:22 PM
Да, так и есть, моя ошибка. Исправил. Ура, характеристики появились. Нот теперь при нажатии на чек бокс, пропадают количества товаров в скобочках и при нажатии на "показать" или "автопоказ", что то там думает и ничего не фильтрует в итоге.Что вполне естественно. Уберите строку "FROM fses_product_options_set".
Ошибку показывает такую :
ERROR: 1052:Column 'productID' in group statement is ambiguous
Sql: SELECT COUNT(*) AS count
FROM (SELECT COUNT(DISTINCT optionID) AS count
FROM fses_product_options_set
JOIN fses_products USING(productID)
WHERE enabled=1 AND Price>=0 AND Price<=458.823529412 AND categoryID IN (5) AND variantID IN (29,25)
GROUP BY productID) AS t
WHERE t.count=2
Link: /index.php?do=filter&filter=1
Наверное нужно сделать что-то аналогичное предыдущему случаю ?
В этом коде поменять ?
$data = db_query("SELECT productID
FROM (SELECT productID, COUNT(DISTINCT optionID) AS count
FROM ".DB_PRFX."product_options_set
#173
Отправлено 11 August 2016 - 04:13 PM
Да.Наверное нужно сделать что-то аналогичное предыдущему случаю ?
В этом коде поменять ?
#174
Отправлено 11 August 2016 - 11:20 PM
Да.Наверное нужно сделать что-то аналогичное предыдущему случаю ? В этом коде поменять ?
Не поможете ? Наверное все таки не в этом, а ругается на вот этот кусок :
$row = db_fetch_assoc(db_query("SELECT COUNT(*) AS count
FROM (SELECT COUNT(DISTINCT optionID) AS count
FROM ".PRODUCTS_OPTIONS_SET_TABLE." AS pos
JOIN ".DB_PRFX."products USING(productID)
WHERE enabled=1 AND Price>=$price_from AND Price<=$price_to AND $addonCat$addonStock AND variantID IN (".implode(',',$search).")
GROUP BY productID) AS t
Ошибка
ERROR: 1052:Column 'productID' in group statement is ambiguous
Sql: SELECT COUNT(*) AS count
FROM (SELECT COUNT(DISTINCT optionID) AS count
Выбирает все поля * , наверное и productID тоже , короче запутался
#175
Отправлено 12 August 2016 - 12:45 AM
Это все та же ошибка - неопределенность выбора.Ошибка
ERROR: 1052:Column 'productID' in group statement is ambiguous
Либо изучайте синтаксис запросов MySQL (это время), либо оплачивайте услуги разбирающегося (это деньги).
Проблема простейшая и не стоит выеденного яйца.
#176
Отправлено 24 August 2016 - 11:31 AM
Сайт пока стоит на php 5.2 - может ли быть из за этого затык?
Либо направьте в нужное русло где искать проблему этой задержки.
Спасибо!
#177
Отправлено 24 August 2016 - 11:33 AM
Чтобы ощутимо что-то поменялось, ничего не сделаешь, кроме как поменять движок.Столкнулся с проблемой. На сайте заказчика порядка 4000 товаров. При выборе одной из характеристик - фильтр очень долго думает прежде чем выскакивает картинка загрузки и следовательно сам результат.
Сайт пока стоит на php 5.2 - может ли быть из за этого затык?
Либо направьте в нужное русло где искать проблему этой задержки.
Спасибо!
#178
Отправлено 24 August 2016 - 01:32 PM
При установке/снятии галки (да и при первоначальной загрузке) происходит пересчет доступных для этой комбинации галок товаров.На сайте заказчика порядка 4000 товаров. При выборе одной из характеристик - фильтр очень долго думает прежде чем выскакивает картинка загрузки и следовательно сам результат.
Это довольно ресурсоемкая процедура. Зависит не столько от количества товаров, сколько от количества характеристик и вариантов. Видимо, их много.
Можно отказаться от пересчета (закомментировать в filter.php нижеследующий код) и, скорее всего, все станет очень быстро.
foreach ($params as $optionID => $option)
{
$true_count = $POSTcount + (isset($POST_param[$optionID])?0:1);
foreach ($option['variants'] as $variantID => $variant)
{
$search = array($variantID);
foreach ($POST_param as $POSToptionID => $POSTvariants)
foreach ($POSTvariants['param_new'] as $POSTvariantID)
if ($POSToptionID != $optionID) $search[] = $POSTvariantID;
$row = db_fetch_assoc(db_query("SELECT COUNT(*) AS count
FROM (SELECT COUNT(DISTINCT optionID) AS count
FROM ".PRODUCTS_OPTIONS_SET_TABLE."
JOIN ".PRODUCTS_TABLE." AS p USING(productID)
WHERE enabled=1 AND Price>=$price_from AND Price<=$price_to AND $addonCat$addonStock$addonSearch$addonCisfo AND variantID IN (".implode(',',$search).")
GROUP BY productID) AS t
WHERE t.count=$true_count"));
$params[$optionID]['variants'][$variantID]['count'] = $row['count'];
}
}
Я недавно пробовал сделать этот пересчет принципиально по другому - один SQL-запрос и дальнейшая обработка полученного массива, но получилось еще медленнее.
#179
Отправлено 24 August 2016 - 09:45 PM
Спасибище! Стало намного быстрееПри установке/снятии галки (да и при первоначальной загрузке) происходит пересчет доступных для этой комбинации галок товаров.На сайте заказчика порядка 4000 товаров. При выборе одной из характеристик - фильтр очень долго думает прежде чем выскакивает картинка загрузки и следовательно сам результат.
Это довольно ресурсоемкая процедура. Зависит не столько от количества товаров, сколько от количества характеристик и вариантов. Видимо, их много.
Можно отказаться от пересчета (закомментировать в filter.php нижеследующий код) и, скорее всего, все станет очень быстро.
foreach ($params as $optionID => $option)
{
$true_count = $POSTcount + (isset($POST_param[$optionID])?0:1);
foreach ($option['variants'] as $variantID => $variant)
{
$search = array($variantID);
foreach ($POST_param as $POSToptionID => $POSTvariants)
foreach ($POSTvariants['param_new'] as $POSTvariantID)
if ($POSToptionID != $optionID) $search[] = $POSTvariantID;
$row = db_fetch_assoc(db_query("SELECT COUNT(*) AS count
FROM (SELECT COUNT(DISTINCT optionID) AS count
FROM ".PRODUCTS_OPTIONS_SET_TABLE."
JOIN ".PRODUCTS_TABLE." AS p USING(productID)
WHERE enabled=1 AND Price>=$price_from AND Price<=$price_to AND $addonCat$addonStock$addonSearch$addonCisfo AND variantID IN (".implode(',',$search).")
GROUP BY productID) AS t
WHERE t.count=$true_count"));
$params[$optionID]['variants'][$variantID]['count'] = $row['count'];
}
}
Я недавно пробовал сделать этот пересчет принципиально по другому - один SQL-запрос и дальнейшая обработка полученного массива, но получилось еще медленнее.
#180
Отправлено 10 May 2018 - 05:06 PM
Переменная $filtersort выглядит так:
$filtersort = in_array($_POST['sort'],array('in_stock DESC,sort_order','in_stock >= 0 DESC,Price > 0 DESC,Price,name','in_stock >= 0 DESC,Price > 0 DESC,Price DESC,name'))?$_POST['sort']:'in_stock DESC,sort_order';
Запрос при установке хотя бы одной галки (по-моему в него никаких изменений не вносил):
$data = db_query("SELECT productID FROM (SELECT productID, COUNT(DISTINCT optionID) AS count FROM ".PRODUCTS_OPTIONS_SET_TABLE." JOIN ".PRODUCTS_TABLE." USING(productID) WHERE enabled=1 AND Price>=$price_from AND Price<=$price_to AND $addonCat$addonStock$addonSearch AND variantID IN (".implode(',',$search).") GROUP BY productID ORDER BY $filtersort) AS t WHERE t.count=$POSTcount");
Выборка товаров по параметрам происходит правильная, а вот сортируются неправильно. Попробовал сделать этот же запрос напрямую в phpmyadmin - все такой же разброд. Причем сразу после запроса порядок строк один, а после перехода на вторую страницу результатов и возврата на первую - он уже может измениться, а может и нет. Также и при повторном запросе (это все в phpmyadmin). Запрос делал такой (чуть модифицировал, чтобы было видно что к чему):
SELECT productID, in_stock, sort_order, Price FROM (SELECT productID, in_stock, sort_order, Price, COUNT(DISTINCT optionID) AS count FROM pwqk_product_options_set JOIN pwqk_products USING(productID) WHERE enabled=1 AND Price>=0 AND Price<=2895.5882352941 AND categoryID IN (21) AND variantID IN (131) GROUP BY productID ORDER BY Price) AS t WHERE t.count=1
А результат получается такой:
То есть получается, что сортировка происходит правильно, но в пределах некой части строк, в данном случае частями по 14 строк.
Пробовал на двух разных хостингах:
- Версия сервера: 5.6.39-83.1 - Percona Server (GPL), Release 83.1, Revision da5a1c2923f
- Версия сервера: 5.7.16-10-log - Percona Server (GPL), Release 10, Revision a0c7d0d