【发布时间】:2015-02-10 19:07:33
【问题描述】:
我正在使用基于 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";
?>
【问题讨论】:
-
.inc 文件都是文本吗?还是他们也使用变量?
-
它们是 HTML 和 PHP。通常 PHP 只是包含导航菜单等,但可能是一个小的独立 PHP 脚本。他们还执行
<?php $pageJavascript = "function runAfterOtherJS(){demo}"; ?>之类的操作,在页面底部包含echo'd,所有其他JS 都包括在内。 -
我假设你包含它的那一刻,它会直接做一些输出,内容相关。对吗?
-
是的,例如
<h1>Welcome</h1><?php include('nav.php'); ?>
标签: php front-controller