Как изменить заголовок HTML в PHP, не нарушая проверку разметки XHTML? - PullRequest
1 голос
/ 30 декабря 2010

Вот структура веб-сайта:

Индексный файл PHP

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

Просто общая структура.Очевидно, в нем гораздо больше элементов дизайна.

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

Вопрос

Так что вот проблема, с которой я сталкиваюсь.Файл $parameter->content - это динамический файл PHP, что означает, что содержимое также изменяется в соответствии с запросом.

Например, если у меня есть страницы с изображениями с запросами, такими как ?img=1 и ?img=2, мой LoadParameterКласс будет смотреть только на img часть запроса и будет знать, что содержимое страницы должно быть image.php.image.php однако снова посмотрит на запрос и выяснит, какое именно изображение загрузить.

Это вызывает у меня проблемы, потому что я хочу иметь разные <title></title> для разных изображений.Поэтому я решил просто установить элемент <title></title> на странице содержимого.Это работает, но нарушает проверку разметки XHTML на W3C , потому что это делает структуру сайта следующей:

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

И наличие <title></title> в <body></body> не означаетразрешено.

Итак, как я могу изменить заголовок, не нарушая проверки разметки XHTML?

Примечание : я не могу использовать JavaScript, потому что тогдаПоисковые системы не смогут увидеть заголовок страницы.Мне нужно сделать это напрямую в PHP.

Заранее спасибо.

Ответы [ 5 ]

0 голосов
/ 11 февраля 2011

Вот как я решил проблему.

Я изменил дизайн PHP на что-то вроде:

//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;

А вот основная структура PHP-файла содержимого.Поскольку единственной страницей, которая может содержать файл, является страница моего дизайна, я могу сослаться на $parameter.

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

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

Это не очень чистое решение, но оно отлично работает.

0 голосов
/ 26 января 2011

Было бы проще, если бы $ parameter-> content мог быть включен без отображения его HTML-кода, но вместо этого иметь функцию $ parameter-> display (или аналогичную), которая отображает HTML-код.Таким образом, вы можете включить код PHP в начало файла и не беспокоиться о невозможности доступа к заголовку.

<?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>
0 голосов
/ 30 декабря 2010

Разве вы не можете просто изменить код PHP, чтобы сделать что-то вроде:

<html>
  <head>
     <title><? print($parameter->title); ?></title>
  </head>
  <body>
    <?php
       //this loads the content into the design page
       include($parameter->content);
    ?>
  </body>
</html>
0 голосов
/ 30 декабря 2010

Я бы переместил весь код <head> в «общую функцию», называемую что-то вроде html_head ($ title), и затем поместил бы заголовок туда, где он должен.из страниц и это исправлено.

Не забудьте включить тег <body> в эту функцию, иначе он не будет работать!

Разработка;)

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

Затем в $ parameter-> content вызовите html_head ("Заголовок")

0 голосов
/ 30 декабря 2010

почему бы не включить второе, чтобы исполнить заголовок в нужном месте?

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