Как это работает на ORE, можно посмотреть здесь
Модификаций здесь немного, но эффект приятный.
1. в админке->настройки отключаем Использовать "ползунок" в поиске для поля "Количество комнат"
2. открываем файл \protected\views\site\field-rooms-search.php и находим код:
- Код: Выделить всё
$roomItems = array(
'0' => Yii::t('common', 'any'),
'1' => 1,
'2' => 2,
'3' => 3,
'4' => Yii::t('common', '4 and more'),
);
echo CHtml::dropDownList('rooms', isset($this->roomsCount) ? CHtml::encode($this->roomsCount) : 0, $roomItems, array('class' => $fieldClass));
меняем на:
- Код: Выделить всё
$roomItems = array(
'1' => '1',
'2' => '2',
'3' => '3',
'4' => '4+',
);
echo CHtml::checkBoxList(
'rooms',
isset($this->selectedRooms) ? $this->selectedRooms : '',
$roomItems,
array('template'=>"{input}{label}", 'separator'=>'<div class=\'left\' style=\'width:9px;\'> </div>')
);
Основная идея в применении checkBoxList вместо dropDownList
Вместо 'separator' можно применить margin-left:9px; в CSS, так код будет лаконичнее.
3. открываем \protected\modules\quicksearch\controllers\MainController.php и добавляем куда-нибудь в начало файла публичную переменную класса
- Код: Выделить всё
public $selectedRooms;
4. в этом же файле ищем код:
- Код: Выделить всё
$rooms = Yii::app()->request->getParam('rooms');
if($rooms){
if($rooms == 4){
$criteria->addCondition('num_of_rooms >= :rooms');
}
else{
$criteria->addCondition('num_of_rooms = :rooms');
}
$criteria->params[':rooms'] = $rooms;
$this->roomsCount = $rooms;
}
меняем на:
- Код: Выделить всё
$rooms = Yii::app()->request->getParam('rooms');
if($rooms) {
$roomsConditions = array();
foreach($rooms as $roomKey => $roomValue){
if($roomValue == 4) {
$roomsConditions[] = 'num_of_rooms >= :rooms_'.$roomKey;
} else {
$roomsConditions[] = 'num_of_rooms = :rooms_'.$roomKey;
}
$criteria->params[':rooms_'.$roomKey] = $roomValue;
}
$roomsCondition = implode(' OR ', $roomsConditions);
$criteria->addCondition($roomsCondition);
$this->selectedRooms = $rooms;
}
Здесь мы поменяли обработку единственного аргумента (кол-во) на обработку массива по логике ИЛИ.
5. правим CSS (\css\styles.css), чтобы наши checkbox'ы стали похожи на кнопки:
- Код: Выделить всё
#rooms label {
background: #2D5495;
border: #2D5495 1px solid;
color:#fff;
-webkit-border-radius: 5px;
-moz-border-radius: 5px;
border-radius: 5px;
display: block;
float:left;
padding: 2px 5px 2px 5px;
margin: 2px 0 0 0px;
line-height:1.4em;
text-align:center;
width:15px;
-webkit-box-shadow: inset 1px 3px 3px rgba(255,255,255,0.1);
-moz-box-shadow: inset 1px 3px 3px rgba(255,255,255,0.1);
box-shadow: inset 1px 3px 3px rgba(255,255,255,0.1);
}
#rooms input{
display: none;
}
#rooms input:checked + label{
background: #fff;
color: #333;
-webkit-box-shadow: inset 1px 3px 2px rgba(0,0,0,0.2);
-moz-box-shadow: inset 1px 3px 2px rgba(0,0,0,0.2);
box-shadow: inset 1px 3px 2px rgba(0,0,0,0.2);
}
И подгоняем под нужный дизайн.
Возможно я что-то забыл, так что если не будет работать - пишите, поправим.