フォームAPIの続き3
検証関数内での値保存
検証関数内で値を保存する方法の一つとして、form_set_value関数が使用できる。
まずはフォームで入力ボックスを定義。
<?php /** * フォームを定義する */ function simpleform_nameform(){ // ~ここまで省略 // 検証関数で保存 $form['homestay'] = array( '#title' => t('とまる場所') , '#type' => 'textfield' , '#description' => t('泊まる場所を記す場所') ); // ~ここからも省略 } ?>
上の検証関数を定義する。
値がある時だけ、$form_stateに値を保存する。
<?php /** * フォームを検証する */ function simpleform_nameform_validate($form,&$form_state){ // #parentプロパティに配列を持たせる $form['homestay']['#parents'] = array('homestay'); // 値がある時だけ if(!is_null($form_state['values']['homestay'])) { // 変数に値を入れる $homestay_value = $form_state['values']['homestay']; }else { $homestay_value = 0; } // 値があるときだけ if($homestay_value){ // $form_stateに値を保存 // homestay配列の0番目Valueに値を入れる form_set_value( $form['homestay'] , array( 0 => array( 'value' => $homestay_value ) ) , $form_state); }else{ form_set_error('homestay', t('泊まる場所を書いてくれ')); } } ?>
Submitを定義する。
ここで$form_stateの値が使える。
form_set_valueで保存したデータは
$form_state['values'}配列に入っている。
<?php function simpleform_nameform_submit($form,&$form_state){ // ~ここまで省略 // $form_stateから値を取得 drupal_set_message(t('使ったカギは,%key', array('%key' => $form_state['values']['homestay'][0]['value']))); return; } ?>
これで泊まる場所テキストボックスに値を入れてSubmitすると
こうなる
参考はDrupalAPI
[URL]
フォーム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ページも進んでいない。
正直にも生きたい
Wikipediaから
http://ja.wikipedia.org/wiki/%E6%AD%A3%E7%9B%B4(url)
- 概要
日本人の伝統的な徳目の一つである
フォームAPIの続き
- フォームID
フォームは一意で識別される必要がある。
例として
drupal_get_form('simpleform_nameform')
で定義される。
このフォームIDはHTMLのFormタグのIDとして記述される。
- フィールドセット
HTML内の仕切りをDrupalで実装する。
$fromのTypeにfieldsetを指定すると、仕切りができるようになる。
<?php $form['animal'] = array( '#title' => t('動物') ,'#type' => 'fieldset' ,'#weight' => 5 ,'#collapsible' => TRUE ,'#collapsed' => FALSE ,'#description' => t('ここには動物しかいない!') ); ?>
こんな感じになる。
タイトルを選択すると閉じる。
Android開発環境構築
環境のメモ
とりあえずAndroidアプリプロジェクトが作成可能になるところまで見て、
終了。
こちらを参考にさせていただきました。
http://nobuo-create.net/android-develop/(URL)
NDKについてはこちらを参考にさせていただきました。
(途中であきらめたけど)
http://blog.kotemaru.org/2014/04/02/android-ndk-setup.html(URL)
[補足]
EclipseをDLした後、解凍しようとするとエラーが出た。
が、解凍後正常にEclipseを起動できたため、気にしない。
[補足2]
EclipseにNDKプラグインを入れようとしたが、新規ソフトウェア
インストールでURLを入れても表示されなかった。
→手動でDLしてExe実行すればいいみたい
作成されたフォルダは適当において、
Eclipse→ウィンドウ→設定→Android→NDKでパス指定。
[補足3]
参考サイト(http://blog.kotemaru.org/2014/04/02/android-ndk-setup.html(URL))
を見ながらサンプル実行しても、うまくいかなかった。
→Includeでエラーが出ているので、ライブラリが足りていない?
→新規ソフトウェアインストール時に、
「C/C++ ライブラリーAPIライブラリー~」が出てこなかった。
よくわからないのでいったんNDKはあきらめる。
(Java開発の勉強予定でもあるし・・・)
丁寧に生きたい
Goo辞書から
http://dictionary.goo.ne.jp/leaf/jn2/150309/m0u/
(url)
1 細かいところまで気を配ること。注意深く入念にすること。また、そのさま。「アイロンを―にかける」「壊れやすいので―に扱う」
2 言動が礼儀正しく、配慮が行き届いていること。また、そのさま。丁重(ていちょう)。「―な言葉遣い」
3 文法で、話し手が聞き手に対して敬意を表す言い方。→丁寧語
コトバンクから
https://kotobank.jp/word/%E4%B8%81%E5%AF%A7-574644
(url)
[名・形動]
1 細かいところまで気を配ること。注意深く入念にすること。また、そのさま。「アイロンを―にかける」「壊れやすいので―に扱う」
2 言動が礼儀正しく、配慮が行き届いていること。また、そのさま。丁重(ていちょう)。「―な言葉遣い」
3 文法で、話し手が聞き手に対して敬意を表す言い方。→丁寧語
Wikipediaから
http://ja.wikipedia.org/wiki/%E4%B8%81%E5%AF%A7_(%E5%8D%93%E7%90%83%E9%81%B8%E6%89%8B)
(url)
丁寧(てい ねい、ディン ニン、Ding Ning 1990年6月20日-)は、中国黒竜江省大慶市出身の卓球選手。身長172cm。2014年12月時点の世界ランクは1位。
※参考書のサンプルを編集して載せていましたが、
あんまりよくなさそうなので、一旦消しました。
次回以降、載せるものは考えます。
フォームAPIの始まりの続き
2.フォーム処理について~の続き
⑪フォームのテーマ関数検出
$form['#theme']に既存関数が設定されていれば、それをフォームの
テーマ化に使用する。
なければ、このフォームIDに対尾するエントリをテーマレジストリから
調べる。エントリが検出されれば、フォームIDが$form['#theme']に代入
され、レンダリングする際にそのIDに基づいてテーマ関数を探す。
⑫モジュールによるレンダリング前のフォーム変更
$form['#pre_render']プロパティに定義されたあらゆる関数は、コールされ、
レンダリングされているフォームが渡される。
⑬フォームのレンダリング
drupal_render()をコールする。
1.$childeren要素が定義されているか判定
2.要素が未レンダリングの場合、#typeのデフォルトテーマ関数を
コールする。
3.要素が生成されていて、1つ以上の関数名が#post_renderプロパティ
にある場合は各関数をコールし、コンテンツと要素を渡します。
#post_render関数は、最終的なコンテンツを返す必要がある。
4.コンテンツの先頭に#prefixを、末尾に#suffixを付加し、関数から
それを返します。
→最終的に生成されたHTMLは、drupal_get_form()コール元に返される。
ここまで書いてみるに、内容が全然頭に入ってません。