簡體   English   中英

包含的php文件中的主菜單

[英]Main menu in included php file

我正在基於twitter-bootstrap的網站上工作,並決定將頁眉和頁腳保留為網站每個子頁面中包含的單獨的php文件。 在我想將“活動”類添加到當前選擇內容(即用戶當前所在的頁面)之前,所有方法都運行良好。

我發現此腳本應該可以正常工作:

$("a").click(function() {        
    $(".active").removeClass("active");
    $(this).parent("div").addClass("active");
});

但我意識到它僅適用於瞬間,然后我們返回到默認選擇菜單。 我檢查了頁面html,未添加類。 我意識到這是因為重定向到新網址后,正在加載新的header.php-因此未應用任何選擇。

關於如何解決的任何建議?

對於這種情況有一種解決方案。 無論何時呈現頁面,都應為該頁面添加一個標志名稱,並在頭文件中使用該標志條件,

例如,您有一個主頁,因此在渲染到主頁時,將home_page_flag傳遞為True或其中的任何值,只需在標題頁中添加一個條件(如果它是標題),然后在其中添加活動類。

<ul>
  <li <?php if ($_SERVER['PHP_SELF'] == '[this_link]') { ?>class="active"<?php } ?>>
    <a href="[this_link]">Home</a>
  </li>
</ul>

語法可能是錯誤的,因為我不是PHP專家,該登錄名可以使用任何語言 由您的友好PHP鄰居解決-請使用您的實際href文本更改[this_link]實例

只需執行以下測試,即可檢查從服務器全局返回的內容:

<?php echo $_SERVER['PHP_SELF']; ?>

即使您在本地主機上運行,​​只要您的本地服務器運行的是php版本4或更高版本,它都應該返回某些內容。

我的猜測是,如您的評論所述,它似乎“不起作用”的原因是,這將返回執行腳本的頁面的URL的域名部分之后的所有內容(即,不是您的include而是該頁面的實際頁面)將返回給用戶)。 因此,例如, http://example.com/foo/bar.php將返回/foo/bar.php 結果,這完全有可能不等於錨標記中的href。 例如,如果要從foo / foo.php鏈接到/foo/bar.php頁面,則可以使用類似路徑,例如href =“ bar.php”。 因此,如果您檢查$ _SERVER ['PHP_SELF']是否等於鏈接href,即使它們位於同一頁面,它們也不會相等。 說得通?

我將如何在PHP中執行此操作:

您沒有顯示站點或html的結構,因此本示例僅假設服務器的根文件夾中有兩個頁面(index.php和contact.php)。 它還假定菜單的html格式為div,其中包含每個菜單項的錨標記。

<?php
$currentpage = $_SERVER['PHP_SELF'];
$home = "index.php";
$contact = "contact.php";
?>

<div class="col-sm-2<?php echo ($currentpage == '/'.$home) ? ' active' : ''; ?>">
    <a href="<?php echo $home; ?>">Home</a>
</div>
<div class="col-sm-2<?php echo ($currentpage == '/'.$contact) ? ' active' : ''; ?>">
    <a href="<?php echo $contact; ?>">Contact</a>
</div> 

那么,這是做什么的呢?

首先有一些變量:一個用於使用$ _SERVER ['PHP_SELF']的$ currentpage,另一個用於我菜單中的頁面鏈接。

然后在將要添加或不添加活動類的類的標記中,我將使用三元運算符-如果您不熟悉它們,那就像是if語句的簡寫。 語法如下:( 要檢查為true的東西 )? 如果是事實 該怎么辦:如果不是事實該怎么辦

在這種情況下,我正在將$ currentpage值與$ home變量的值進行比較(以正斜杠開頭)(因此它與$ _SERVER ['PHP_SELF']返回頁面路徑的方式匹配)。 如果是真的,我會在空格旁加上主動一詞。 如果不是真的,並且這很重要 ,那么我只用一個空字符串就什么也沒有呼應。 與if語句相比,這是三元運算符的特殊之處,您必須在“ else”情況下包括要做什么。

這幾乎就是全部。 唯一的另一件事是我在href屬性中使用了頁面url變量。

好的,這就是我要做的,但是我只想提到有很多其他方法可以做到這一點。 例如,您可以在javascript或jQuery中做類似的事情。 在這種情況下,您只需要在每個使用window.location.pathname的頁面上包含一個腳本,並使用switch語句來確定應該將活動類添加到哪個鏈接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM