Форма в теле ноды

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

Аватар пользователя zardoz zardoz 17 февраля 2010 в 5:30

Доброго времени суток!
Делаю модуль, который у пользователя запрашивает email но для дальнейшей обработки нужно знать с какой страницы была отправка
Нашёл тему http://www.drupal.ru/node/29487 и там в комментах пишут что drupal_get_form нужно передавать два параметра. Всё хорошо пока не отправляешь какие то данные. после сабмита появляется белый экран и ошибка в логах:

PHP Fatal error: Cannot use string offset as an array in /hsphere/local/home/nigmus/tennis.lg.ua/includes/form.inc on line 985

Как это победить? если только один параметр передавать, то все нормально...

<?php
function kitssubscribe_nodeapi(&$node$op$a3 NULL$a4 NULL) {
    switch (
$op) {
      case 
'view':          
        if (isset(
$node->extra_info)) {
            
$node->content['kitssubscribe'] = array(
                
'#value' => drupal_get_form('form_kitssubscribe_nodeapi'$node$node),
                
'#weight' => 1,
            );            
        }

        break;
    }
}
function 

form_kitssubscribe_nodeapi($form$form_state){

  

$form['kitssubscribe_nodeapi'] = array(
    
'#type' => 'fieldset',
    
'#title' => t('send more information on email'),
    
'#collapsible' => TRUE,
    
'#collapsed' => TRUE,
  );
  
$form['kitssubscribe_nodeapi']['mail'] = array(
    
'#type' => 'textfield',
    
'#title' => t('email'),
    
'#size' => 20,
    
'#weight' => 0,
    
'#description' => t('Enter your email to recive extra information please'),
    
'#required' => TRUE,
  );
  
$form['kitssubscribe_nodeapi']['hidden'] = array(
    
'#type' => 'hidden',
    
'#value' => $form_state->nid,
  );
  
$form['kitssubscribe_nodeapi']['submit'] = array(
    
'#type' => 'submit',
    
'#value' => t('Submit'),
  );
  return 
$form;
}
?>

Комментарии

Аватар пользователя graker graker 17 февраля 2010 в 8:14

Ну там же не написано, что эти "два параметра" можно заполнять чем угодно. Для начала, form_state - это массив, а $node - это объект.

И, кстати, не нужно в drupal_get_form "передавать два параметра". Нужно передавать столько, сколько требуется. Например, один, или три, или пять, или ни одного. Если один раз передавали - работало, зачем два раза передавать? Smile
Читайте Form API, там все написано.

А делать надо так:

drupal_get_form('form_kitssubscribe_nodeapi', $node);
//...
}

function form_kitssubscribe_nodeapi($form_state, $node){
//...
$myvar = $node->nid;

Кстати, если вам nid не нужно зачем-нибудь в JS использовать, то не надо его в hidden-поле сохранять, это нехорошо. Сохраните просто в массиве $form.