以下是网站的结构:
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>
元素。这有效,但它打破了W3C的XHTML标记验证,因为它使网站的结构如下:
<html>
<head>
...
</head>
<body>
...
<title>sometitle</title>
...
</body>
</html>
不允许在<title></title>
内<body></body>
。
那么如何在不破坏XHTML标记验证的情况下更改标题?
注意 :我无法使用javascript,因为搜索引擎无法看到该页面的标题。我需要直接在PHP中完成。
提前完成。
答案 0 :(得分:0)
为什么不做第二次包括在适当的地方执行标题?
<html>
<head>
<?php
inlcude($parameter->title);
?>
...
</head>
<body>
<?php
//this loads the content into the design page
include($parameter->content);
?>
</body>
</html>
答案 1 :(得分:0)
您不能只是更改PHP代码,以便您可以执行以下操作:
<html>
<head>
<title><? print($parameter->title); ?></title>
</head>
<body>
<?php
//this loads the content into the design page
include($parameter->content);
?>
</body>
</html>
答案 2 :(得分:0)
我将所有<head>
代码移动到一个名为html_head($ title)之类的'common function'中,然后让它将标题放在它所属的位置。
然后只需从页面中调用该函数即可修复。
不要忘记在该函数中包含<body>
标记,否则它将无效!
阐述;)
function html_head($title) {?>
<html>
<head>
<title><?=$title?></title>
<!-- Put whatever you want... here! -->
</head>
<body>
<?}
然后在$ parameter-&gt;内容中,调用html_head(“Title”)
答案 3 :(得分:0)
如果可以在不显示HTML代码的情况下包含$ parameter-&gt;内容会更容易,而是使用显示HTML代码的$ parameter-&gt;显示(或类似)功能。这样,您可以在文件开头包含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>
答案 4 :(得分:0)
这就是我解决问题的方法。
我将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;
这是Content PHP文件的基本结构。由于唯一可能包含该文件的页面是我的设计页面,因此我可以在其中引用$parameter
。
//set the title
$parameter->title = "sometitle";
//set the content HTML
$parameter->html = "some HTML here";
这不是一个非常干净的解决方案,但它运作良好。