По мотивам [#61043]Как проще всего реализовать аякс с выдачей json[/#]" и [#59035]Установка фокуса на элемент формы[/#]*.
В итоге, на память себе и может кому понадобится:
В hook_menu:
'type' => MENU_CALLBACK,
'page callback' => 'my_callback',
'delivery callback' => 'ajax_deliver',
'page arguments' => array(1),
'access arguments' => true,
);
Непосредственно callback
{
$commands[] = ajax_command_replace('#ID_'.$fid, 'New value text');
$page = array('#type' => 'ajax', '#commands' => $commands);
# если в форме у нас #type = submit
ajax_deliver($page);
# если у нас #type = link, то return $page;
}
В форме у необходимого элемента прописываем:
'effect' => 'fade',
# нижеперечисленное необходимо для #type = submit
'path' => 'path_to_page/'.$fid,
'event' => 'click',
)
Если тип = link, необходимо ещё указать в аттрибутах класс use-ajax.
К чему все это написано:
не нашел нигде рабочего описания по работе с ajax['path'] вместо ajax['callback']
в случаях $form['element']['#type'] = 'submit' или $form['element']['#type'] = 'link' - немного отличаются вывод и возврат callback.
P.S. сначала нашел решение, потом уже по delivery callback'y нашел [#59035]эту статью[/#] и узнал про разницу в типах #type = submit|link.
Комментарии
Вот еще рабочий вариант:
Еще очень полезным будет знать эти две функции:
<?php
//Валидация и сабмит формы:
//Дальше можно генерировать ответ, на базе обновленных данных.
function my_callback($fid){
list($form, $form_state) = ajax_get_form();
drupal_process_form($form['#form_id'], $form, $form_state);
...
}
?>
Взяты из ajax_form_callback().