[РЕШЕНО] Добавить к форме input со значением email автора ноды

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

Аватар пользователя Dorian76453 Dorian76453 23 мая 2015 в 1:52

Подскажите пожалуйста, как правильно реализовать form_alter
есть нода, в ней есть форма в которую подставляются данные (форма генерируется модулем avalibility_calendar).
необходимо добавить к этой форме всего два поля.

1. E-mail автора ноды на странице которой эта форма находится
2. url ноды на странице которой эта форма находится

не оч селен в написании модулей.

как добавить сам инпут разобрался

<?php
function MYMODULE_form_availability_calendar_booking_formlet_form_alter(&$form, &$form_state$form_id) {
   
$form['author_mail'] = array(
    
'#type' => 'hidden',
    
'#id' => t('obj_author_mail'),
    
'#weight' => t('15'),
    
'#value' => ('MAIL'),
   );
?>

А вот как получить данные по автору ноыд и alter'нуть их в форму перед рендером хз.
был бы признателен за кусочек кода и подсказки.
Заранее спасибо!

Комментарии

Аватар пользователя serega111 serega111 23 мая 2015 в 11:10

1. Посмотреть, не добавлен ли объект ноды в массив $form_state. Можно через var_dump, print_r или dpm (если модуль devel установлен). Обычно это $form_state['node'] или $form_state['object']
2. Если ноды в $form_state нет, то загрузить так <?php$node = node_load(arg(1));?>. Работать будет только на странице ноды.

<?php
function MYMODULE_form_availability_calendar_booking_formlet_form_alter(&$form, &$form_state$form_id) {
   
$node// нода получена одним из способов выше.
   
$user user_load($node->uid);
   
$form['author_mail'] = array(
    
'#type' => 'hidden',
    
'#id' => t('obj_author_mail'),
    
'#weight' => t('15'),
    
'#defualt_value' => $user->mail,
   );
   
   
$path current_path();
?>

Для всех типов полей, кроме 'value', нужно использовать #default_value, а не #value. Иначе при сабмите будет всегда записано значение из кода, а не то, которое было установлено на стороне клиента.
Если же не хотите, чтобы клиент менял значение, и не нужно менять это значение, то не выводите поле совсем - для это ставится тип #value

<?php
function MYMODULE_form_availability_calendar_booking_formlet_form_alter(&$form, &$form_state$form_id) {
   
$node// нода получена одним из способов выше.
   
$user user_load($node->uid);
   
$form['author_mail'] = array(
    
'#type' => 'value',
    
'#value' => $user->mail,
   );
?>
Аватар пользователя Dorian76453 Dorian76453 23 мая 2015 в 18:29

Сработала такая конструкция (может пригодится кому то)

<?php
function MODULENAME_form_availability_calendar_booking_formlet_form_alter(&$form, &$form_state$form_id) {
$node node_load(arg(1));
$user user_load($node->uid);

$form['author_mail'] = array(
  
'#type' => 'hidden',
  
'#id' => 'obj_author_mail',
  
'#weight' => 15,
  
'#value' => $user->mail,
);
   }
?>