フォームAPIの続き2
テーマフォーム(theme_form)関数の使用
フォームを好き勝手に変更(位置や内容の追加変更など)
するためのもの。
具体的には位置移動くらいしかわかってません。
まずは前回?定義したフォーム
<?php /** * フォームを定義する */ function simpleform_nameform(){ $form['user_name'] = array( '#title' => t('あなたの名前'), '#type' => 'textfield', '#description' => t('あなたの名前を入力して下さい') ); $form['animal'] = array( '#prefix' => '<hr />' ,'#title' => t('動物') ,'#type' => 'fieldset' ,'#collapsible' => TRUE ,'#collapsed' => FALSE ,'#description' => t('ここには動物しかいない!') ,'#suffix' => '<div class="privacy-warning">' . t('この情報は公共性のある情報だ') . '</div>' ); $form['submit'] = array( '#type' => 'submit', '#value' => t('Submit') ); return $form; } ?>
フォームは要素の順番に表示されるので、出力された時は以下のように見える。 そこで、テーマフォームを使用して、要素の位置を変更する。
<?php /** * テーマ関数の使用 */ function theme_simpleform_nameform($form){ $variables['element'] = $form; // 動物フィールドを上に持ってくる(divは別にいらない) $output = '<div>' . drupal_render($form['animal']).'</div>'; $output .= drupal_render($form['user_name']); $output .= drupal_render($form['submit']); $output .= drupal_render($form['simpleform_nameform']); $variables['element']['#children'] = $output; return theme_form($variables); } ?>
そして表示する際に、このテーマフォーム関数を使う。
<?php /** * メニューコールバック */ function simpleform_page(){ return theme_simpleform_nameform($drupal_get_form('simpleform_nameform')); } ?>
するとこうなる。
ここまでやるのにずいぶん苦労しました・・・。
テーマフォーム関数を作っても、表示する際(form_page関数内のReturn時)に
テーマフォーム関数を呼んでやらなかったせいで、何度やってもフォームが
表示されなかった・・・。(当然ですが)
参考は以下
theme_form | form.inc | Drupal 7 | Drupal API
続きは次回。今回参考書1ページも進んでいない。