2012-10-22 19 views
9

page.php:PHP - come cambiare titolo della pagina DOPO aver incluso header.php?

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

header.php:

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

voglio il mio titolo da stabilire a seguito incluso il file di intestazione. È possibile farlo? Ho visto alcune cose simile su televisori PHP-Fusion: http://docs.php-fusion.it/temi:output_handling

+9

Il modo migliore per andare sarebbe quello di cambiare la vostra logica del programma in modo da poter definire il titolo in tempo prima di emettere il tag del titolo. Ci sono soluzioni alternative ma sono kludgy. –

+0

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

+2

+1 Pekka. E per "kludgy" leggi "Complicated", "Relativamente alto costo di elaborazione", e "Pazzo gotcha per chi deve mantenere la cosa". Correggi la tua architettura, non combatterla. – Quentin

risposta

29

ampliando Dainis Abols risposta, e la vostra domanda sulla gestione di output,

considerare quanto segue:

tua header.php è il tag title impostato <title>%TITLE%</title>; la "%" è importante dal momento che quasi nessuno digita% TITLE% così puoi usarlo per str_replace() in seguito.

allora, è possibile utilizzare in questo modo output buffer

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

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

e che dovrebbe farlo.

EDIT

Credo Guy's idea funziona meglio in quanto ti dà un valore predefinito se ne avete bisogno, IE:

  • Il titolo è ora <title>Backup Title</title>
  • Codice è ora:
<?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 per il recupero della versione di output del buffer. – Peon

+0

Grazie, è quello che mi serviva! :) –

+0

è questo metodo seo friendly ?? –

3

è possibile impostare utilizzando JavaScript

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

bello ma ha 2 svantaggi. uno non è usato per seo perché questo codice non scrive il tag title nell'intestazione. in secondo luogo è come aggiungere meta descrizione e parole chiave? –

8

Che cosa si può fare è, si memorizza l'output in una variabile del tipo:

header.php

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

PS: È necessario rimuovere tutti ec hos/prints etc in modo che tutte le possibili uscite siano memorizzate nella variabile $output.

Questo può essere fatto easely, definendo $output = ''; all'inizio del file e poi trova/sostituisciecho-$output .=.

e quindi sostituire il %TITLE% a quello che vi serve:

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

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

Un altro modo è usare javascript nel codice, invece di:

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

mettere questo in là:

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

Oppure jQuery, se preferisci:

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

la prima variante non sembra funzionare. e poi, se uso js, ​​il titolo della pagina cambia, ma se guardi il codice sorgente non è quello che mi serve –

+0

beh, in realtà, la prima variante funziona, ma mette il titolo della pagina al di fuori dell'area dell'intestazione, perché l'eco non va in header.php page –

+0

Dovrai rimuovere ** all ** echos in header.php e scrivere '$ output. =' ovunque tu abbia 'echo'. Questa è l'idea della sceneggiatura. – Peon

2

Aggiungere questo codice in cima pagina

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

aggiungere questo codice sul vostro file di intestazione Template (include)

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

zkanoca voglio solo dire che questa soluzione è geniale! –

+0

Facile. Perfezionare! Grazie! – Brian

5

Espansione di un po 'la risposta di we.mamat, voi potrebbe utilizzare preg_replace invece della semplice sostituzione e rimuovere del tutto la necessità di un titolo %%. Qualcosa del genere:

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

È molto facile. Mettete questo codice in header.php

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

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

Poi nella pagina messo lì:

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

Quindi, se siete su Index.php, il titolo è il nome del sito. Ad esempio, se si è nella pagina di registrazione, il titolo è Registrati | Il tuo sito Nome

0

utilizzare una funzione jQuery come questo:

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

1

ogni semplice usando solo una funzione, che lo ha creato.

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

Prima di tutto è necessario creare file di function.php e mettere questa funzione all'interno, poi fare richiedono sotto le MetaTags in header.php. Per utilizzare questa funzione change_meta_tags ("NEW TITLE", "NEW DESCRIPTION", NEW KEYWORDS); . Non usare questa funzione in Header.php !! solo con altre pagine.

+0

Assicurati solo di posizionare la sequenza giusta, titolo, descrizione, parole chiave. altrimenti questa funzione non funzionerà, in secondo luogo utilizzare la citazione singola per la descrizione e le parole chiave. e sì, la funzione molto utile in effetti –

1

1. Basta aggiungere variabile titolo $ prima richiede funzione

<?php 

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

?> 

2. Aggiunta seguente codice in header.php

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