Установить значение по умолчанию для поля автодополнение ссылка на термин

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

Аватар пользователя samodelkin samodelkin 13 октября 2013 в 15:17

Добрый день, помогите решить проблему.

В [mymodule]_form_[type]_node_form_alter изменяю форму редактирования ноды. Мне нужно установить другое значение по умолчанию в виджет автодополнения поля ссылка на термин.

Подскажите как можно решить эту задачу, установка #default_value не помогает.

Комментарии

Аватар пользователя samodelkin samodelkin 13 октября 2013 в 17:53

"Chyvakoff" wrote:
А хук правильно написали? debug('test'); в хуке - срабатывает?

Срабатывает.

Да и значение меняется в принципе, но как то странно. На одно из полей повесил 'callback' который меняет значение полей. Другие поля все хорошо заменяются проблема именно с автодополнением поля ссылка на термин. При этом если виджет просто выбор из списка то все нормально отрабатывает. Так-же нормально срабатывает если материал добавляется первый раз, а если редактируется существующий то срабатывает с запаздыванием. Первый раз меняю отображается то-же значение, дальнейшие замены ведут смену поля но с предыдущим значением. Такое ощущение что виджет уже создался и не обновляется после смены значения по умолчанию.

Кстати и поле меняется если меню значение поля в '#entity' данного поля. Только с задержкой как-бы. Возможно я в целом не правильно меняю значение по умолчанию для поля с авдополнением.

Еще как вариант можно данное поля заменить на другое т.к. оно блокируется для изменения главное что-бы оно подхватилось при сохранении ноды.

Решил через использование field_default_form с нужными данными, подскажите на сколько это корректное решение?

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

"samodelkin" wrote:
На одно из полей повесил 'callback' который меняет значение полей.

Это как? Калбак ведь есть только у функции, в который сабмиттятся все поля при отправке формы? Чёт не понял...

Смотри, скорей всего у тебя не получается из-за того, что при автодополнении в поле указывается значение поля, потом пробел и в квадратных скобках nid(если нодереференс), двоеточие и значение нида. А в выпадающем списке только nid нужен.
Ты открой на редактирование уже готовую ноду, с заполненым полем и в хуке посмотри значение этого поля. Таким образом ты будешь на 100% точно знать в каком виде нужно подставлять значение в автодополняемое поле.

"samodelkin" wrote:
Так-же нормально срабатывает если материал добавляется первый раз, а если редактируется существующий то срабатывает с запаздыванием.

О каком запаздывании идёт речь, JavaScript?
"samodelkin" wrote:
#default_value

Это ведь дефолтное значение, оно сработает только когда поле пустое. Если нужно всегда - то #value.

А в настройках полей нельзя выбрать значение по умолчанию?

Аватар пользователя samodelkin samodelkin 14 октября 2013 в 10:15

Смысл задачи: При выборе значения в одном поле автодополнения (Договор) Заполнить другие (Контрагент и т.д.) автоматом.
Через hook_form_[type]_node_form_alter меняю форму редактирования ноды и вешаю AJAX обработчик на нужное мне поле

<?php
$form
['field_request_treaty'][LANGUAGE_NONE][0]['target_id']['#ajax'] = array(
        
'callback' => 'mymodule_treaty_callback',
        
'wrapper' => 'form_bl2',
        
'effect' => 'slide',
        
'progress' => array('type' => 'none'),
    );
?>

А через функцию mymodule_treaty_callback возвращаю нужные поля из формы которые должны быть заполнены исходя из данных переданных из формы. Поля без автодополнения заполняются такой конструкцией

<?php
$form
['field_request_group'][LANGUAGE_NONE]['#default_value'][0] = tid нужного значения
?>

А для автодополнения такой подход не работает.

"Chyvakoff" wrote:
А в настройках полей нельзя выбрать значение по умолчанию?

Это не подходит т.к. мне нужно что-бы просто на форме уже было проставлено определенное значение но в зависимости от выбранного в другом поле значения.

"Chyvakoff" wrote:
Ты открой на редактирование уже готовую ноду, с заполненым полем и в хуке посмотри значение этого поля. Таким образом ты будешь на 100% точно знать в каком виде нужно подставлять значение в автодополняемое поле.

Смотрел там как-то хитро все хранится. В #default_value хранится строка, но ее смена ни к чему не приводит. Сделал предположение что поле генерится на основе #entity что есть в этом-же поле. Менял значение там в итоге поле менялось с задержкой (не знаю как правильнее сказать). При первом выборе значения в поле на основании которого меняются данные ничего не менялось, когда второй раз выбираю подставлялось то значение которое должно было подставится в первый раз и так далее.

В итоге сделал путем генерации поля заново, а не меняя существующее.

<?php
$form 
+= field_default_form('node'$entity$field$instance,$langcode$items$form$form_state);
?>

в $instance записываю нужное мне значение по умолчанию которое будет выбрано на форме, а $entity обнуляю. Вроде работает, но наверняка должно быть проще.

Аватар пользователя samodelkin samodelkin 29 октября 2013 в 16:12

Еще вылезла такая проблемка с полем автодополнения. Если в наименование материала который выбирается через автодополнение поля Entity reference есть запятые то id выбранного материала не попадает в массив form_state.
при вызове функции Ajax обработчика. Подскажите есть ли решение для данной проблемы?

Еще мне не удалось настроить поиск по дополнительным поля сущьности при выводе списка через Views. Настройки есть галки для нужных полей ставлю а он по ним не ищет. Подскажите какие там тонкости в настройке есть.