サンプルページ †
初期状態の理解 †
初期配置が終了した状態でのフォルダー、ファイルを見てみましょう。
まず、気になるのはなんといっても index.php ですね。中身は
$frameworkPath='C:\Documents and Settings\felix-labo\framework\prado.php';
// The following directory checks may be removed if performance is required
$basePath=dirname(__FILE__);
$assetsPath=$basePath.'/assets';
$runtimePath=$basePath.'/protected/runtime';
if(!is_file($frameworkPath))
die("Unable to find prado framework path $frameworkPath.");
if(!is_writable($assetsPath))
die("Please make sure that the directory $assetsPath is writable by Web server process.");
if(!is_writable($runtimePath))
die("Please make sure that the directory $runtimePath is writable by Web server process.");
require_once($frameworkPath);
$application=new TApplication;
$application->run();
案の定 Welcome to PRADO! などとはかかれていませんね。
1行目は、PRADOフレームワーク、すなわち framework のディレクトリへのパスです。このように、絶対パスだと、ローカルホストではよいですが公開した途端にエラーとなることは明白なので、
$basePath=dirname(__FILE__);
$frameworkPath=$basePath.'../../framework\prado.php';
という様な形に直しておく必要があります。(3行目と順番を少し入れ替えてあります。)
その他は現時点ではあまり気にする必要がありませんが、公開する際には、各々のディレクトリは下記の様にモード設定しておく必要があります。
- framework 700
- sample 644
- asset 755
- protected 700
- protected/runtime 755
簡単にフォルダー構成を解説すると PRADOは、protected に設置されているコードをframeworkが処理を行い、sample/?page=(pagesディレクトリに設置されているページ名)という感じで呼び出します。コードが書かれているprotected 内は外からは見ることも書くこともできず(700の設定のままで)に結果だけを公開できるというセキュリティに優れた構造になっているわけです。
protected/pages を見ると現在できているページは Home.page だけとなります。中身は
<html>
<head>
<title>Welcome to PRADO</title>
</head>
<body>
<h1>Welcome to PRADO!</h1>
</body>
</html>
と初期のページが書かれています。.page という拡張子ですが、これはPRADOにおける ページコンテンツを記述したファイルの拡張子です。記述はご覧の通りHTMLを基本にしています。それでは試しに
ルートURL/sample/?page=Home
という様にアクセスしてみたらどうでしょうか?やっぱり同じように表示されますね。ちなみに、page パラメーターの値は、大文字、小文字の区別がなされます。
application.xml †
pagesディレクトリ下にある application.xml はsample 以下のページすべてに該当する設定を保存してあるファイルです。同様にもうちょっとミクロレベルでの設定ファイルとしてはconfig.xmlというファイルの設定もあります。詳しくはapplication.xmlやconfig.xmlをご覧ください。
application.xmlの中身は、初期状態ではコメント化されている部分が多く、唯一有効そうなのが
<services>
<service id="page" class="TPageService" DefaultPage="Home" />
</services>
という部分です。PRADOのページサービスについてTPageService?が設定されていて、デフォルトがHomeということになっています。application.xmlについてはコードを追加する際にいろいろとカスタマイズが必要となる部分なのですが、いまのところは、sample全体に適応される設定であるという知識があればよいと思います。
Layout.page の設置 †
初期設定のページ Welcome to PRADO! はできましたがこれでは、公開したいページとはいえませんね。一般的な公表に耐えられるページは、以下の図の様にヘッダー、サイドバー、コンテンツ、フッター といった感じに分解されて作られます。
PRADOは、全体のページ構成を.tplという拡張子のページで作成し、各々の区分けの中身がページによって設定されるという作り方をします。.tpl という拡張子のファイルは、.page の亜流の様なもので、書き方は.page と同様にHTMLに非常に近いものです。
- まずページレイアウトを決定する Layout.tpl ファイルを pages ディレクトリに作成します。内部のコードは以下例の様になります。ほとんど通常のHTMLの記述なので直感的に分かり安いとは思います。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" >
<com:THead Title="PRADO Sample">
</com:THead>
<body>
<div class="header">
<h1>サンプル</h1>
<h2>PRADOチュートリアル</h2>
</div>
<div class="page" id="home">
<div id="content">
<com:TContentPlaceHolder ID="content"/>
</div>
</div>
</body>
</html>
<com:THead> タグは、ページの<head></head>に該当する部分を指定するPRADOコントロールです。また、<com:TContendPlaceHolder? ID="content" />というPRADOコントロールには、.page ファイルからコンテンツが挿み込まれてくるコントロールです。この様に、<com: ではじまるタグはPRADOコントロールを挿入するタグであり、.page や .tpl という拡張子のファイルでは、通常のHTMLの中に、PRADO独特のコントロール タグを埋め込むことで書いていくことになります。
- 次にLayout.tplに該当するクラスファイルLayout.phpを設置します。通常、.page で終わるコンテンツには対応するクラスファイルは必須ではありませんが、.tpl の拡張子のテンプレートには .php 拡張子のクラスファイルが必要となります。内容は以下の様にクラス宣言だけで後は空でかまいません。
<?php
class Layout extends TTemplateControl
{
}
?>
- pageディレクトリには、application.xml という設定のほか、ディレクトリ内の詳細設定用のファイル config.xml が設置できます。この設定ファイルに、Layout がテンプレートファイルであることを記述します。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<pages MasterClass="Application.pages.Layout" />
</configuration>
- 最後は、肝心の content の内部を埋める内容を Home.page に記載します。現在記載してある内容はすべて消して次の様に書き換えます。
<com:TContent ID="content">
<h1>Welcome to PRADO</h1>
</com:TContent>
以下の様に表示されていれば成功です。
『サンプル』、『PRADOチュートリアル』 の部分は .tpl に記載しており、『Welcome to PRADO』の部分は Home.page から 挟み込まれているわけです。ここまでのファイル構造は以下の図の通りです。
実験的に Home2.page というファイルを作って、以下の様に記載します。
<com:TContent ID="content">
<h1>Home2 のテストです。</h1>
</com:TContent>
テスト結果は、
ルートURL/sample/?page=Home2
を表示してみると分かります。テンプレートファイルに記載されているヘッダー部分はそのままで、『Welcome to PRADO』 が 『Home2 のテストです。』に変わっているのが分かるでしょうか?
この様にページ構成のレイアウトはそのままで、各々のページファイルには、内部のコンテンツだけを記載すれば良いという効率的なつくりとなるわけです。