Простейшая реализация AHAH в Drupal

AHAH в Drupal Пусть необходимо реализовать простейший пример использования AHAH на Drupal-сайте. Пример будет заключаться в изменении текста, содержащегося в нашем div-контейнере. Для решения задачи по аналогии с примером из книги Вандюка напишем модуль.

Меню будет состоять из двух пунктов:

  1. выдача формы с div-контейнером
  2. реализация js-коллбека для AHAH запроса

При реализации учесть что в коде не должно быть строки 'access arguments' => true, . Может послужить возникновению ошибки возникновению ошибки .

  1. /**
  2.  * Implementation of hook_menu().
  3.  */
  4. function stitch_menu() {
  5. $items['stitch'] = array(
  6. 'title' => 'AHAH!',
  7. 'page callback' => 'drupal_get_form',
  8. 'page arguments' => array('stitch_form'),
  9. 'access callback' => TRUE,
  10. );
  11. $items['stitch/message_js'] = array(
  12. 'page callback' => 'stitch_message_js',
  13. 'type' => MENU_CALLBACK,
  14. 'access callback' => TRUE,
  15. );
  16. return $items;
  17. }

Далее реализуется форма с div-контейнером содержащим текст click here и кнопка отправки, при нажатии по которой будет менять текст в div.

  1. /**
  2.  * Implementation of hook_form().
  3.  */
  4. function stitch_form(){
  5. $form['target'] = array(
  6. '#type' => 'markup',
  7. '#prefix' => '<div id="target">',
  8. '#value' => t('click here'),
  9. '#suffix' => '</div>',
  10. );
  11. $form['submit'] = array(
  12. '#type' => 'submit',
  13. '#value' => t('click me'),
  14. '#ahah' => array(
  15. 'event' => 'click',
  16. 'path' => 'stitch/message_js',
  17. 'wrapper' => 'target',
  18. 'effect' => 'fade',
  19. )
  20. );
  21. return $form;
  22. }

Последний шаг реализации модуля - написание js-коллбека, функции отвечающей за изменение текста, без перезагрузки страницы

  1. function stitch_message_js(){
  2. $output = t('CROSS STITCH!');
  3. drupal_json(array('status' => TRUE, 'data' => $output));
  4. }

За помощь в решении спасибо penexe
Раздел в AHAH в АПИ Drupal

Прикрепленный файлРазмер
mymod.info64 байта
mymod.module1009 байтов

поясните на пальцах, как

поясните на пальцах, как практически это сделать? точнее, куда эти куски кода надо вставлять..

Код нужно оформить

Код нужно оформить Друпал-модулем. В данном случае дописать php-тег в файл модуля и файл .info. Оба файла поместить в одноименную папку (в прикрепленных файлах это mymod), а папку в ВАШ-САЙТ/modules
Во вновь прикрепленном примере изменил название модуля со stitch на mymod из соображений собственного удобства. Вы можете его назвать как понравится и, соответственно, переименовать все функции. Путь по которому доступна форма выглядит ВАШ-САЙТ/mypath
По хукам модулей можно посмотреть АПИ Хуки, и связанные темы. А еще лучше посмотреть как устроены существующие модули друпала, часто помогает.

Хочу уточнить

Модули необходимо складывать хотя бы сюда ВАШСАЙТ/sites/all/modules.
Не учите смешивать ядро и отдельные модули.

почему-то в 6 заработала

почему-то в 6 заработала такая форма:

<?php
function my_module_menu() {
 
$items['my_module/form'] = array(
   
'title' => 'My form',
   
'page callback' => 'my_module_form',
   
'access arguments' => array('access content'),
   
'description' => 'My form',
   
'type' => MENU_CALLBACK,
   
'access callback' => true,
  );
 
$items['my_module/form/message_js'] = array(
   
'page callback' => 'my_module_message_js',
   
'type' => MENU_CALLBACK,
   
'access callback' => TRUE,
  );
  return
$items;
}
   
function
my_module_form(){
  return
drupal_get_form('my_module_my_form');
}
function
my_module_my_form($form_state) {

$form['target'] = array(
'#type' => 'markup',
'#prefix' => '<div id="target">',
'#value' => t('click here'),
'#suffix' => '</div>',
);

$form['submit'] = array(
'#type' => 'submit',
'#value' => t('click me'),
'#ahah' => array(
  
'event' => 'click',
  
'path' => 'my_module/form/message_js',
  
'wrapper' => 'target',
  
'effect' => 'fade',
  )
);
return
$form;
}

function
my_module_message_js(){
   
$output = t('TRUE!');
return
drupal_json(array('status' => TRUE, 'data' => $output));
}

?>

Хранение модулей в Drupal

>>Модули необходимо складывать хотя бы сюда ВАШСАЙТ/sites/all/modules.
Комментарий по теме. Прошу извинить за запоздалую публикацию.

Отправить комментарий

CAPTCHA
Этот вопрос задается для того, чтобы выяснить, пьёте ли Вы кофе или рассылаете спам
4 + 10 =
Решите эту простую математическую задачу и введите результат. То есть для 1+3, введите 4.