Оно вообще работать должно или у меня где-то конфликт?
Нет, не должно. Насколько помню, свой вариант функции _testExtraParametrsTemplate я именно потому и писал, что штатная функция работает только если param_XXX имеет всего один вариант. Там оно по AND объединяется, чтоли. В общем, когда задано два варианта одного параметра, то по любому получается false.
Тогда я эту функцию просто заменил, а сейчас добавляю в строку &extrafilter=1, а в функции делаю
if (isset($_GET["extrafilter"])){
новый код функции
}else{
старый код функции
}
это позволяет делать разные фильтры и для каждого делать свой вариант функции _testExtraParametrsTemplate при сохранении общего ядра и работоспособности родного и других фильтров.
"param_154_1=6¶m_154_2=7" вместо стандартного "param_154_p6=6¶m_154_p7=7"
А это совершенно безразлично, лишь бы после второго подчерка было нечто уникальное.
Список характеристик-вариантов создается в функции ScanGetVariableWithId, которая возвращает массив, где ключом будет "хвост" от param_, (т.е., например 154_1), а значением - значение $_GET (например, 6). Затем ключ передается в функцию schOptionIsSetToSearch, где к нему применяется (int), т.е. все, что после подчерка на результат не влияет.
PS. Там общая идея такова, что сначала в advanced_search_in_category.php собирается массив $extraParametrsTemplate, где и содержатся данные для поиска по характристикам и вариантам (полученный из строки запроса). Затем в category.php идет присвоение $callBackParam["extraParametrsTemplate"] = $extraParametrsTemplate, а в массиве $callBackParam кроме данных о характеристиках и вариантах есть и куча другой инофрмации для поиска - сортировка, направление, категория, etc.
Ну а дальше в функцию GetNavigatorHtml передается этот массив со всеми данными для получения нужной выборки и имя функции обратного вызова (в данном случае prdSearchProductByTemplate), которая и использует затем функцию _testExtraParametrsTemplate, которая для каждого товара возвращает true или false, т.е. подходит он или нет под наши данные. Ну а полученная выборка возвращается в массиве $products.
Немного через задницу, но, в принципе, если понять, то очень удобно. Можно делать любые свои выборки лишь меняя callback-функцию.