27.10.2010
Сами понимаете, что множественный выбор для пользователя, удерживая CTRL, очень не удобен, ну а кто-то про такой и не знает вовсе.
Так вот, есть всеми любимые checkbox. Не буду много расписывать, что и как я сделал. Но следующий код зменяет множественный выбор с CTRL на чекбоксы:
1. Находим файл /bitrix/components/bitrix/catalog.filter/component.php
1.1 Делаем копию этого файла с другим названием, например old_component.php, чтобы был исходник, мало ли что бывает.
2. В найденом component.php находим код:
3. Заменяем этот код на:
4. Сохраняем наш component.php.
Данный код заменяет только множественный выбор в фильтре каталога на чекбоксы.
Мною проверено, т.к. делался для оного проекта.
Если Вам требуется расположить чекбоксы не в строчку, а друг под другом, то вот эту строчку:
Замените на:
Спасибо за внимание!
Количество показов: 15299
Множественный выбор в фильтре каталога в виде чекбоксов (checkbox) Битрикс
Пишу эту запись, т.к. не нашел решения своей проблемы на сайте.Сами понимаете, что множественный выбор для пользователя, удерживая CTRL, очень не удобен, ну а кто-то про такой и не знает вовсе.
Так вот, есть всеми любимые checkbox. Не буду много расписывать, что и как я сделал. Но следующий код зменяет множественный выбор с CTRL на чекбоксы:
1. Находим файл /bitrix/components/bitrix/catalog.filter/component.php
1.1 Делаем копию этого файла с другим названием, например old_component.php, чтобы был исходник, мало ли что бывает.
2. В найденом component.php находим код:
Код
$name = $FILTER_NAME."_pf[".$arProp["CODE"]."]";
$value = $arrPFV[$arProp["CODE"]];
if ($arProp["MULTIPLE"]=="Y")
$res .= '<select multiple name="'.$name.'[]" size="'.$arParams["LIST_HEIGHT"].'">';
else
$res .= '<select name="'.$name.'">';
$res .= '<option value="">'.GetMessage("CC_BCF_ALL").'</option>';
foreach($arProp["VALUE_LIST"] as $key=>$val)
{
$res .= '<option';
if (($arProp["MULTIPLE"] == "Y") && is_array($value))
{
if(in_array($key, $value))
$res .= ' selected';
}
else
{
if($key == $value)
$res .= ' selected';
}
$res .= ' value="'.htmlspecialchars($key).'">'.htmlspecialchars($val).'</option>';
}
$res .= '</select>';
3. Заменяем этот код на:
Код
$name = $FILTER_NAME."_pf[".$arProp["CODE"]."]";
$value = $arrPFV[$arProp["CODE"]];
if ($arProp["MULTIPLE"]=="Y")
$res .= '';
else
$res .= '<select name="'.$name.'">';
if ($arProp["MULTIPLE"]=="Y")
$res .= '';
else
$res .= '<option value="">'.GetMessage("CC_BCF_ALL").'</option>';
foreach($arProp["VALUE_LIST"] as $key=>$val)
{
if ($arProp["MULTIPLE"]=="Y")
$res .= '<input';
else
$res .= '<option';
if (($arProp["MULTIPLE"] == "Y") && is_array($value))
{
if(in_array($key, $value))
$res .= ' checked';
}
else
{
if($key == $value)
$res .= ' selected';
}
if ($arProp["MULTIPLE"]=="Y")
$res .= ' type="checkbox" name="'.$name.'[]" value="'.htmlspecialchars($key).'">'.htmlspecialchars($val).' ';
else
$res .= ' value="'.htmlspecialchars($key).'">'.htmlspecialchars($val).'</option>';
}
$res .= '</select>';
4. Сохраняем наш component.php.
Данный код заменяет только множественный выбор в фильтре каталога на чекбоксы.
Мною проверено, т.к. делался для оного проекта.
Если Вам требуется расположить чекбоксы не в строчку, а друг под другом, то вот эту строчку:
Код
$res .= ' type="checkbox" name="'.$name.'[]" value="'.htmlspecialchars($key).'">'.htmlspecialchars($val).' ';
Замените на:
Код
$res .= ' type="checkbox" name="'.$name.'[]" value="'.htmlspecialchars($key).'">'.htmlspecialchars($val).'<br />';
Спасибо за внимание!
Количество показов: 15299