我正在尝试从PHP动态设置页面的HTML标题。我有一个页面,它根据数据库中的条目设置title元素。我试图根据当前页面的H2内容动态更改标题。再次从数据库中检索此内容。
我尝试使用会话变量来做到这一点,但显然由于加载顺序,这在加载标题时不起作用,然后是内容。在页面刷新,然后正确设置标题,但这不是很好。
我目前正在使用JavaScript来更新标题,但这对于没有启用JS的搜索引擎机器人来说再次没有用。
PHP
session_start(); <--both header and dynamic page -->
<title><?php echo $_SESSION['dynamictitle'];?></title> <-- Header -->
$jobTitle = $rs2row['fldRoleTitle']; <-- dynamic page -->
$_SESSION['dynamictitle'] = $jobTitle;
的JavaScript
var currentTitle = "<?php Print($jobTitle) ?>" + " | " + document.title;
document.title = currentTitle;
答案 0 :(得分:2)
将模板数据的加载和处理与模板的实际输出/渲染分开,例如:在将变量放入模板之前确定变量,例如
<?php // handlerForThisPage.php
session_start();
$dynamicTitle = $_SESSION['dynamictitle'];
…
$jobTitle = $rs2row['fldRoleTitle'];
…
include '/path/to/header.html';
include '/path/to/templateForThisPage.html';
然后只回显相应模板中的变量,例如
// header.html
<html>
<head>
<title><?php echo $dynamicTitle ?></title>
…
然后应该进入templateForThisPage.html。与在一个大杂乱文件中混合数据获取,处理和输出的线性脚本相比,这更加方便和易于维护。如果您想扩展这种方法,请考虑阅读MVC模式。
答案 1 :(得分:1)
为什么不只是<title><?php echo $jobTitle . '|' . 'Standard Title' ?></title>
其中$jobTitle = $rs2row['fldRoleTitle'];
应在上述声明之前的某处声明。
答案 2 :(得分:1)
您可以执行以下操作
添加
<?php
ob_start();
?>
在标题之前的文档的第一行;
然后将标题添加如下:{title_holder}
然后在您的代码中准备好标题后,请执行以下操作:
<?php
// Catch all the output that has been buffered
$output = ob_get_contents();
// clean the buffer to avoid duplicates
ob_clean();
// replace the title with the generated title
$output = str_replace('{title_holder}', 'Your title here',$output);
// put the html back in buffer
echo $output
?>
// Then continue your code