2012-10-22 48 views
9

page.php文件:PHP - 如何更改頁面的標題後包括header.php?

<?php 
include("header.php"); 
$title = "TITLE"; 
?> 

的header.php:

<title><?php echo $title; ?></title> 

我希望我的標題後,設置包括頭文件。是否有可能做到這一點?我已經看到了一些東西similiar在PHP融合電視:http://docs.php-fusion.it/temi:output_handling

+9

去是改變的最好方法你程序的邏輯,所以你可以在輸出標題標籤之前及時定義標題。有解決方法,但他們是kludgy。 –

+0

相關:http://stackoverflow.com/questions/2825776/header-how-to-modify-title-of-the-page-on-the-fly – JNF

+2

+1 Pekka。而對於「kludgy」來說,「複雜」,「處理成本相對較高」,以及「爲任何人維護東西而瘋狂」。修復你的架構,不要與之對抗。 – Quentin

回答

29

擴大對Dainis Abols的答案,你的輸出處理問題,

考慮以下幾點:

您的header.php已經標題標籤設置爲<title>%TITLE%</title>; 「%」很重要,因爲幾乎沒有人輸入%TITLE%,所以你可以稍後用str_replace()。

然後,你可以使用output buffer像這樣

<?php 
    ob_start(); 
    include("header.php"); 
    $buffer=ob_get_contents(); 
    ob_end_clean(); 

    $buffer=str_replace("%TITLE%","NEW TITLE",$buffer); 
    echo $buffer; 
?> 

而且應該這樣做。

編輯

我相信Guy's idea效果更好,因爲它給你一個默認值,如果需要的話,IE:

  • 標題是現在現在<title>Backup Title</title>
  • 代碼爲:
<?php 
    ob_start(); 
    include("header.php"); 
    $buffer=ob_get_contents(); 
    ob_end_clean(); 

    $title = "page title"; 
    $buffer = preg_replace('/(<title>)(.*?)(<\/title>)/i', '$1' . $title . '$3', $buffer); 

    echo $buffer; 
?> 
+0

用於獲取緩衝區輸出版本。 – Peon

+0

謝謝,這就是我需要的! :) –

+0

是這種方法SEO友好? –

3

您可以使用JavaScript設置

<script language="javascript"> 
    document.title = "The new title goes here."; 
</script> 
+1

不錯,但它有2個缺點。一個不適用於seo,因爲此代碼不在標題中寫入標題標籤。其次是如何添加元描述和關鍵字? –

8

你可以做的是,你存儲在像變量輸出:

header.php中

<?php 
    $output = '<html><title>%TITLE%</title><body>'; 
?> 

PS:您需要刪除所有 EC hos/prints等等,以便所有可能的輸出存儲在$output變量中。

這可能是easely完成的,通過在文件的開頭定義$output = '';然後查找/替換echo$output .=

然後更換%TITLE%到你所需要的:在你的代碼

<?php 
    include("header.php"); 
    $title = "TITLE"; 

    $output = str_replace('%TITLE%', $title, $output); 
    echo $output; 
?> 

另一種方法是使用javascript,而不是:

<title><?php echo $title; ?></title> 

在那裏將這個:

<script type="text/javascript"> 
    document.title = "<?=$title;?>" 
</script> 

或jQuery,如果您願意:

<script type="text/javascript"> 
    $(document).ready(function() { 
     $(this).attr("title", "<?=$title;?>"); 
    }); 
</script> 
+0

第一個變體似乎不起作用。然後,如果我使用js,頁面標題更改,但如果你看源代碼,這不是我需要的 –

+0

,實際上,第一個變體的作品,但它使標題區域外的頁面標題,因爲回聲不在header.php page –

+0

你需要在header.php中刪除** all **回聲,並且在你有'echo'的地方寫'$ output。='。這是腳本的想法。 – Peon

2

頂部添加此代碼的網頁

<?php 
    $title="This is the new page title"; 
?> 

添加該代碼在你的模板頭文件(包括)

<title><?php echo $title; ?></title> 
+0

zkanoca我只想說這個解決方案很棒! –

+0

簡單。完善!謝謝! – Brian

5

擴大一點上we.mamat的答案, 你可以使用preg_replace而不是簡單替換,並且完全不需要使用%標題%。類似這樣:

<?php 
ob_start(); 
include("header.php"); 
$buffer=ob_get_contents(); 
ob_end_clean(); 

$title = "page title"; 
$buffer = preg_replace('/(<title>)(.*?)(<\/title>)/i', '$1' . $title . '$3', $buffer); 

echo $buffer; 
?> 
1

這很容易。在把那裏的頁面 將這個代碼的header.php

 <? 
$sitename = 'Your Site Name' 
$pagetitle; 

if(isset($pagetitle)){ 
echo "<title>$pagetitle." | ". $sitename</title>"; 
} 
    else { 
echo "<title>$sitename</title>"; 
} 
?> 

然後:

<? 
    $pagetitle = 'Sign up' 
    include "header.php"; 
    ?> 

所以,如果你是對的index.php,標題是您的網站名稱。 例如,如果你在註冊頁面上,標題是註冊|您的網站名稱

0

使用jQuery的功能像這樣:

$("title").html('your title');

1

每一個簡單的只使用一個功能,我創造了它。

<? 
function change_meta_tags($title,$description,$keywords){ 
     // This function made by Jamil Hammash 
    $output = ob_get_contents(); 
    if (ob_get_length() > 0) { ob_end_clean(); } 
    $patterns = array("/<title>(.*?)<\/title>/","<meta name='description' content='(.*)'>","<meta name='keywords' content='(.*)'>"); 
    $replacements = array("<title>$title</title>","meta name='description' content='$description'","meta name='keywords' content='$keywords'"); 

    $output = preg_replace($patterns, $replacements,$output); 
    echo $output; 
} 
?> 

所有你必須創建function.php文件,並把這個函數中的第一個,然後讓需要的header.php元標記下。 要使用此函數change_meta_tags(「新標題」,「新描述」,新關鍵字); 。 請勿在Header.php中使用此功能!只是另一頁。

+0

只要確保你放置正確的序列第一標題,描述,關鍵字。否則這個功能將不起作用,其次使用單引號來描述和關鍵字。確實是非常方便的功能 –

1

1.只需添加$ title變量之前需要功能

<?php 

$title = "Your title goes here"; 
require("header.php"); 

?> 

2.添加以下代碼的header.php

<title><?php echo $title; ?></title> 
相關問題