not president's blog

脳直で書きます。自分が覚えたい事を書いているだけです。

フォームAPIの続き6

Ajaxを使用したフォーム要素の変更

Drupal6ではフォーム要素のうち、AHAHプロパティを
使うが、Drupal7ではAjaxを使用するようになっている。
以下の例では、Ajaxを使用してSubmitボタン押下時に
アニメーションを動かすようにする。

アニメアイコンを追加

1.Formの定義

<?php
/**
 * Hook_menuの実装
 */
 function ajax_test_menu(){
     $items['ajax_test'] = array(
        'title' => 'Ajaxのテスト',
        'page callback' => 'drupal_get_form',
        'page arguments' => array('ajax_test_form'),
        'access arguments' => array('access content'),
     );
     $items['ajax_test/fade_js'] = array(
        'page callback' => 'ajax_test_fade_js',
        'type' => MENU_CALLBACK,
        'access arguments' => array('access content'),
     );
     return $items;
 }
 
 /**
  * フォーム定義
  */
  function ajax_test_form(){
      $form['target'] = array(
        '#type' => 'markup',
        '#prefix' => '<div id="target">',
        '#markup' => t('ボタンをクリックすると幸せな気分になれますが、それは幻想です'),
        '#suffix' => '</div>',
      );
      $form['submit'] = array(
        '#type' => 'submit',
        '#value' => t('クリックしてね!'),
        '#ajax' => array(
            'path' => 'ajax_test/fade_js',
            'wrapper' => 'target',
            'method' => 'replace',
            'effect' => 'fade',
        )
      );
   
      return $form;
  }
?>

2.コールバック関数を定義

<?php
/**
 * Ajaxを追加するためのコールバック
 */
 function ajax_test_fade_js(){
     $output = t('FADE!');
     drupal_json_output(array('status' => TRUE,'data' => $output));
 }
?>

これを表示して、Submitを押すと、
f:id:orenodrupal:20150427220934p:plain f:id:orenodrupal:20150427220944p:plain アニメアイコンが表示される。
次回でフォームAPIは最終回の予定です。