PHP を使用してナビゲーション メニューをレイアウトし、URL に従ってコンテンツを表示しています。
表示するコンテンツを決定する IF-ELSE スタックに到達しました (必要なクラスやメソッドをロードすることによって)。しかし、これを書くためのより良い方法が必要です..何か提案はありますか?
BreadCrumbs::getCrumb()は、インデックス値に基づいて URL から保存された要素を取得するために使用される静的メソッドです (URI リクエストは「/」で分割され、配列に保存されます)。
... (ArrayHelp::recValueSearch(BreadCrumbs::getCrumb(2), Config::getNavPrimary())は、Config クラスのナビゲーション リストを含む配列に対して URI 要素をチェックします。
BreadCrumbs::setEmptyCrumb(1, "home")は、値が存在しないか有効でない場合にデフォルト値を設定するメソッドを実行します (nav リスト配列内)。
<?php
// set bread crumbs
BreadCrumbs::setCrumbs($_SERVER['REQUEST_URI']);
BreadCrumbs::setEmptyCrumb(1, "home");
BreadCrumbs::setEmptyCrumb(2, "all");
if (BreadCrumbs::getCrumb(1) == 'about') {
echo 'This is the <b>About</b> Page';
}
else if (BreadCrumbs::getCrumb(1) == 'contact') {
echo 'This is the <b>Contact</b> Page';
}
else if (BreadCrumbs::getCrumb(1) == 'search') {
echo 'This is the <b>Search</b> Page';
}
else if (BreadCrumbs::getCrumb(1) == 'home') {
if (BreadCrumbs::getCrumb(2) == 'all') {
echo 'This is the <b>Home</b> Page';
}
else if (ArrayHelp::recValueSearch(BreadCrumbs::getCrumb(2), Config::getNavSecondary())) {
echo 'This is the list page for category: <b>' . BreadCrumbs::getCrumb(1) . '</b> and the country filter is: <b>'. BreadCrumbs::getCrumb(2) . '</b>';
}
else {
echo 'change filter value and go to the <b>home</b> page';
}
}
else if (ArrayHelp::recValueSearch(BreadCrumbs::getCrumb(1), Config::getNavPrimary())) {
if (BreadCrumbs::getCrumb(2) == 'all') {
echo 'This is the list page for category: <b>' . BreadCrumbs::getCrumb(1) . '</b> and the country filter is <b>all countries</b>';
}
else if (ArrayHelp::recValueSearch(BreadCrumbs::getCrumb(2), Config::getNavSecondary())) {
echo 'This is the list page for category: <b>' . BreadCrumbs::getCrumb(1) . '</b> and the country filter is: <b>'. BreadCrumbs::getCrumb(2) . '</b>';
}
else {
echo 'change filter value to all and go to category: <b>' . BreadCrumbs::getCrumb(1) . '</b>';
}
}
else {
echo 'redirect page to home/all';
}
?>
編集: 以下のように Switch ステートメントに変更され、少し良くなりました..
<?php
$array_helper = new ArrayHelp;
$valid_primary = $array_helper->recValueReturn(BreadCrumbs::getCrumb(1), Config::getNavPrimary());
$valid_secondary = $array_helper->recValueReturn(BreadCrumbs::getCrumb(2), Config::getNavSecondary());
switch (BreadCrumbs::getCrumb(1)) {
case 'about' :
case 'contact' :
case 'search' :
echo 'This is the <b>' . BreadCrumbs::getCrumb(1) . '</b> Page';
break;
case 'home' :
switch (BreadCrumbs::getCrumb(2)) {
case 'all' :
echo 'This is the <b>Home</b> Page';
break;
case ($valid_secondary[1]) :
echo 'This is the list page for category: <b>' . BreadCrumbs::getCrumb(1) . '</b> and the country filter is: <b>'. BreadCrumbs::getCrumb(2) . '</b>';
break;
default:
echo 'change filter value and go to the <b>' . BreadCrumbs::getCrumb(1) . '</b> page';
break;
}
break;
case ($valid_primary[1]) :
switch (BreadCrumbs::getCrumb(2)) {
case ($valid_secondary[1]) :
echo 'This is the list page for category: <b>' . BreadCrumbs::getCrumb(1) . '</b> and the country filter is: <b>'. BreadCrumbs::getCrumb(2) . '</b>';
break;
default:
echo 'change filter value and go to the <b>' . BreadCrumbs::getCrumb(1) . '</b> page';
break;
}
break;
default:
echo 'redirect page to home/all';
break;
}
?>