Exposed Filters и поле "Список — числа целые"

6 октября 2013 в 5:02

При создании фильтра Exposed Filter в Views для типа поля "Список — числа целые" в списке операторов нет таких, как "больше", "меньше", "между". Если тип поля "Числа целые", то такие операторы есть.
Куда они подевались?
Очень уж хочется для поля с выпадающим списком сделать фильтр типа "больше, чем".
Поиск ничего похожего не выдал. Может не так ищу?
Кто знает ответ? Откликнитесь пожалуйста!

Комментарии

да, нету там
замените поле на тип Целое число
а в форме создания ноды можно через хук форм алтер измените тип поля на select, раз уж надо ограничить выбор

6 октября 2013 в 14:13

imarat wrote:
да, нету там
замените поле на тип Целое число
а в форме создания ноды можно через хук форм алтер измените тип поля на select, раз уж надо ограничить выбор

Попробовал выполнить предложенное:
- Создал новое поле "целое число" ( field_edit )
- в template.php вставил хук

function danland_form_ads_node_form_alter(&$form, &$form_state) {
// unset($form['field_edit']);
$form['field_edit'] = array(
'#type' => 'select',
'#title' => t('Год'),
'#options' => array(
'_none' => 'Укажите год',
'2000' => '2000',
'2001' => '2001',
'2002' => '2002',
'2003' => '2003',
),
);

В результате поле выводится, в Exposed Filter смог сделать фильтр с "меньше чем", и он появляется на странице, но
1. При вводе в фильтр любых значений ничего не выводит (если пусто, то все нормально)
2. Похоже, что значения этого поля оно не заносит в форму (при выводе dsm($form) этого поля просто нет)
3. При сохранении материала выводится сообщение: Warning: Invalid argument supplied for foreach() в функции number_field_validate() (строка 136 в файле E:****\www\modules\field\modules\number\number.module).

Получается, что при создании фильтра был использован тип "целое число", и поэтому фильтр создался.
А при сохранении ноды, когда это целое число было заменено на select, Друпал понял, что его элементарно надули (типа, нет таких аргументов для "цисла целого" в модуле number)и отказывается дальше работать с таким полем.
Похоже, что таким довольно простым способом мой вопрос не решить.

Спасибо за участие, imarat.

7 октября 2013 в 0:52

создайте тогда два поля, при сохранении ноды значение из селекта сохраняйте в целое чилсло, и скройте его от пользователя с помощью филд пермишен

7 октября 2013 в 3:40

Да, именно так я и пытаюсь сейчас сделать. Добавил поле и с помощью function danland_form_ads_node_form_alter пытаюсь занести значение поля селект в это новое поле.
Но пока плохо получается. $form, $form_state... что, когда и в какую переменную сохраняется - сам черт ногу сломит.
Пробовал так:

$a = '';
$a = $form_state['values']['field_year'][0]['#markup'];

Через dpm($form_state['values']) смотришь - выбранное значение селекта на месте, а в переменную $a оно не заносится. Может что не правильно заношу? Я не такой уж и спец, могу ошибаться в элементарном.
$form['field_edit']['und'][0]['value']['#default_value'] = '25'; - вот так в дополнительном поле значение появляется, а вот так нет:
$form['field_edit']['und'][0]['value']['#default_value'] = $form_state['values']['field_year'][0]['#markup'];
С благодарностью приму советы.

7 октября 2013 в 15:34

что-то вы мудрите, просто создайте два поля, в хук ноде пресейв записывайте из селекта в целое число, все

9 октября 2013 в 13:43

я с мобилки, писать не удобно, напишу как получится: в своем модуле прописываете hook node presave, внутри этой функции пишите условие if ($node->type == 'ваш тип') { $node->field_integer[und][0][value] = $node->field_select[und][0][value] ; }

10 октября 2013 в 3:40