1

我正在尝试从 PHP 动态设置页面的 HTML 标题。我有一个页面,它根据数据库中的条目设置标题元素。我正在尝试根据当前页面的 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;
4

3 回答 3

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 模式。

于 2013-01-03T11:14:20.427 回答
1

为什么你不应该在上面声明之前的某个地方声明<title><?php echo $jobTitle . '|' . 'Standard Title' ?></title>$jobTitle = $rs2row['fldRoleTitle'];

于 2013-01-03T11:15:01.870 回答
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
于 2013-01-03T11:20:11.507 回答