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

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

Аватар пользователя Sergey-jp Sergey-jp 6 октября 2013 в 5:02

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

Комментарии

Аватар пользователя imarat imarat 6 октября 2013 в 14:13

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

Аватар пользователя Sergey-jp Sergey-jp 7 октября 2013 в 0:52

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.

Аватар пользователя imarat imarat 7 октября 2013 в 3:40

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

Аватар пользователя Sergey-jp Sergey-jp 7 октября 2013 в 15:34

Да, именно так я и пытаюсь сейчас сделать. Добавил поле и с помощью 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'];
С благодарностью приму советы.

Аватар пользователя imarat imarat 9 октября 2013 в 13:43

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

Аватар пользователя imarat imarat 10 октября 2013 в 3:40

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