Dreamweaverのテンプレート管理とPHPのテンプレート管理
Dreamweaverのテンプレート機能はすごく便利ですが、最近主流のデザインを再現する場合は一つのテンプレートで管理するのは難しい印象があります。 もちろんDreamweaverのテンプレート機能はそのような場面にも対応できるのですが、PHPでテンプレート部分を記述してインクルードしたほうが楽なんじゃないの?と思っています。
特に小規模サイトの場合はDreamweaverのテンプレート機能を使っていてもそんなに不便を感じませんが数十、数百というページを管理する場合テンプレート箇所に変更があればテンプレートを走らせなおして全ページアップロードしなくてはなりません。
まぁ数百ならCMSを使うのだろうとは思いますが、PHP製のテンプレートなら該当のPHPファイルだけ変更すれば大丈夫なので、とても手軽です。というわけでPHPのテンプレートをなるべく汎用的に考えてみました。
タイトルやキーワード、ディスクリプションのメタ情報は一枚のファイルで管理したいので現在いるディレクトリを判定してheadの各箇所に挿入するような処理を入れます。
1 2 3 |
//config.php $path = $_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']; $dir = basename(dirname($path)); |
$dirに現在のディレクトリが代入されました。$dirと配列のディレクトリの内容が一致したら各配列の内容が各変数に代入されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
//config.php $arr[] = $index = array( "example.com",//ディレクトリ "ページタイトル",//ページタイトル "キーワード",//キーワード "ディスクリプション"//ディスクリプション ); foreach ($arr as $value) { if ($dir == $value[0]) { $current = $value[0]; $page_title = $value[1]; $keyword = $value[2]; $disc = $value[3]; } } |
配列のディレクトリが代入された$currentと現在のディレクトリが一致したら以降の処理が実行されメタ情報に値が挿入されます。
1 2 3 4 5 |
<?php if ($dir == $current): ?> <title><?php echo $page_title; ?></title> <meta name="keywords" content="<?php echo $keyword; ?>" /> <meta name="description" content="<?php echo $disc; ?>" /> <?php endif; ?> |
これで管理ファイル(config.php)一枚でメタ情報が管理できるようになりました。config.phpの$arrをコピーすればページを増やしていけます。もうちょっと実用的に変更したconfig.phpとhader.phpのソースを公開しておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
//header.php <?php include "config.php" ?>//設定ファイルの読み込み <!doctype html> <html dir="ltr" lang="ja"> <head> <meta charset="UTF-8" /> <?php if ($dir == $current): ?> <title><?php if($current == $index[0]){echo $page_title;}else{echo $page_title; echo $site_title; }?></title> //タイトルはトップページと中ページを違うものにしました。 <meta name="keywords" content="<?php echo $keyword; ?>" /> <?php if ($disc): ?> //ディスクリは書けない場合は表示しません。 <meta name="description" content="<?php echo $disc; ?>" /> <?php else: ?> <?php endif; ?> <?php endif; ?> <link rel="stylesheet" type="text/css" media="all" href="<?php echo $url; ?>/css/styles.css" /> </head> //config.php <?php $url = "http://example.com"; $path = $_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']; $dir = basename(dirname($path)); //サイトの共通設定 $site_title = "サイトタイトル"; $site_key = "共通のキーワード"; //各ページの設定 $arr[] = $index = array( "example.com",//ディレクトリ "ページタイトル",//ページタイトル null,//キーワード共通の場合はnull "インデックスページのディスクリプション"//ディスクリプション ); $arr[] = $contents = array( "contents", "コンテンツ|", "コンテンツのキーワード", "コンテンツのディスクリプション" ); foreach ($arr as $value) { if ($dir == $value[0]) { $current = $value[0]; $page_title = $value[1]; $keyword = $value[2]; $disc = $value[3]; if (!isset($keyword)) { $keyword = $site_key; } } } ?> |
ディレクトリにリンクする前提になっています。もしCMS化することになってもURLを変更するリスク軽減のためです。ファイル単位にする場合は$dirを$_SERVER['PHP_SELF']に置き換えて各ページのディレクトリにファイル名まで記載すればOKだと思います。
- 2013年12月10日火曜日
- :Naruhiko Wakai
コメントを残す