параметры фильтра задаются checkbox'ами. После применения фильтра ранее выбранные checkbox'ы не восстанавливаются

#
Re: параметры фильтра задаются checkbox'ами. После применения фильтра ранее выбранные checkbox'ы не восстанавливаются
Возможно, конфликтует с вашим фильтром по годам. Не имея доступа к сайту и к хостингу сложно сказать в чем дело.

Надо смотреть, какой набор параметров передается в итоге в метод ShowShop() через массив $param, потом надо включать отображение SQL-запросов находить нужный и гонять его в phpMyAdmin пока не выяснится что в нем не так, а затем подогнать $param так, чтобы в итоге формировался правильный запрос.
Заказов не беру. Консультирую редко.
#
Re: параметры фильтра задаются checkbox'ами. После применения фильтра ранее выбранные checkbox'ы не восстанавливаются
если все фильтры сняты, то $param имеет вид (смотрю через print_r($param):

Array ( [user_id] => 0 [current_group_id] => [items_begin] => 0 [select] => Array ( [0] => Array ( [type] => 0 [prefix] => AND ( [name] => [if] => [value] => [sufix] => ) [1] => Array ( [type] => 0 [prefix] => 1 [name] => [if] => [value] => [sufix] => ) ) [2] => Array ( [type] => 0 [prefix] => AND [name] => shop_items_catalog_table.shop_shops_id [if] => = [value] => 19 [sufix] => ) ) [sql_having] => HAVING 1 [show_text] => [xml_show_tying_products] => [xml_show_group_property] => 1 [xml_show_group_type] => all )

если ставлю галку "year1" (до 3-х лет, соответствующий фильтр работает), то $param имеет вид:

Array ( [user_id] => 0 [current_group_id] => [select] => Array ( [0] => Array ( [type] => 1 [property_id] => 269 [prefix] => AND [if] => > [value] => 425 [sufix] => ) [1] => Array ( [type] => 0 [property_id] => 269 [prefix] => AND ( [if] => [value] => [sufix] => [name] => ) [2] => Array ( [type] => 0 [property_id] => 269 [prefix] => 1 [if] => [value] => [sufix] => ) [name] => ) [3] => Array ( [type] => 0 [property_id] => 269 [prefix] => AND [if] => = [value] => 19 [sufix] => [name] => shop_items_catalog_table.shop_shops_id ) ) [items_begin] => 0 [sql_having] => HAVING 1 [show_text] => [xml_show_tying_products] => [xml_show_group_property] => 1 [xml_show_group_type] => all )

если ставлю галку "новые" (доп. признак "Новизна", тип список, способ отображения флажки), соответствующий фильтр работает и $param имеет вид:

Array ( [user_id] => 0 [current_group_id] => [items_begin] => 0 [select] => Array ( [0] => Array ( [type] => 0 [prefix] => AND ( [name] => [if] => [value] => [sufix] => ) [1] => Array ( [type] => 1 [prefix] => [name] => [if] => = [value] => 359 [sufix] => [property_id] => 265 ) [2] => Array ( [type] => 0 [prefix] => [name] => [if] => [value] => [sufix] => ) [property_id] => 265 ) [3] => Array ( [type] => 0 [prefix] => AND [name] => shop_items_catalog_table.shop_shops_id [if] => = [value] => 19 [sufix] => [property_id] => 265 ) ) [sql_group_by] => GROUP BY shop_items_catalog_table.shop_items_catalog_item_id [sql_having] => HAVING COUNT(shop_properties_items_table.shop_properties_items_id) = 1 [show_text] => [xml_show_tying_products] => [xml_show_group_property] => 1 [xml_show_group_type] => all )

если ставлю галки "year1" и "новые", то фильтр не работает (результат пустой, хотя должен показать товар), то $param такой:

Array ( [user_id] => 0 [current_group_id] => [select] => Array ( [0] => Array ( [type] => 1 [property_id] => 269 [prefix] => AND [if] => > [value] => 425 [sufix] => ) [1] => Array ( [type] => 0 [property_id] => 269 [prefix] => AND ( [if] => [value] => [sufix] => [name] => ) [2] => Array ( [type] => 1 [property_id] => 265 [prefix] => [if] => = [value] => 359 [sufix] => [name] => ) [3] => Array ( [type] => 0 [property_id] => 265 [prefix] => [if] => [value] => [sufix] => ) [name] => ) [4] => Array ( [type] => 0 [property_id] => 265 [prefix] => AND [if] => = [value] => 19 [sufix] => [name] => shop_items_catalog_table.shop_shops_id ) ) [items_begin] => 0 [sql_group_by] => GROUP BY shop_items_catalog_table.shop_items_catalog_item_id [sql_having] => HAVING COUNT(shop_properties_items_table.shop_properties_items_id) = 1 [show_text] => [xml_show_tying_products] => [xml_show_group_property] => 1 [xml_show_group_type] => all )

как теперь включить отображение запросов?
#
Re: параметры фильтра задаются checkbox'ами. После применения фильтра ранее выбранные checkbox'ы не восстанавливаются
sielski писал(а):
если ставлю галки «year1» и «новые», то фильтр не работает

sielski, что-то мне подсказывает, что в этом случае выражение
HAVING COUNT(shop_properties_items_table.shop_properties_items_id) = 1
должно быть равно не 1 а 2, а также второй фильтр по доп.свойству должен иметь префикс OR вместо AND.
Если не поможет, то нужно уже гонять сам запрос в PMA
Заказов не беру. Консультирую редко.
#
Re: параметры фильтра задаются checkbox'ами. После применения фильтра ранее выбранные checkbox'ы не восстанавливаются
Kotoff, Вы были совершенно правы: Цитата:
HAVING COUNT(shop_properties_items_table.shop_properties_items_id) = 1
должно быть равно не 1 а 2, а также второй фильтр по доп.свойству должен иметь префикс OR вместо AND.

Поправил -- теперь всё работает, как надо. Спасибо Вам!
#
Re: параметры фильтра задаются checkbox'ами. После применения фильтра ранее выбранные checkbox'ы не восстанавливаются
Пожалуйста!
Заказов не беру. Консультирую редко.
#
Re: параметры фильтра задаются checkbox'ами. После применения фильтра ранее выбранные checkbox'ы не восстанавливаются
Я рано обрадовался. Есть ещё фильтр по годам от... до... (доп. свойство: "Год выпуска", код: 269, тип: список, способ отображения в фильтре: от..до..). Когда задаю в фильтре от 2010 до 2011, то фильтр работает и $param имеет вид:

Array ( [0] => Array ( [type] => 0 [prefix] => AND ( [name] => [if] => [value] => [sufix] => ) [1] => Array ( [type] => 1 [prefix] => [name] => [if] => IS NOT NULL [value] => [sufix] => AND shop_properties_items_table.shop_properties_items_value - 0.0 IN (427,428,429) [property_id] => 269 ) [2] => Array ( [type] => 1 [prefix] => AND [name] => [if] => IS NOT NULL [value] => [sufix] => AND shop_properties_items_table.shop_properties_items_value - 0.0 IN (362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428) [property_id] => 269 ) [3] => Array ( [type] => 0 [prefix] => [name] => [if] => [value] => [sufix] => ) [property_id] => 269 ) [4] => Array ( [type] => 0 [prefix] => AND [name] => shop_items_catalog_table.shop_shops_id [if] => = [value] => 19 [sufix] => [property_id] => 269 ) )


Но если включаю галку year1 (до 3-х лет) вместе с фильтром по годам, то ничего не выбирается (хотя должно бы), а $param имеет вид:

Array ( [0] => Array ( [type] => 1 [property_id] => 269 [prefix] => AND [if] => > [value] => 425 [sufix] => ) [1] => Array ( [type] => 0 [property_id] => 269 [prefix] => OR ( [if] => [value] => [sufix] => [name] => ) [2] => Array ( [type] => 1 [property_id] => 269 [prefix] => [if] => IS NOT NULL [value] => [sufix] => AND shop_properties_items_table.shop_properties_items_value - 0.0 IN (427,428,429) [name] => ) [3] => Array ( [type] => 1 [property_id] => 269 [prefix] => AND [if] => IS NOT NULL [value] => [sufix] => AND shop_properties_items_table.shop_properties_items_value - 0.0 IN (362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428) [name] => ) [4] => Array ( [type] => 0 [property_id] => 269 [prefix] => [if] => [value] => [sufix] => ) [name] => ) [5] => Array ( [type] => 0 [property_id] => 269 [prefix] => AND [if] => = [value] => 19 [sufix] => [name] => shop_items_catalog_table.shop_shops_id ) )

что тут может быть неверно?
#
Re: параметры фильтра задаются checkbox'ами. После применения фильтра ранее выбранные checkbox'ы не восстанавливаются
Во1х, вы здесь привели не полный дамп массива param.
Во2х, для трех фильтров по доп.свойствам having должен быть равен трем, а чему он равен у вас - неизвестно.
В3х, Если фильтров по доп.своствам больше 1го, то второй и все последующие употребляются с суффиксом OR, и объединяются скобками в одно выражение с первым.

В4х, вы бы сначала разобрались как работает логика построения фильтров в стандартной ТДС, а потом уже по аналогии построили бы свой.

P.S. И свои фильтры лучше добавлять не в начало ТДС, а перед самым вызовом метода ShowShop()
Заказов не беру. Консультирую редко.
#
Re: параметры фильтра задаются checkbox'ами. После применения фильтра ранее выбранные checkbox'ы не восстанавливаются
Цитата:
Во1х, вы здесь привели не полный дамп массива param.

mea culpa! Полный дамп, если не стоит галка "year1" (фильтр работает) выглядит так:

Array ( [user_id] => 0 [current_group_id] => [items_begin] => 0 [select] => Array ( [0] => Array ( [type] => 0 [prefix] => AND ( [name] => [if] => [value] => [sufix] => ) [1] => Array ( [type] => 1 [prefix] => [name] => [if] => IS NOT NULL [value] => [sufix] => AND shop_properties_items_table.shop_properties_items_value - 0.0 IN (427,428,429) [property_id] => 269 ) [2] => Array ( [type] => 1 [prefix] => AND [name] => [if] => IS NOT NULL [value] => [sufix] => AND shop_properties_items_table.shop_properties_items_value - 0.0 IN (362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428) [property_id] => 269 ) [3] => Array ( [type] => 0 [prefix] => [name] => [if] => [value] => [sufix] => ) [property_id] => 269 ) [4] => Array ( [type] => 0 [prefix] => AND [name] => shop_items_catalog_table.shop_shops_id [if] => = [value] => 19 [sufix] => [property_id] => 269 ) ) [sql_group_by] => GROUP BY shop_items_catalog_table.shop_items_catalog_item_id [sql_having] => HAVING COUNT(shop_properties_items_table.shop_properties_items_id) = 1 [show_text] => [xml_show_tying_products] => [xml_show_group_property] => 1 [xml_show_group_type] => all )

если ставлю "year1":

Array ( [user_id] => 0 [current_group_id] => [select] => Array ( [0] => Array ( [type] => 1 [property_id] => 269 [prefix] => AND [if] => > [value] => 425 [sufix] => ) [1] => Array ( [type] => 0 [property_id] => 269 [prefix] => OR ( [if] => [value] => [sufix] => [name] => ) [2] => Array ( [type] => 1 [property_id] => 269 [prefix] => [if] => IS NOT NULL [value] => [sufix] => AND shop_properties_items_table.shop_properties_items_value - 0.0 IN (427,428,429) [name] => ) [3] => Array ( [type] => 1 [property_id] => 269 [prefix] => AND [if] => IS NOT NULL [value] => [sufix] => AND shop_properties_items_table.shop_properties_items_value - 0.0 IN (362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428) [name] => ) [4] => Array ( [type] => 0 [property_id] => 269 [prefix] => [if] => [value] => [sufix] => ) [name] => ) [5] => Array ( [type] => 0 [property_id] => 269 [prefix] => AND [if] => = [value] => 19 [sufix] => [name] => shop_items_catalog_table.shop_shops_id ) ) [items_begin] => 0 [sql_group_by] => GROUP BY shop_items_catalog_table.shop_items_catalog_item_id [sql_having] => HAVING COUNT(shop_properties_items_table.shop_properties_items_id) = 2 [show_text] => [xml_show_tying_products] => [xml_show_group_property] => 1 [xml_show_group_type] => all )


Там, может, проблема в том, что "мой" фильтр (галки "year1", "year2", "year3" обращается к тому же доп. свойству, что и "стандартный" фильтр по годам?
#
Re: параметры фильтра задаются checkbox'ами. После применения фильтра ранее выбранные checkbox'ы не восстанавливаются
всё, разобрался: т. к. фильтр обращается к одному и тому же доп. свойству (год выпуска), то HAVING должен быть 1
Авторизация