#ajax форма Drupal 7

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

Аватар пользователя Galchonok Galchonok 11 августа 2011 в 17:41

Всем привет!
Есть ajax-форма отправки данных :

<?php
    $form 
= array();

    

$form['percent'] = array(
        
'#weight' => 0,
    );

    

$form['percent']['percent'] = array(
        
'#type' => 'textfield',
        
'#maxlength' => 3,
        
'#default_value' => '0%',
    );
    
$form['percent']['submit'] = array(
        
'#type' => 'submit',
        
'#value' => 'Изменить',
        
'#ajax' => array(
            
'callback' => 'ajax_set_percent_',
            
'wrapper' => 'add_cart',
            
'method' => 'append',
        ),
    );
    
/*
    $form['percent']['submit_'] = array(
        '#type' => 'link',
        '#title' => t('Изменить'),
        '#ajax' => array(
            'callback' => 'ajax_set_percent_',
            'wrapper' => 'add_cart',
            'method' => 'html',
        ),
    );*/
?>

В низу закоментирован код для отправки формы по ссылке.

Как сделать, так что бы форма отправлялась по нажатию на ссылку, а не по кнопке?? Вот только ajax подгружает данные не из функции а по ссылке....

Комментарии

Аватар пользователя Alex Bacart Alex Bacart 11 августа 2011 в 18:00

То, что у вас закомментировано никогда не будет работать.
http://api.drupal.org/api/drupal/developer--topics--forms_api_reference....
Сабмит могут посылать только button, image_button и submit.
Вообще аджакс-ссылки работают по другому принципу. Через hook_menu создаете коллбэк и потом вешаете его на линк. Пример.

Аватар пользователя Alex Bacart Alex Bacart 11 августа 2011 в 18:03

Не уверен, что получится как-то красиво засабмитить форму таким образом. Как вариант, можно сделать image_button и замаскировать его под ссылку.

Аватар пользователя Galchonok Galchonok 11 августа 2011 в 18:22

"Vydrin_AP" wrote:
Как вариант, можно сделать image_button и замаскировать его под ссылку.

Мда, некрасиво..... Но может быть это вариант.

Аватар пользователя Alex Bacart Alex Bacart 12 августа 2011 в 20:10

Возникла идея!
А что если сделать линк, а в его коллбеке:

$commands[] = ajax_command_invoke('#form-id', 'submit');
return array('#type' => 'ajax', '#commands' => $commands);

Должно сработать!

Аватар пользователя FORTIS FORTIS 21 сентября 2011 в 2:16

Quote:

#ajax['trigger_as']

Description: For a non-submit, non-button element,
allows selection of the submit element which will
be activated when the element is triggered.
For example, if a select element is ajax-enabled,
and it changes, an element identified by
#ajax['trigger_as']['name'] or #ajax['trigger_as']['value']
will be used as the triggering element, especially for button-level validation.