我正在使用基于PHP的前端控制器模式,index.php
提供页面结构和模板,每个页面的所有内容都在/pages/
中的包含文件中。
index.php
/pages/home.inc
/pages/about.inc
/pages/contact.inc
包含页面大多是简单的HTML,因此客户可以编辑页面而无需进入任何过于复杂的内容。
此布局的问题在于,由于所有页面信息都在页面包含中,因此无法填充<title>
元素。我可以在每个包含中添加一个$title
变量,但它会在头部之后加载,这太晚了:
<html>
<head>
<title><?php echo $title; ?></title> #$title is not set yet!
</head>
<body>
<?php include($content); ?> #now $title is set
</body>
</html>
重要的是内容文件是自包含的,主要是HTML,但是正如我所提到的那样,能够拥有PHP代码,因为客户将修改这些并且添加太多复杂性是一个问题。因此,例如,设置单独的页面标题数据库将不起作用,因为客户在创建新页面时不会更新数据库。
修改:典型的网页内容可能如下所示。
<h1>Welcome</h1>
<p>blah</p>
<?php include("nav.php"); ?>
<p>more blah</p>
<p>more blah</p>
<p>more blah</p>
<?php
$pageJavascript = "alert('js!');";
$pageTitle = "Cyberdyne Welcome Page";
?>
答案 0 :(得分:1)
选项:
<?php
ob_start();
include($content);
$body = ob_get_contents();
ob_end_clean();
?>
<html>
<head>
<title><?php echo $title; ?></title>
</head>
<body>
<?php echo $body; ?>
</body>
</html>
<强>赞成强>:
<强>缺点强>:
<script type="text/javascript">
with(document) {
window.title = <?php echo json_encode($title); ?>;
}
</script>
<强>赞成强>:
<强>缺点强>:
答案 1 :(得分:1)
如果假设标题始终位于第一行: &#34;我的页面标题&#34 ;;
$filename = '/pages/home.inc';
$fileLines = file($filename, FILE_SKIP_EMPTY_LINES);
$title = yourFunctionThatStripsKomma($fileLines[0]);
唯一不好的是,你必须确保第一行有标题。