Средний, последний (крайний) этаж в раскрытых фильтрах views [РЕШЕНО]

Главные вкладки

Аватар пользователя CriZ CriZ 19 июля 2012 в 21:43

Привет, народ. Появился еще один вопрос. Есть у меня форма поиска на сайте в которой пользователи могут выбирать этаж и этажность дома. Пока она простая, т.е. пользователь может указывать этажи и этажность. А хочется чтобы при выборе этажа пользователь мог выбирать из следующих полей: первый этаж (ну это легко), не первый этаж, средний этаж, не последний этаж, не крайние этажи. Как то так.
Я думаю, что это решается через views, а вот как, не знаю. Направьте на путь истинный.

Комментарии

Аватар пользователя emzzy emzzy 19 июля 2012 в 21:55

Views - exposed filters.
Форму поиска ручками делать - и формировать в зависимости от выбранных параметров урл-запрос на вьюшку(с нужными параметрами)

Аватар пользователя CriZ CriZ 19 июля 2012 в 22:23

Т.е. мне нужно почитать про "формировать в зависимости от выбранных параметров урл-запрос на вьюшку"?

Аватар пользователя CriZ CriZ 24 июля 2012 в 22:16

Решил делать фильтр несколько по другому: используя CCK Computed Field, т.к. чтобы разобраться с Form API уйдет не один месяц. Вот какая у меня идея:
1. Создаю новое поле, допустим typeetaj.
2. В вычисляемое поле добавляю вот этот код
$node_field[0]['value'] =
$node->field_etajnost[0]['value'] /
$node->field_etaj[0]['value'];
3. А вот дальше загвоздка. Хочу на основании результатов деления рассортировать ноды так:
Если при делении у нас получилась 1, то выводим слово "последний",
если число при делении равно значению из поля etajnost, то выводим слово "первый",
если число при делении больше 1, то выводим слово "средний"
Нифига не понимаю, что делать? Вставлял разные коды, но постоянно выскакивает слово "Error". Может кто подскажет хоть малюсенький кусочек кода, который будет работать по вышеназванному принципу?

Аватар пользователя CriZ CriZ 28 июля 2012 в 23:49

В результате сделал как мне надо. Создал новое вычисляемое поле field_numberetaj и добавил вот такой код:
$etajnost = $node->field_etajnost[0]['value'];
$etaj = $node->field_etaj[0]['value'];
$numberetaj = $etajnost / $etaj;
switch ($numberetaj) {
case ($numberetaj <= 1):
$node_field[0]['value'] = "last";
break;
case ($numberetaj > 1 && $numberetaj < $etajnost):
$node_field[0]['value'] = "average";
break;
case ($numberetaj = $etajnost):
$node_field[0]['value'] = "first";
break;
}
Далее написал свой модуль. В файл мой модуль.module прописал вот этот код:
<?php
function poisk_my_poisk_form_alter(&$form, &$form_state, $form_id) {
//maybe you need a $form_id, this plot in all forms if exist $form['field_numberetaj']
if ($form['field_numberetaj_value']) {
$form['field_numberetaj_value']['#type'] = "select";
$form['field_numberetaj_value']['#options'] = array(All=>'любой',first=>'первый',average=>'средний',last=>'последний');
$form['field_numberetaj_value']['#default_value'] = No;
$form['field_numberetaj_value']['#size'] = null;
}
}
?>
Все ищется как надо, но загвоздка в том, что вверху страницы появляется вот такое сообщение:
Сделан недопустимый выбор. Пожалуйста, обратитесь к администратору сайта.
К тому же надписи в поле выбора этажа становятся красными.
Читал про то, что это может быть вызвано конфликтом с модулем "флаг", но он мне нужен. Как быть?

Аватар пользователя CriZ CriZ 29 июля 2012 в 19:14

Решил проблему: во views в нужном фильтре (numberetaj) добавил значение All (строчка рядом с выбором оператора) и надпись убралась.

Аватар пользователя zniki.ru zniki.ru 19 сентября 2012 в 19:16

Братиш спасибо тебе за траекторию решения.
Сейчас как раз этажностью занимаюсь, попробую что-нить придумать на основе твоих постов.
Результат обязательно выложу.