サイトを構築するときに、メニュー(ナビゲーション)など、ページごとに変更する箇所は、プログラムでまとめられていると思います。


私はPHPで以下のようにしています。

//side_menu.php
function sideMenu($contents=""){
if($contents=="home"){
echo (HOME選択用画像)
}else{
echo (HOME通常用画像)
}
if($contents=="inquiry"){
echo (お問い合わせ選択用画像)
}else{
echo (お問い合わせ通常用画像)
}
}
// 表示箇所
sideMenu("home");


これはこれで問題ないのですが、もう少しわかりやすくできないものかとも思います。

PHPに限らず、「私はこうしています」というご意見をいただければと思います。

回答の条件
  • 1人1回まで
  • 登録:2007/07/19 15:53:56
  • 終了:2007/07/26 15:55:22

回答(2件)

id:studioes No.1

studioes回答回数522ベストアンサー獲得回数612007/07/19 16:19:49

ポイント35pt

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するファイルの対応を外部に持ちます。

id:kt26

各メニューの内容は別ファイルにするのですね。この方法も良さそうですね。参考にさせていただきます。

2007/07/19 16:51:34
id:vector_xenon No.2

vector回答回数113ベストアンサー獲得回数42007/07/19 17:02:28

ポイント35pt

私はプログラムとデザインの分離をしているので、プログラムが直接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>

として読み込みます。

id:kt26

$selectedNavは、テンプレートを読み込む前に指定するのですよね?

私は関数でまとめることが多いのですが、確かにこの方法ですと、デザインはわかりやすいですね。

2007/07/19 17:15:34

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません