2011-02-27 10 views
0

私は通常、テンプレート内のどのデータを表示するかを決定するためにURLでGET変数を使用します。URLを変数として使用する

今日、私は変数を渡していません。私はinludes/leftmenu.phpという名前のファイルをすべてのページに含めていますが、ページ名によっては別のデータを表示したいと思います。 URLで渡された変数で

$page = $_SERVER["REQUEST_URI"]; 
$page_name = get_page_name($_SERVER["REQUEST_URI"]); 

    if ($page_name == "classes.php") 
     { 
<h2 class="left_h2">Class Schedules &amp; Info</h2> 
<ul class="left_ul"> 
    <li>Immersion Programs</li> 
    <li>Afternoon Programs</li> 
    <li>Immersion Schedule</li> 
    <li>Afternoon Schedule</li> 
</ul> 

    }else if($page_name == "about.php") 
    { 

<h2 class="left_h2">About Us</h2> 
<ul class="left_ul"> 
    <li>About Us</li> 
    <li>Photo Scrapbook</li> 
</ul> 
    }else if ($page_name == "news.php") 
    { 

<h2 class="left_h2">News &amp; Events</h2> 
<ul class="left_ul"> 
    <li>News</li> 
    <li>Events</li> 
</ul> 

    } 
+0

申し訳ありませんが、私はこの投稿を書いている間私の頭の中に2つの問題を抱えていました。しかし、実際には両方の質問に答えました。ありがとう! – Denoteone

答えて

2

を含んだことを確認してください可能性があります。私がいない

$pages = array(
    '/events.php' => 'includes/events_menu.php', 
    '/news.php' => 'includes/news_menu.php' 
); 

// lookup the appropriate include file 
$uri = $_SERVER['REQUEST_URI']; 
$include = $pages[$uri]; 

// produce a default page if the URI wasn't recognised 
if (!isset($include)) { 
    $include = 'includes/default.php'; 
} 

include($include); 
+0

$ページには、値ごとに複数のキーがあります。つまり、$ pages = array( '/ events.php、/home_events.php、away_events.php' => 'includes/events_menu.php'); – Denoteone

+0

いいえ、重複するキーをすべて同じ値に個別にマッピングする必要があります。 – Alnitak

0

PHP polulates $_GET

leftmenu.phpはそうのように見えます。コードに含まれるものの関数としてユーザーが渡した変数を持つことはお勧めしませんが、

配列は勿論、より良い方法ですが、あなたはまた、realpath()に見て、あなたがPHPの配列使用することができ、それはDOCUMENT_ROOTに/

+0

申し訳ありませんが、私は間違って質問をしました。上記の私の編集をご覧ください。 – Denoteone

1

をそれがより速いかどうかを知るが、これを行う多くの方法がある。

など。配列で:

$page_name = get_page_name($_SERVER['REQUEST_URI']); 

$includes = array(
    'events.php' => 'includes/events_menu.php', 
    'news.php' => 'includes/news_menu.php' 
); 

if(isset($includes[$page_name])) include($includes[$page_name]); 
else die('this page does not exist'); 
0

あなたはパスして、配列を作成し、if文を削減するin_array機能を使用することができます。

0

すべてのページのメニューがある場合、あなたはあなたがREQUEST_URIを使用することができます

include('includes/'.basename($page_name, ".php").'_menu.php'); 
+0

ああ、私はこのアドバイスを取っていません! – RobertPitt

+0

ロバート、これまでに瞬間がある場合は、なぜこれが(個人的な知識と理解を深めるための)悪いアドバイスなのか教えてください。ありがとう。 解決策は実際には編集された質問には全く適用されないと思います。 – isotrope

0

で行くことができますが、あなたはそれが常に/スラッシュで始まることを心に留めておく必要があります。あなたがbasename()を適用していない限り、あなたはそのため記述する必要があります:

if ($page_name == "/events.php") 

あなたはわずか数ページ名が必要な場合if文が実行可能なアプローチです。それ以外の場合は、switchまたはURL->ファイル名のマップ(配列)を使用します。

RewriteRuleを使用してすべての着信URLを1つのPHPスクリプトにマッピングする場合は、REQUEST_URIの代わりにPATH_INFOを使用することも考えられます。

関連する問題