2010-12-30 4 views
1

Hier ist die Struktur der Website:Wie ändert man den HTML-Titel in PHP, ohne die XHTML-Markup-Validierung zu unterbrechen?

PHP Indexdatei

//my class for analyzing the PHP query 
$parameter = new LoadParameters(); 

//what this does is it accesses the database 
//and according to the query, figures out what should be 
//loaded on the page 
//some of the things it sets are: 
// $parameter->design - PHP file which contains the design 
//       HTML code of the page 
// $parameter->content - Different PHP file which should be loaded 
//       inside the design file 
$parameter->mysqlGetInfo($_SERVER['QUERY_STRING']); 

//load the design file 
include($parameter->design); 

PHP Design-Datei

Gerade die allgemeine Struktur. Offensichtlich hat es viel mehr Designelemente.

<html> 
    <head> 
    ... 
    </head> 
    <body> 
    <?php 
     //this loads the content into the design page 
     include($parameter->content); 
    ?> 
    </body> 
</html> 

Frage

So, hier ist das Problem, das ich erleben. Die Datei $parameter->content ist eine dynamische PHP-Datei, dh der Inhalt ändert sich auch entsprechend der Abfrage.

Zum Beispiel, wenn ich ein Bild Seiten mit Anfragen wie ?img=1 und ?img=2 habe, wird meine LoadParameter Klasse schaut nur auf dem img der Abfrage Teil und wird wissen, dass der Inhalt der Seite image.php sein sollte. image.php wird jedoch die Abfrage erneut betrachten und genau herausfinden, welches Bild geladen werden soll.

Das verursacht Probleme für mich, weil ich eine andere <title></title> für verschiedene Bilder haben möchte. Meine Lösung bestand also darin, das Element <title></title> auf der Inhaltsseite festzulegen. Dies funktioniert, aber es bricht die XHTML Markup Validation bei W3C, weil es die Struktur der Website macht, die folgenden sein:

<html> 
    <head> 
    ... 
    </head> 
    <body> 
    ... 
    <title>sometitle</title> 
    ... 
    </body> 
</html> 

Und mit <title></title> innerhalb <body></body> ist nicht erlaubt.

Wie kann ich den Titel ändern, ohne die XHTML-Markup-Validierung zu unterbrechen?

Hinweis: Ich Javascript dann nicht verwenden können, weil Motoren nicht in der Lage Suche wäre, den Titel der Seite zu sehen. Ich muss es direkt in PHP machen.

Vielen Dank im Voraus.

Antwort

0

So habe ich das Problem gelöst.

änderte ich den PHP-Design zu so etwas wie:

//get the content PHP file 
//inside the file I set the following variables 
//which are used below: 
//$parameter->title - the string which contains the title 
//$parameter->html - the string which contains the HTML content 
include($parameter->content); 

//string which will contain the html code of the whole page 
$html = <<<EndHere 
<html> 
    <head> 
     <title> 
EndHere; 
//add title 
$html .= $parameter->title; 
$html .= <<<EndHere 
     </title> 
    </head> 
    <body> 
EndHere; 
//add the content of the page 
$html .= $parameter->html; 
$html .= <<<EndHere 
    </body> 
</html> 
EndHere; 

//output the html 
echo $html; 

Und hier ist die Grundstruktur der Inhalt PHP-Datei. Da die einzige Seite, die die Datei möglicherweise enthalten kann, die Designseite ist, kann ich darin auf $parameter verweisen.

//set the title 
$parameter->title = "sometitle"; 

//set the content HTML 
$parameter->html = "some HTML here"; 

Es ist keine sehr saubere Lösung, aber es funktioniert gut. $ Parameter-> Inhalt bestimmt in

0

warum nicht eine zweite, um den Titel an der richtigen Stelle zu führen?

<html> 
    <head> 
    <?php 
     inlcude($parameter->title); 
    ?> 
     ... 
    </head> 
    <body> 
    <?php 
    //this loads the content into the design page 
     include($parameter->content); 
    ?> 
    </body> 
</html> 
0

Kannst du nicht einfach den Code PHP ändern, so dass Sie so etwas wie zu tun:

<html> 
    <head> 
    <title><? print($parameter->title); ?></title> 
    </head> 
    <body> 
    <?php 
     //this loads the content into the design page 
     include($parameter->content); 
    ?> 
    </body> 
</html> 
+0

Der Titel wird so nicht den Titel drucken, bevor ich schließe $ parameter-> Inhalt – miki725

+0

Was den Inhalt von $ tut paremeter-> Inhalt aussehen? So kann ich sehen, ob es eine andere Lösung gibt? Nebenbei bemerkt, ich denke, dass das Design des Codes nicht Ihren Bedürfnissen entspricht. Wenn ich Sie wäre, würde ich zuerst darüber nachdenken, was ich tun möchte, bevor ich den PHP-Code entwerfe. Dies verhindert viele Kopfschmerzen in einer späteren Phase der Entwicklung/Wartung/Skalierung/etc. – PeeHaa

+0

Danke für den Vorschlag. Am Ende habe ich die Struktur ziemlich verändert, um dieses Wort schreiben zu können. $ parameter-> content war eine PHP-Datei, die den HTML-Code des Inhalts enthielt. – miki725

0

Ich würde all die <head> Code in eine ‚gemeinsame Funktion‘ genannt etwas wie html_head bewegen ($ title) und dann den Titel dort angeben, wo er hingehört.

Dann rufen Sie einfach diese Funktion aus den Seiten und es ist behoben.

Vergessen Sie nicht, das <body>-Tag in diese Funktion einzufügen, sonst wird es nicht funktionieren!

auszuarbeiten;)

function html_head($title) {?> 
    <html> 
     <head> 
      <title><?=$title?></title> 
      <!-- Put whatever you want... here! --> 
     </head> 
     <body> 
<?} 

dann in $ parameter-> Inhalt, rufen html_head ("Title")

+0

können Sie bitte ausarbeiten – miki725

0

Es wäre einfacher, wenn $ parameter-> Inhalt ohne Anzeige seiner HTML aufgenommen werden könnten Code, sondern stattdessen eine $ parameter-> display (oder ähnliche) -Funktion, die den HTML-Code anzeigt. Auf diese Weise können Sie den PHP-Code am Anfang der Datei einfügen und sich nicht darum kümmern, dass Sie nicht auf den Titel zugreifen können.

<?php 
    require_once($parameter->content); 
?> 
<!DOCTYPE html> 
<html lang="en" dir="ltr"> 
    <head> 
    <meta charset="UTF-8" /> 
    <title><?php echo $parameter->title; ?></title> 
    </head> 
    <body> 
    <?php 
     echo $parameter->display; 
    ?> 
    </body> 
</html> 
Verwandte Themen