私はPHPで以下のようにしています。
//side_menu.php
function sideMenu($contents=""){
if($contents=="home"){
echo (HOME選択用画像)
}else{
echo (HOME通常用画像)
}
if($contents=="inquiry"){
echo (お問い合わせ選択用画像)
}else{
echo (お問い合わせ通常用画像)
}
}
// 表示箇所
sideMenu("home");
これはこれで問題ないのですが、もう少しわかりやすくできないものかとも思います。
PHPに限らず、「私はこうしています」というご意見をいただければと思います。
function view($action){
switch($action){
case 'inquiry':
require('view/inquiry.php');
break;
case 'home':
default:
require('view/home.php');
default:
}
}
view('home');
こんな感じでやってます。 ページ毎に異なる部分を作らずに、ページ毎にページ全体のHTMLをviewとしてベタに作っています。 viewが冗長になる反面、条件判断の回数が減らせて応答が向上したり、特定のページを一気に差し替えたりするのは楽になります。
規模が大きくなる場合は、XMLであるとかでactionとreuireするファイルの対応を外部に持ちます。
私はプログラムとデザインの分離をしているので、プログラムが直接HTMLを出力することはありません。
ではどのようにしているかですが、ナビゲーションは共通のテンプレート利用しています。
その中で「選択されているか」のフラグ値を渡し、その部分だけ表示が変わるようになっています。
テンプレートを通常のPHPで書いた場合ということでサンプルを記述致します。
common-navi.html --------------------------- <ul> <?php if ($selectedNav['home']):?> <li><img src="HOME選択画像" /></li> <?php else:?> <li><img src="HOME通常画像" /></li> <?php endif;?> <?php if ($selectedNav['inquiry']):?> <li><img src="お問い合わせ選択画像" /></li> <?php else:?> <li><img src="お問い合わせ通常画像" /></li> <?php endif;?> </ul> --------------------------------------------
このテンプレートを利用するときは
<body> <div id="container"> <div id="nav"> <?php include 'common-nav.html';?> </div> </body>
として読み込みます。
$selectedNavは、テンプレートを読み込む前に指定するのですよね?
私は関数でまとめることが多いのですが、確かにこの方法ですと、デザインはわかりやすいですね。
各メニューの内容は別ファイルにするのですね。この方法も良さそうですね。参考にさせていただきます。