11:04:33)Mapleを利用した掲示板作成?11月から入社した小沼です。現在研修中でPHPの勉強をしています。PHPのフレームワークであるMapleと、javascriptのライブラリであるprototype.jsを利用し、掲示板を作成しました。そこで得たノウハウなどをここに記述していきます。システム構成など設計情報はこちらに記述してあります。†インストールの方法は以下の2種類があります。詳細はリンク先を参照してください。†インストールを行うためには、テンプレートエンジンのSmartyかHTML_Template_Flexyが必要です。どちらかがインストールされていないと、Mapleが動作しないどころか、Mapleのインストールすらできません。†Mapleの開発においてはMapleコマンドを使用します。...といった形です。実行すると、雛形となるディレクトリとファイルが自動生成されます。自動生成されたファイルは、それ自体ですでに実行可能な状態となっていますが、中身の処理が何も記述されていません。それぞれの要件にあった形に処理を記述していくことになります。Railsにおけるrailsコマンドみたいなものだと思います。†テンプレート(画面)からアクションクラス(moduleディレクトリ以下にできるクラス)のメンバ変数にアクセスすることができます。}}テンプレート画面からは以下のように記述することで、値を取得できます。value="{$action.val1}">逆に、画面でサブミットした値をアクションクラスで取得するためには、テンプレート画面に以下のように記述します。value="">すると、アクションクラスのval1というメンバ変数に、サブミットされた値が設定されます。†アクションチェーンというのは複数のアクションを連続して実行することです。今回作った掲示板では、新規投稿を行ったときに以下の二つのアクションをチェーンさせています。submit(投稿されたデータをDBに登録するアクション)display(DBに登録されているデータを表示するアクション)方法としては、チェーン元のアクションの遷移先に、チェーン先のアクションを設定するだけです。今回作った例では、submitアクションと同階層にあるmaple.iniを以下のように記述しました。"action:display以前どこかでアクションチェーンはあまり使用しないほうがいいという記述を呼んだ記憶があります(確かStrutsインアクション)。理由としては、アクションをチェーンさせたくなるのは、アクションにロジックが記述されてあるから。そのため重複したコードを書かないために、アクションをチェーンさせたくなる。ロジックが適切にモジュール化されていれば、アクションをチェーンさせなくても、一つのアクション内で複数のロジックを呼び出すことで、重複するコードを書かなくても対応できるはず。いうことだったと思います。個人的にはアクションチェーンが有効な場合もあると思います。上のような観点もあるということで、チェーンで実装する前に、本当にそうするのが最善か、ロジックが適切に分割できていないのではないか、ということをもう一度検討した方が宵良いのかもしれません。※個人的なことですが、私はアクションチェーンを実装している最中以下のエラーに苦しみました。db「DBクラスを再定義できません」ということでしょうか。結局require('DB.php')とやっている箇所をrequire_once('DB.php')とすることで直りました。アクションチェーンを使ったことで、一回の動作の中で2回require('DB.php')がおこなわれるようになったことが原因と思われます。requrieの存在価値がいまいち分かりません。入力項目に対しておこなうチェックもmaple.iniに記述します。今回の掲示板では新規投稿時に、必須チェックを行うように設定しました。maple.iniの内容です。required"nameやmessageと書かれているところが、入力チェック対象の項目です。これは画面上入力項目のname属性と対応します。次のrequiredと書かれているのが、チェック方法です。requiredの他に、maxLengthやdateなどがあります。1と書かれているところはストッパーです。1のほかに0が指定できます。ストッパーが1になっている入力チェックに引っかかった場合、以降のその項目に対する入力チェックをおこないません。requiredとなっているところはエラーメッセージです。エラーメッセージは以下のように記述することで、画面に表示させることができます。color="#ff0000">{$message}</font><br>{/foreach}入力チェックについての詳細はここを参照してください。http://kunit.jp/maple/wiki/index.php?reference%2Fjp#p8dd4622必須チェック以外にもmaxlenghtのチェックなどいろいろあるようです。Validateアクションを拡張することで、新しい入力チェックをカスタマイズすることもできるようです。今回の研修ではページング部分(前のページや次のページに移動する機能)にAjaxを使用しました。Ajax()の開発においてはその名称の通りjavascriptが中心となります。ここに全てのjavascriptソースを引用します。);}今回のjavascriptの中で中心となる関数です。ページ番号を引数に取り、サーバにリクエストを発行し、その結果(該当するページのHTML)を取得し画面に表示します。prototype.jsのAjax.Updaterを使用しています。1);}「次へ」ボタンが押されたときに呼ばれる関数です。現在のページ番号に1を加えた値でgetArticles()を呼び出しています。1);}「前へ」ボタンが押されたときに呼ばれる関数です。現在のページ番号に1を引いた値でgetArticles()を呼び出しています。Number($F('page_num'));}ページ番号を取得する関数です。prototype.jsに定義されている関数$F()を使用して、画面上のidが"page_num"である要素の値を取得しています。