2013-10-19 58 views
2

我有一個名爲administrator1.php的文件,其中包含test.php。所以裏面administrator1.php代碼獲取當前的網址排除包含的文件名

<?php include 'test.php'; ?> 

我有內部test.php動態導航菜單。代碼是

<?php 
$menu = array(
    'users' => array('text'=>'USERS', 'url'=>'administrator1.php'), 
    'createProfile' => array('text'=>'CREATE PROFILE', 'url'=>'administrator2.php'), 
    'payment' => array('text'=>'PAYMENTS', 'url'=>'administrator3.php'), 
    'defense' => array('text'=>'DEFENSE', 'url'=>'administrator4.php'), 
    'progressReport' => array('text'=>'PROGRESS REPORT', 'url'=>'administrator5.php'), 
); 

class Nav { 
    function GenerateMenu($items) { 
    $html = "<ul>"; 
    foreach($items as $item) { 
     if(stristr(__FILE__,$item['url'])===FALSE) { 
     $html .= "<li><a href='{$item['url']}' ><span><B>{$item['text']}</B></span> </a> </li>"; 
     } 
     else { 
     $html .= "<li class='active'><a href='{$item['url']}' ><span><B>{$item['text']}.nnn</B></span> </a></li>"; 
     } 
    } 
    $html .= "</ul>"; 
    return $html; 
}}; 

echo Nav::GenerateMenu($menu); 
?> 

而且我在同一個文件中調用了Nav方法。

問題在於,整個導航欄將被打印,但選定項目('USERS')CSS類別active將不會被調用。但如果我在administrator1.php文件中替換整個代碼而不包括test.php文件,它可以正常工作。所以我想這是包含文件的路徑文件的問題。這是因爲我用__FILE__獲得當前路徑嗎?那麼如何獲取當前文件路徑,不包括路徑中包含的文件名?

回答

2

對於調用靜態函數,我們可以使用::運算符。但是對於訪問類的非靜態成員,你應該做的對象,就像 -

$nav_ob = new Nav(); 
echo $nav_ob->GenerateMenu($menu); 

而且有s ^問題,當您創建陣列 -

的最後一個元素之後
$menu = array(
    'users' => array('text'=>'USERS', 'url'=>'administrator1.php'), 
    'createProfile' => array('text'=>'CREATE PROFILE', 'url'=>'administrator2.php'), 
    'payment' => array('text'=>'PAYMENTS', 'url'=>'administrator3.php'), 
    'defense' => array('text'=>'DEFENSE', 'url'=>'administrator4.php'), 
    'progressReport' => array('text'=>'PROGRESS REPORT', 'url'=>'administrator5.php'), //Here 
); 

逗號。它應該是 -

$nav_ob = new Nav(); 
echo $nav_ob->GenerateMenu(__FILE__, $menu); 

希望這將幫助 -

$menu = array(
    'users' => array('text'=>'USERS', 'url'=>'administrator1.php'), 
    'createProfile' => array('text'=>'CREATE PROFILE', 'url'=>'administrator2.php'), 
    'payment' => array('text'=>'PAYMENTS', 'url'=>'administrator3.php'), 
    'defense' => array('text'=>'DEFENSE', 'url'=>'administrator4.php'), 
    'progressReport' => array('text'=>'PROGRESS REPORT', 'url'=>'administrator5.php') 
); 

包括上述PHP文件調用類的方法之後更新

<?php 
$menu = array(
    'users' => array('text'=>'USERS', 'url'=>'administrator1.php'), 
    'createProfile' => array('text'=>'CREATE PROFILE', 'url'=>'administrator2.php'), 
    'payment' => array('text'=>'PAYMENTS', 'url'=>'administrator3.php'), 
    'defense' => array('text'=>'DEFENSE', 'url'=>'administrator4.php'), 
    'progressReport' => array('text'=>'PROGRESS REPORT', 'url'=>'administrator5.php') 
); 

class Nav { 
    function GenerateMenu($path, $items) { 
    $html = "<ul>"; 
    foreach($items as $item) { 
     if(stristr($path,$item['url'])===FALSE) { 
     $html .= "<li><a href='{$item['url']}' ><span><B>{$item['text']}</B></span> </a> </li>"; 
     } 
     else { 
     $html .= "<li class='active'><a href='{$item['url']}' ><span><B>{$item['text']}.nnn</B></span> </a></li>"; 
     } 
    } 
    $html .= "</ul>"; 
    return $html; 
}}; 
?> 

而且每個administrator.php文件。

+0

謝謝!但問題仍然沒有解決! –

+0

請別人幫我! –

+0

@dnk刪除數組中最後一個值後的逗號。那就是問題所在。 – Ritesh

1

找到答案! 替換爲__FILE__$_SERVER["PHP_SELF"]。所以代碼是;

class Nav { 
function GenerateMenu($items) { 
$html = "<ul>"; 
foreach($items as $item) { 
    if(stristr($_SERVER["PHP_SELF"],$item['url'])===FALSE) { 
    $html .= "<li><a href='{$item['url']}' ><span><B>{$item['text']}</B></span> </a> </li>"; 
    } 
    else { 
    $html .= "<li class='active'><a href='{$item['url']}' ><span><B>{$item['text']}.</B></span> </a></li>"; 
    } 
} 
$html .= "</ul>"; 
return $html; 
}}; 
$nav_ob = new Nav(); 
echo $nav_ob->GenerateMenu($menu); 

現在它工作正如我想要的!感謝大家給予的幫助!