2

假设我有 header.tpl 和 footer.tpl,在这两者之间是 body.tpl。

假设我想通过检查是否设置了特定会话来限制对 body.tpl 的访问,例如:

session_start();
if (isset($_SESSION['limited'])) {
  //render body.tpl
} else {
  //direct somewhere else
}

如果该session_start(); if (isset()) {部分位于 header.tpl 并且} else {}位于 footer.tpl 文件中,这会起作用吗?

我的计划是我在每个页面中包含的页眉和页脚中进行会话检查,因此我不必在呈现模板的 PHP 文件中执行此操作。

像这样(body.tpl 的内容):

<?php require_once(TEMPLATE_PATH. "/header.tpl"); ?>
//body.tpl contents
<?php require_once(TEMPLATE_PATH. "/footer.tpl"); ?>

body.tpl 通过一个 PHP 文件调用,该文件包含requires所有必要的文件,并实例化将用于填写 tpl 文件的所有类。如果我在 PHP 文件中进行会话检查,它会按预期工作。

4

2 回答 2

0

如果你使用模板引擎,你会做得更好(试试http://www.smarty.net/

您将能够轻松地做到这一点以及更多。您将能够按照这些思路做一些事情。

假设您要显示页面 foo.tpl,并且您有两个其他 smarty 模板 1. header.tpl 2. footer.tpl

foo.tpl 看起来像这样

{include file="header.tpl"}

{$foo}

{include file="footer.tpl"}

然后在您的 php 页面中,执行您想要的任何逻辑,通过以下方式将输出加载到变量中

$smarty-assign('foo',$my_content);
$smarty->display( "foo.tpl" );

这将呈现 foo.tpl,包括 header.tpl 和 footer.tpl 的内容以及 $foo

于 2013-03-07T11:47:13.047 回答
0

您可以在执行请求时从任何 PHP 代码访问 $_SESSION 对象。确保只调用 session_start 一次。

附言。这种方法会带来代码重复,你会后悔的。

于 2013-03-07T11:41:55.790 回答