Блог специалистов
27.10.2010

Множественный выбор в фильтре каталога в виде чекбоксов (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 />';


Спасибо за внимание! 

Количество показов: 14684




Возврат к списку