Привет всем.
Как можно передать параметры 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,
),
?>
Комментарии
никак
variable_set()
Это нехороший совет. Это то же самое что куки и сессия — вы можете получить проблемы при паралельном доступе других пользователей или между отдельными открытыми страницами. Классическая проблема распараллеливания. Нужно умещаться в доступные переменные, либо передавать все в форме (вы же пост отправляете).
я недавно с таким сталкивался.
была идея хранить переменную в $user обьекте.
но это конечно не гуд, но выбора небыло.
как итог - отказался. при каждом кейапе нужно было запоминать данные. не всегда user_save данные сохнраняла...
так что, как писал neocheif, по одежке протягивай ножки.
Согласен. Зачем эти финты ушами, если можно передать данные вместе с формой
Если хочется именно через $_GET передавать, то не лучше ли свой ajax обработчик навесить на сабмит формы, а не использовать ahah?
Да, сам потом додумал на счет того, что может передавать данные в форме, ведь она вроде как с каждым 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'];
//...
}
?>
еще можно так $form['#some_var'] = 123;
и потом получать так же, из $form['#some_var'], главное чтобы индекс переменной начинался с #
Ага, а еще наверное можно с помощью hidden значений тоже это делать. И при том они наверное будет сразу в $_POST появляться и не надо будет form_get_cache делать, но только это менее безопасно, если данные секретные.