Ajax формы в семерке

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

Аватар пользователя Chyvakoff Chyvakoff 1 декабря 2011 в 13:04
<?php

print drupal_render(drupal_get_form('ajax_example_simplest'));

function 

ajax_example_simplest($form, &$form_state) {
  
$form = array();
  
  
$form['email'] = array(
    
'#type' => 'textfield',
  );
  
  
$form['submit'] = array(
    
'#type' => 'submit',
    
'#ajax' => array(
      
'callback' => 'ajax_example_simplest_callback',
      
'wrapper' => 'ajax-example-form-node',
      
'effect' => 'fade',
    )
  );
  
  return 
$form;
}

function 

ajax_example_simplest_callback($form$form_state) {

  return 

'test';
}
?>
<div id="ajax-example-form-node"></div>?>

Форма не работает... пол дня уже бьюсь над этим яаксом...
смотрел пример-везде одно и тоже..делаю как написано-не работает!
http://api.drupal.org/api/drupal/developer--topics--forms_api_reference.... это читал,другие пример смотрел...

мне надо форму с одним полем ввода.чувак туда вводит своё мыло.я генерю определенный код и вывожу ему сразу,в диве.
подскажите как форму сделать..

Комментарии

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 1 декабря 2011 в 13:13

Вы будете ещё биться неделю, если не объясните что это такое вы выложили.
Почему print drupal_render(drupal_get_form('ajax_example_simplest')); вне функции?
Почему

>
<div id="ajax-example-form-node"></div>

вне функции?
Где вы вообще это делаете? В шаблоне ноды чтоли?

Аватар пользователя Chyvakoff Chyvakoff 1 декабря 2011 в 13:16

нет,просто создал страницу с форматом ввода php

"RxB" wrote:
Почему print drupal_render(drupal_get_form('ajax_example_simplest')); вне функции?

в какую ф-ю это воткнуть?

"RxB" wrote:


сделать в виде префиксов в элементе формы?

Аватар пользователя Chyvakoff Chyvakoff 1 декабря 2011 в 13:24
<?php

//отрисовка формы,это воткнул сам.иначе как мне её вызывать?
print drupal_render(drupal_get_form('ajax_example_autocheckboxes'));

function 

ajax_example_autocheckboxes($form, &$form_state) {

 

// $default = !empty($form_state['values']['howmany']) ? $form_state['values']['howmany'] : 1;

  

$form['howmany_select'] = array(
    
'#title' => t('How many checkboxes do you want?'),
    
'#type' => 'select',
    
'#options' => array(=> 1=> 2=> 3=> 4),
   
// '#default_value' => $default,
    
'#ajax' => array(
      
'callback' => 'ajax_example_autocheckboxes_callback',
      
'wrapper' => 'checkboxes-div',
      
'method' => 'replace',
      
'effect' => 'fade',
    ),

  );

  

$form['checkboxes_fieldset'] = array(
    
'#title' => t("Generated Checkboxes"),
    
// The prefix/suffix provide the div that we're replacing, named by
    // #ajax['wrapper'] above.
    
'#prefix' => '<div id="checkboxes-div">',
    
'#suffix' => '</div>',
    
'#type' => 'fieldset',
    
'#description' => t('This is where we get automatically generated checkboxes'),
  );
  return 
$form;
}

function 

ajax_example_autocheckboxes_callback($form$form_state) {
  return 
$form['checkboxes_fieldset'];
}
?>

вот взял пример с drupal.org -нифига не работает.

Аватар пользователя meliorator meliorator 28 апреля 2012 в 20:18

Работает на версии 7.12 Вот так:

<?php
function tratata(){
...
$content drupal_render(drupal_get_form('sthelp_form_change_balance_form'));
...
}
function 
sthelp_form_change_balance_form($form, &$form_state){  
    
$form = array( );
    
    
$form['curr_balance'] = array(
        
'#type' => 'textfield',
        
'#title' => t('Установить баланс'), 
        
'#size' => 40,
        
'#required' => TRUE,
        
'#description' => t('Десятичное значение баланса следует разделить точкой')
    );
    
$form['replace_textfield'] = array(
        
'#markup' => '',
        
'#prefix' => '<div id="replace_textfield_div">',
        
'#suffix' => '</div>',
    );
    
$form['submit'] = array(
        
'#type' => 'submit'
        
'#value' => t('Сохранить'),
        
'#ajax' => array(
          
'callback' => 'sthelp_form_change_balance_submit',
          
'wrapper' => 'replace_textfield_div',
         ),
    );
    
    return 
$form;
}
function 
sthelp_form_change_balance_submit($form, &$form_state){
...
    return 
'Выполнено';
}
?>

Единственное что, это функция tratata. Она саму форму тоже через аджакс отдает а не просто через print. Но, думаю, это не суть.