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

Прислано: overall@drupal.org

ср, 20/05/2009 - 09: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 в ср, 20/05/2009 - 10:18.

никак


Опубликовано romass в ср, 20/05/2009 - 11:18.

variable_set()


Опубликовано neochief в ср, 20/05/2009 - 11:38.

"romass" написал(а):

variable_set()

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


Опубликовано jeehadina в ср, 20/05/2009 - 11:43.

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


Опубликовано romass в ср, 20/05/2009 - 12:34.

Согласен. Зачем эти финты ушами, если можно передать данные вместе с формой =)


Опубликовано gorr в ср, 20/05/2009 - 13:15.

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


Опубликовано overall@drupal.org в ср, 20/05/2009 - 13: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 в ср, 20/05/2009 - 20:20.

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

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


Опубликовано overall@drupal.org в чт, 21/05/2009 - 08:48.

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


Новое на сайте

Ссылки партнёров