smartyとCakePHP

PHPの基礎を勉強するのはとても大切だと思うけど、ここでの勉強はいきなりフレームワークを使ってみようと思う。この勉強方法には問題がいずれ生じるかもしれないけど、とりあえずそういう危険は考えず、とにかく勉強してみようと思う。

とりあえずの目的

ただだらだら勉強するのではなく、毎回『これをする!』という目標というか目的を決めて勉強及びファイル作成をしていこうと思う。
そんな今回の目的は、静的ページのテンプレート作成。DBは使用しない。ブログシステムのような、header、footer、sidebar、などを部品化してページが遷移しても再利用できるような仕組みを作る。そして、それができたら、以下の順に、目標を定めてステップアップして行こうとおもう。

  1. とりあえず1ページの静的ページを出力させる。
  2. 部品化しているテンプレートを利用して複数ページの作成。
  3. 部品化したところの、ページが遷移する度に微妙に変わってくる部分をページ事に変化させる。(例:sidebarにグローバルナビがあるとき、表示しているページの部分に該当するナビを変化させるなど。)

とりあえず以上の3ステップ。

まずすること

とりあえずすることとしたら、以上の目標を達成するために、どのフレームワークを利用するのか的を絞るというところ。個人的には会社でもよく利用されるsmartyか、今利用者が増えているCakePHPのどちらか。ここで迷っててもしかたないので、導入はどちらもやってみることにしてみた。

CakePHPの導入

サイトへ行き、ダウンロードし(一応1.2版)、ディレクトリに入れるまでは問題なくできた。DBの設定やセキュリティの関係みたいなのを直すところもできた。そこまでは・・・
問題はその先。どのようなファイル構造にして、どのようなことをしたらページが表示されるのかという仕組みがわからない。コントローラーとかの理解ができていないからかもしれないので、そこの勉強はまた次回。

smartyの導入

CakePHP同様にディレクトリ構造の作成までは同じくらい楽にできた。今回の目標達成には、CakePHPよりも設定が必要なくここまで終了。とりあえずの出力では、ドキュメント通りに作成していったら表示できた。つまりsmartyでは第一段階中間終了。最終終了はとりあえずデザインも完成させたページとして出力させるまで。

作成したソース

■index.php

<?php
define('SMARTY_DIR', '省略');
require_once(SMARTY_DIR . 'Smarty.class.php');

$smarty = new Smarty();

$smarty->template_dir = 'templates/';
$smarty->compile_dir  = 'templates_c/';

$smarty->assign('name','テストネーム');

$smarty->display('index.tpl');

?>

■index.tpl

{include file = 'header.tpl'}
{include file = 'footer.tpl'}

※今回は時間省略のため、headerとfooterの二つのtplで実験。
 中は普通のXHTML
いじょ〜。
phpの最初のSmarty.class.phpを読みにいくところ、
一行でまとめられるようだったけど、
とりあえず今回は上記の例で作ってみた。

smartyでのちょっとした疑問。

例えばindex.tplを作成し、そこからheader.tplとか他のテンプレを読み込みにいくと思うのだけど、その時利用する関数(?)はincludeでいいのだろうか?
とりあえず{include file='header.tpl';}のようにして読み込んでいっているけど、includeじゃないと駄目なのだろうか?そして、$template_dirって使うところあるのだろうか?
それと今回はconfigs/とcache/のディレクトリ作らなかったけれど、これって必ず必要なのだろうか?うちのSEの作った構造には無かったので省略してみた。あったほうがいいのだろうか?それと、あったらあったで、どのような役割になるのだろうか?
これらは現在のちょっとした疑問だ。
さらに言うなれば、ステップ2までは頭の中に表示のロジックが出来上がっているが、問題はステップ3。どのような変数とか機能を使えば分岐できるのだろう?今自分のなかでの最大の難関かなと思う。

ここまでの反省と次回の予定

  • CakePHPの用語とか役割とかそういうのをもう少し勉強。
  • CakePHPでどのような作りをしたらページが出力できるか。
  • ページ遷移した時にのテンプレでの部分分岐みたいなのをどのようにしたらいいのか?

以上のことを次回以降勉強して行こうと思う。
今回のテンプレート化が早くできるのであれば、今後のサイト制作にも活かせそうだ。CMS使えば速い話だろうけど、CMSカスタマイズだとPHPの勉強にちょっとならない部分もあるので、今回からはなるべく自前で作りたい。案件によっては、CMSも必要になってくるので一概には言えないが、静的ページ主体であれば今回のようにテンプレ化させたい。