Доброго времени суток!
Делаю модуль, который у пользователя запрашивает 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;
}
?>
Комментарии
Ну там же не написано, что эти "два параметра" можно заполнять чем угодно. Для начала, form_state - это массив, а $node - это объект.
И, кстати, не нужно в drupal_get_form "передавать два параметра". Нужно передавать столько, сколько требуется. Например, один, или три, или пять, или ни одного. Если один раз передавали - работало, зачем два раза передавать?
Читайте Form API, там все написано.
А делать надо так:
//...
}
function form_kitssubscribe_nodeapi($form_state, $node){
//...
$myvar = $node->nid;
Кстати, если вам nid не нужно зачем-нибудь в JS использовать, то не надо его в hidden-поле сохранять, это нехорошо. Сохраните просто в массиве $form.
спасибо, что ткнули носом