2012-10-22 9 views
9

page.php:PHP - jak zmienić tytuł strony po AFTER zawierający header.php?

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

header.php:

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

chcę mój tytuł do określenia po tym plik nagłówka. Czy można to zrobić? Widziałem jakieś similiar rzeczy na telewizorach PHP-Fusion: http://docs.php-fusion.it/temi:output_handling

+9

Najlepszym sposobem, aby przejść byłoby zmienić logika programu, dzięki czemu możesz zdefiniować tytuł przed wydrukowaniem tagu tytułu. Istnieją obejścia, ale są kludgy. –

+0

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

+2

+1 Pekka. A dla "kludgy" przeczytaj "Skomplikowane", "Stosunkowo wysokie koszty przetwarzania" i "Szalony gotcha dla każdego, kto musi to utrzymać". Napraw swoją architekturę, nie walcz z tym. – Quentin

Odpowiedz

29

poszerzając Dainis Abols odpowiedź, a pytanie o obsługę wyjściowej

rozważyć następujące kwestie:

Twój header.php ma tag tytuł ustawiony <title>%TITLE%</title>; "%" są ważne, ponieważ prawie nikt nie wpisuje% TITLE%, więc możesz użyć tego dla str_replace() później.

następnie można użyć output buffer jak tak

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

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

i że należy to zrobić.

EDIT

wierzę Guy's idea działa lepiej, ponieważ daje domyślne, jeśli jest to potrzebne, IE:

  • Tytuł jest teraz <title>Backup Title</title>
  • Kod jest teraz:
<?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

+1 za pobranie wersji wyjścia bufora. – Peon

+0

Dzięki, to jest to, czego potrzebowałem! :) –

+0

czy ta metoda jest przyjazna seo? –

3

można ustawić przy użyciu JavaScript

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

ładne, ale ma 2 wady. jeden nie jest użyty dla seo, ponieważ ten kod nie zapisuje tagu tytułu w nagłówku. po drugie, jak dodać opis meta i słowa kluczowe? –

8

Co można zrobić, to zapisać wyjście w zmiennej typu:

header.php

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

PS: trzeba usunąć wszystkie ec hos/prints itp., aby wszystkie możliwe dane wyjściowe były przechowywane w zmiennej $output.

To może być easely zrobić, definiując $output = ''; na początku pliku, a następnie find/zastąpićecho do $output .=.

A potem wymienić %TITLE% do czego potrzebujesz:

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

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

Innym sposobem jest użycie javascript w kodzie, zamiast:

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

umieścić to w tam:

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

Lub jQuery, jeśli wolisz:

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

Pierwszy wariant nie działa. a następnie, jeśli użyję js, zmiany tytułu strony, ale jeśli oglądasz kod źródłowy, to nie jest to, co ja potrzebuję, –

+0

, faktycznie, pierwszy wariant działa, ale umieszcza tytuł strony poza obszarem nagłówka, ponieważ echo nie idzie w header.php page –

+0

Będziesz musiał usunąć ** wszystkie ** echa w header.php i napisać '$ output. =' gdziekolwiek masz 'echo'. Taka jest idea skryptu. – Peon

2

Dodaj ten kod na górze strona

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

Dodaj ten kod w pliku nagłówka szablonu (m.in.)

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

zkanoca Chcę tylko powiedzieć, że to rozwiązanie jest genialne! –

+0

Łatwy. Idealny! Dzięki! – Brian

5

Rozszerzając trochę na odpowiedź we.mamat, w cię może zamiast niego zastąpić i usunąć konieczność całkowitego usunięcia. Coś takiego:

<?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

To bardzo proste. Umieść ten kod w header.php

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

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

Następnie na stronie umieścić tam:

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

Więc jeśli jesteś na index.php, tytuł jest nazwą Twojego serwisu. I na przykład, jeśli jesteś na stronie rejestracji, tytuł to Zarejestruj się | Nazwa witryny

1

Każdy Proste tylko przy użyciu funkcji, stworzyłem go.

<? 
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; 
} 
?> 

Przede wszystkim należy utworzyć plik function.php i umieścić tę funkcję w środku, a następnie dokonać wymagają pod metatagi w header.php. Aby użyć tej funkcji change_meta_tags ("NEW TITLE", "NEW DESCRIPTION", NEW KEYWORDS); . Nie używaj tej funkcji w Header.php !! tylko z kolejnymi stronami.

+0

Upewnij się, że umieściłeś właściwą sekwencję pierwszego tytułu, opisu, słów kluczowych. w przeciwnym razie ta funkcja nie zadziała, po drugie, użyj pojedynczego cytatu dla opisu i słów kluczowych. i tak naprawdę bardzo przydatna funkcja –

1

1. Wystarczy dodać tytuł $ zmienna przed wymagają funkcja

<?php 

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

?> 

2. Dodać następujący kod do header.php

<title><?php echo $title; ?></title> 
Powiązane problemy