[РЕШЕНО] Как передать параметры AHAH обработчику

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

Аватар пользователя overall@drupal.org overall@drupal.org 20 мая 2009 в 13:11

Привет всем.
Как можно передать параметры AHAH обработчику (функция заданная в 'page callback' в hook_menu для AHAH 'path'), но не используя сам путь для передачи параметров, как ...
<?php
'edit' => array(
'#type' => 'submit',
'#value' => t('Edit'),
'#attributes' => array(),
'#ahah' => array(
'path' => 'mymodule/ahah/edit/'.$param1.'/'.$param2.'/'.$param3.'/'.$param4, // ...ЗДЕСЬ!
'wrapper' => $wrapper,
'method' => 'replace',
'effect' => 'fade',
),
'#weight' => 1,
),
?>

Комментарии

Аватар пользователя neochief neochief 20 мая 2009 в 15:38

"romass" wrote:
variable_set()

Это нехороший совет. Это то же самое что куки и сессия — вы можете получить проблемы при паралельном доступе других пользователей или между отдельными открытыми страницами. Классическая проблема распараллеливания. Нужно умещаться в доступные переменные, либо передавать все в форме (вы же пост отправляете).

Аватар пользователя jeehadina jeehadina 20 мая 2009 в 15:43

я недавно с таким сталкивался.
была идея хранить переменную в $user обьекте.
но это конечно не гуд, но выбора небыло.
как итог - отказался. при каждом кейапе нужно было запоминать данные. не всегда user_save данные сохнраняла...
так что, как писал neocheif, по одежке протягивай ножки.

Аватар пользователя gorr gorr 20 мая 2009 в 17:15

Если хочется именно через $_GET передавать, то не лучше ли свой ajax обработчик навесить на сабмит формы, а не использовать ahah?

Аватар пользователя overall@drupal.org overall@drupal.org 20 мая 2009 в 17:24

Да, сам потом додумал на счет того, что может передавать данные в форме, ведь она вроде как с каждым AHAH запросом целиком отправляется.
Но так как с Form API плохо знаком то встала проблема откуда эти данные получать, ибо сами данные непосредственно не передаются, передаются лишь какие-то идентификаторы.
В итоге отыскал ответ.
Вот реализация:
<?php
$form = array(
'params' => array(
'#type' => 'value',
'#value' => $params,
),
'edit' => array(
'#type' => 'submit',
'#value' => t('Edit'),
'#ahah' => array(
'path' => 'mymodule/ahah/edit/',
'wrapper' => $wrapper,
'method' => 'replace',
'effect' => 'fade',
),
),
//...
);
?>

<?php
function mymodule_ahah_edit()
{
$form_state = array();
$form = form_get_cache($_POST['form_build_id'], $form_state);
$params = $form['params']['#value'];

//...
}
?>

Аватар пользователя neochief neochief 21 мая 2009 в 0:20

еще можно так $form['#some_var'] = 123;

и потом получать так же, из $form['#some_var'], главное чтобы индекс переменной начинался с #

Аватар пользователя overall@drupal.org overall@drupal.org 21 мая 2009 в 12:48

Ага, а еще наверное можно с помощью hidden значений тоже это делать. И при том они наверное будет сразу в $_POST появляться и не надо будет form_get_cache делать, но только это менее безопасно, если данные секретные.