Как присвоить элементу формы более одного callback?

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

Аватар пользователя Lord of Cats Lord of Cats 13 апреля 2018 в 9:54

Добрый день.

Подскажите, пожалуйста, для одного элемента формы можно ли применять более одного callback?

Пример кода в hook_form:

<?php
$form
['submit'] = array(
    
'#type' => 'submit',
    
'#value' => 'Submit',
    
'#ajax' => array(
        
'callback' => 'my_callback_one'
    
)
);
?>

Функция в модуле:

<?php
/**
 * Callback-функция
 */
function my_callback_one($form, &$form_state) {
    
$commands[] = ajax_command_alert('RUN CALLBACK ONE');
    return array(
'#type' => 'ajax''#commands' => $commands);
}
?>

Можно добавить к уже существующему callback еще один?

Лучший ответ

Комментарии

Аватар пользователя Lord of Cats Lord of Cats 13 апреля 2018 в 13:01

Ну это понятно, что так можно. Я имею в виду, что можно ли после выполнения функции my_callback_one выполнить другую функцию, например, my_callback_two.

Аватар пользователя bumble bumble 13 апреля 2018 в 14:18
<?php
/**
 * Callback-функция
 */
function my_callback_one($form$form_state) {
    
// Вызывайте любой другой коллбек
    
$data my_callback_two($form$form_state);
 
    
$commands[] = ajax_command_alert('RUN CALLBACK ONE');
    return array(
'#type' => 'ajax''#commands' => $commands);
}
?>
Аватар пользователя Lord of Cats Lord of Cats 13 апреля 2018 в 16:31

Мне нужно просто чтобы он выполнился вслед за первым и выполнил какие-то Ajax-команды. То есть первый коллбек выполнил какие то Ajax-команды, затем после него пошел второй коллбек выполнятся со своим набором Ajax-команд.

Аватар пользователя bumble bumble 13 апреля 2018 в 16:45

Ну, на то что Вы спросили (про "выполнение более одной процедуры") - Вам написали что можно, и написали как.
Дело в том, что Вы, буквально, хотите возвращать несколько элементов, в месте, где должен возвращаться один. И это нонсенс.

Аватар пользователя Pety Pety 14 апреля 2018 в 8:17

> Но теперь мне надо её как то вызвать после того как изменилось значение в текстовом поле.
Вам надо использовать или ajax framework или js событие

https://www.drupal.org/docs/7/api/javascript-api/ajax-forms-in-drupal-7
https://api.drupal.org/api/drupal/includes%21ajax.inc/group/ajax_command...