Zend_Controller + Smarty3 アプリでデザイナーさんでも静的な汎用ページを増やせるようにする

たまにはプログラマらしく本職のphpソースでも晒したいと思います。

ZendFramework-logo

ZendFramework1のコントローラーで制御されたアプリは
Zend_Controller_Actionを継承したクラスとAction()を追加していくので
デザイナーが自分でページを追加しようと思うとphpファイルの編集が入るのでハードルが高すぎます。

なのでtplファイルを置いたらそれがページとして認識できるように汎用的なソースを組みます。

ルーターの設定

***.htmlのように擬似静的に振舞うためいろいろやります。

ルーター設定ファイル

ルーター設定に使用できるフォーマットは各種ありますが自分はyamlファイルを使うことが多いです。

routes.yaml

こんな感じで定義しておきます。
(.+)\.htmlの条件のときはPageController.phpindexAction()、パラメータとしてpagenameに.htmlの呼び出したファイル名が渡されます。

Bootstrap.php

Bootstrap.phpにてルーターの設定をしておきます。
ちょっと脱線しますがroutes.yamlの解析は負荷がかなり高いのでZend_Cacheを使って解析結果を保存しておきます。

$frontendOptions['master_file']のファイル更新時間をキャッシュトリガーにしてます。

コントローラー

PageController.php

よーするに、***.htmlと同名の***.tplが存在しなければ404処理をして、
存在してたらsetScriptActionしています。

フォルダ単位や階層処理も含めたい場合は$this->_helper->viewRenderer->setNoController();を使ってビューへルーパーのコントローラー名設定を解除しておきます。

あぁ・・肝心のZendFramewrok+Smartyのロジックが抜けてますね。
この解説は長くなりそうなのでまた今度やります。

テンプレート

***.tpl

$thisとはZend_Viewヘルパーをassignしたものです。

コントローラー側ではタイトルタグなどの設定ができないので
テンプレート側にてビューヘルパーメソッドを使ってページタイトルや、読み込みたいスタイルシートファイルなどの設定をしちゃいます。

ビューヘルパー以外の制御をしたいときはmodelなんかをコントローラーでassignしておけばおk。
または、自分がよく使う手は、Smartyのプラグインで必要になる関数をつくっておく。

$thisメソッドの返り値を$zfで取得していますが、ただのダミーです。
取得しないとその場でechoされちゃったので、こうしています。

ルーター名(page)のreverse%s.htmlを設定してあるので
$this->url()を使ってurlを作成することが可能です。

その他

サイトマップやメニューなども制御したいときはZend_Navigationを組み合わせてあげると手動のCMSっぽくできちゃいます。
・・・なんていい加減な説明(汗)

いろいろ省略してるのでコピペでは使えないソースですが、
こんな感じで上手に組んであげれば、静的ページ追加更新作業が楽になるので
デザイナーさんに仕事のパスが・・やりやすくなるといいね(笑)

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL