Как автоматически добавить термин к материалу

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

Аватар пользователя Anya Anya 15 апреля 2012 в 15:59

Добрый день! Столкнулась с проблемой:
При добавлении материала с 2-мя полями по 2-м словарям таксономии требуется чтобы пользователь заполнял одно поле, а второе поле исходя из значения первого заполнялось автоматически и в форме даже не присутствовало.
Уже 2 дня бьюсь над решением, конкретного решения так и не нашла.
Насколько я поняла, предлагают использовать хуки, но какие конкретно в данном случае будет правильнее всего использовать так и не выяснила.

В общем задача состоит в том, чтобы спрятать в форме добавления материала одно из полей таксономии(словарь 1) и после заполнения пользователем данных взять значение другого поля таксономии(словарь 2) и использовать его для автоматического заполнения спрятанного поля из словаря 1.

Для скрытия поля в форме предполагается использовать хук form_alter,
в котором наверное нужно найти элемент, который требуется спрятать и поменять ему атрибут #type на 'hidden' или еще какой-нибудь, а может вообще другой хук использовать надо?

А для заполнения этого скрытого поля тоже неясно какой хук нужен, там есть:
hook_field_presave, hook_node_presave, hook_node_submit и там еще какие-то для полей рекомендуются..
В общем в них я вконец запуталась, прошу помощи.

Комментарии

Аватар пользователя Zigs Zigs 15 апреля 2012 в 19:26

для скрытия поля нужно создать свой модуль. Сделать там хук form_id_form_alter, в котором будет строка:

$form['field_ваше_поле']['#access'] = false;

далее, у меня добавлен свой submit, в котором заполняется, в зависимости от основного поля значение второго:

$form['field_ваше_поле']['und'][0]['value'] = ЗНАЧЕНИЕ; und - язык, если нет определенного языка, то это значение.
если поле- ссылка на термин,то value должно быть tid.

Ну как-то так.

Аватар пользователя Anya Anya 15 апреля 2012 в 22:55

Спасибо, Zigs, сейчас попробую, насколько я поняла, нужно сделать примерно так:
<?php
function mymodule_form_node_form_alter(&$form, &$form_state, $form_id) {
$form['field_region]['#access'] = false;
$form['#submit'][] = 'mymodule_node_form_submit';
}

function mymodule_node_form_submit($form, &$form_state) {
$tid = $form_state['field_city']['und'][0]['tid'];
$region = mymodule_get_region($tid);
$form['field_ваше_поле']['und'][0]['tid'] = $region->tid;
}

function mymodule_get_region($tid) {
//здесь получить нужный регион
}
?>

Аватар пользователя Anya Anya 16 апреля 2012 в 9:23

Получилось! Еще раз большое спасибо, Zigs!

Единственное, что пришлось поменять:
$form['field_ваше_поле']['und'][0]['tid'] = $region->tid;
на
$form_state['values']['field_ваше_поле']['und'][0]['tid'] = $region->tid;