Drupal 7 не видны кнопки в форме

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

Аватар пользователя gigzbyte gigzbyte 24 сентября 2013 в 15:33

Приветствую всех!
Знаю, что вопрос элементарный, но не смог найти помощи ни в гугле, ни в других источниках. Имею друпал 7, в нем создал модуль по вот этому посту http://www.drupal.ru/node/85705, там, где сообщение "Frantsuzzz в Втр, 20/11/2012 - 17:06".

<?php

function tlq_form($form, &$form_state) { 
 
//будем менять эту группу полей
$form['group'] = array(
        
'#type' => 'fieldset',
        
'#title' => 'Укажите Ваш параметр',
        
'#prefix' => '<div id = "form-ajax-nodes">',
        
'#suffix' => '</div>',
        
'#required' => true,
    );

// Если форма только что была создана, то выводим первый элемент.
// иначе забираем количество элементов.
  
$kol = empty($form_state['storage']['kol']) ? $form_state['storage']['kol'];
  
$form_state['storage']['kol'] = $kol;

for (

$i 1$i <=$kol$i++) {
   
$form['group']['answer_'.$i] = array(
        
'#type' => 'textfield',
        
'#title' => 'Nodes from'.$i,
        
'#required' => true,
    );

}

//кнопка добавляет елемент
$form['add'] = array(
     
'#type' => 'submit'
        
'#value' => t('Add'),
        
'#ajax' => array(
            
'callback' => 'form_ajax_form_load_nodes',
            
'wrapper' => 'form-ajax-nodes',
            
'method' => 'replace',
            
'effect' => 'fade',
        ),

    );

//кнопка удаляет элемент
$form['del'] = array(
     
'#type' => 'submit'
        
'#value' => t('Del'),
    
// отменяем валидацию.    
          
'#limit_validation_errors' => array(),
    
'#submit' => array('test_form_submit'),
        
'#ajax' => array(
            
'callback' => 'form_ajax_form_load_nodes',
            
'wrapper' => 'form-ajax-nodes',
            
'method' => 'replace',
            
'effect' => 'fade',
        ),

    );

//основной обработчик
$form['submit'] = array(
        
'#type' => 'submit',
        
'#value' => t('Add answers'),
    ); 

return 

$form;
}

//ajax обработчик, возвращает группу полей
function form_ajax_form_load_nodes($form, &$form_state) {    
 return 
$form['group'];
}

//обработчик формы
function tlq_form_submit($form, &$form_state) {
//если нажали "добавить элемент"
if (isset($form['add']['#value']) && $form_state['triggering_element']['#value'] == $form['add']['#value']) 
    
$form_state['storage']['kol']++;

//если нажали "удалить элемент"
if (isset($form['del']['#value']) && $form_state['triggering_element']['#value'] == $form['del']['#value'])
    
$form_state['storage']['kol']--;

// Если нажата кнопка Отправить,
  
if (isset($form['submit']['#value']) && $form_state['triggering_element']['#value'] == $form['submit']['#value']) {
 
// Показываем сообщение с введёнными данными.  
    
$output ="";
    for (
$i 1$i <=$form_state['storage']['kol']; $i++){
    
$output .= $form_state['values']['answer_'.$i]."<br/>";
    }
        
drupal_set_message($output);  
        
$form_state['rebuild'] = FALSE;
        return;
    }
// Указываем, что форма должна быть построена заново.
  
$form_state['rebuild'] = TRUE;
}
?>

Добавил вверх модуля функцию:

<?php
function tlq_menu() {
  
$items = array();
  
$items['tlq/form'] = array(
    
'title' => 'Заявка',
    
'page callback' => 'tlq_form',
    
'access arguments' => array('access content'),
    
'description' => 'Заявка',
    
'type' => MENU_CALLBACK,
    
/*
    '#ajax' => array(
      'callback' => 'tlq_myexecute',
      'wrapper' => 'tlq_form',   
    ),
    */
  
);
  return 
$items;
}
?>

Мой модуль называется tlq.
Открываю <сайт>/tlq/form - все отображается, но не работает - не добавляет поля, на кнопки вообще не нажать - они будто неактивны.
Если переменовать function tlq_form() в function tlq_my_form() и дописать вот так:

<?php
function test_form() {
   return 
drupal_get_form(test_my_form);

?>

То, все отображается, но куча проблем с обработкой данных.
Как решить проблему с работой изначального примера? Почему у меня не добавляются поля и не работают кнопки?
Огромное спасибо за помощь.

Комментарии

Аватар пользователя Frantsuzzz Frantsuzzz 27 октября 2013 в 1:11

Много времени прошло..., но все равно напишу.
Функция tlq_form возвращает массив, а функция, указанная в 'page callback' для страницы должна возвращать html.
Поэтому hook_menu должен быть примерно таким:

<?phpfunction tlq_menu() {
  $items = array();
  $items['tlq/form'] = array(
    'title' => 'Заявка',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('tlq_form'),
    'access arguments' => array('access content'),
    'description' => 'Заявка',
    'type' => MENU_CALLBACK,    
  );
  return $items;
}?>

И вот тут ошибка:

<?php
    
// отменяем валидацию.    
    
'#limit_validation_errors' => array(),
    
'#submit' => array('TEST_form_submit'),
);
?>

Надо указывать обработчик вашей формы.
Дальше не разбирался..