Фильтр генерирует url вида arFilter_<ид свойства>_<некий код>.
[B]Задача: [/B]взяв параметры фильтра из урл, использовать их для своих компонентов и фильтраций.
<некий код> = abs( crc32( "значение свойства" ) ) - т.е. это просто crc32 сумма от строки, взятая по модулю.
В базе, в таблице b_iblock_<ид нужного инфоблока>_index_val содержится весь перечень возможных значений. Высчитываем abs(crc32()) от каждого из значений, и формируем массив вида $arr = array( abs(crc32( "значение" ) ) => "значение", ... ), и далее - получаем искомое текстовое представление $arr[ "<искомый crc32 код>" ].
Пример кода:
[CODE]global $DB;
$arFILTER = explode("&", $UF_FILTER_LINK);
foreach ($arFILTER as $k=>$v) {
unset($arFILTERFULL);
unset($arFILTERVAL);
if (substr_count($v,"arrFilter")>0) {
$arFILTERFULL = explode("=", $v);
$arFILTERVAL = explode("_", str_replace("arrFilter_","",$arFILTERFULL[0]));
$arFILTERCRC[$arFILTERVAL[0]][] = $arFILTERVAL[1];
}
}
$res = $DB->Query("SEL ECT * FR OM b_iblock_16_index_val", false, $err_mess.__LINE__);
while ($row = $res->Fetch()) {
$arrDBVALS[abs(crc32($row["VALUE"]))] = $row["VALUE"];
}
foreach ($arFILTERCRC as $prop=>$val) {
foreach ($val as $crc32) {
if ($arrDBVALS[$crc32]) {
$arFILTERNORMAL[$prop][] = $arrDBVALS[$crc32];
}
}
}
[/CODE]
Таким же образом, можно решить и обратную задачу, когда надо передать фильтру определенные параметры.
Было бы здорово, если бы в будующих версиях продукта, в этой таблице появился столбец с уже вычисленными кодами, чтобы не формировать каждый раз большие массивы из всей таблицы.
[B]Задача: [/B]взяв параметры фильтра из урл, использовать их для своих компонентов и фильтраций.
<некий код> = abs( crc32( "значение свойства" ) ) - т.е. это просто crc32 сумма от строки, взятая по модулю.
В базе, в таблице b_iblock_<ид нужного инфоблока>_index_val содержится весь перечень возможных значений. Высчитываем abs(crc32()) от каждого из значений, и формируем массив вида $arr = array( abs(crc32( "значение" ) ) => "значение", ... ), и далее - получаем искомое текстовое представление $arr[ "<искомый crc32 код>" ].
Пример кода:
[CODE]global $DB;
$arFILTER = explode("&", $UF_FILTER_LINK);
foreach ($arFILTER as $k=>$v) {
unset($arFILTERFULL);
unset($arFILTERVAL);
if (substr_count($v,"arrFilter")>0) {
$arFILTERFULL = explode("=", $v);
$arFILTERVAL = explode("_", str_replace("arrFilter_","",$arFILTERFULL[0]));
$arFILTERCRC[$arFILTERVAL[0]][] = $arFILTERVAL[1];
}
}
$res = $DB->Query("SEL ECT * FR OM b_iblock_16_index_val", false, $err_mess.__LINE__);
while ($row = $res->Fetch()) {
$arrDBVALS[abs(crc32($row["VALUE"]))] = $row["VALUE"];
}
foreach ($arFILTERCRC as $prop=>$val) {
foreach ($val as $crc32) {
if ($arrDBVALS[$crc32]) {
$arFILTERNORMAL[$prop][] = $arrDBVALS[$crc32];
}
}
}
[/CODE]
Таким же образом, можно решить и обратную задачу, когда надо передать фильтру определенные параметры.
Было бы здорово, если бы в будующих версиях продукта, в этой таблице появился столбец с уже вычисленными кодами, чтобы не формировать каждый раз большие массивы из всей таблицы.