我正在尝试使用一个header.php来处理我的公共页面和使用条件语句的管理页面。当我使用include时,我可以使用这种技术,但是我学会了使用函数包含文件的不同技术,现在我的admin和public的条件语句不起作用。
所以这段代码位于我的header.php的顶部,包含在php标签中。
if (!isset($layout_context)) {
$layout_context = "public";
}
然后在我的标题标签中,我有像这样的代码部分
<?php if($layout_context == "public") { ?>
<header id="home">
<?php ; } elseif($layout_context == "admin") { ?>
<header id="cms-pages">
<?php ; } ?>
然后在我的所有页面中,我将此代码放在顶部
<?php $layout_context = "public"; ?>
或
<?php $layout_context = "admin"; ?>
当我使用此代码时:
<?php include("includes/layouts/header.php"); ?>
我可以使那些有条件的公共和管理代码工作,但是当我尝试使用这种技术来包含我的header.php
<?php include_layout_template('header-admin.php'); ?>
函数存在于includes文件夹中的functions.php中。
function include_layout_template($template="") {
include(SITE_ROOT.DS.'includes'.DS.'layouts'.DS.$template);
}
我无法使用条件代码。有谁知道为什么会这样?
谢谢:)
答案 0 :(得分:0)
不要使用==
进行字符串比较。始终使用strcmp()
进行字符串比较。
更改
if($layout_context == "public")
到
if (strcmp($layout_context, "public") == 0)
{
//string is equal
}
答案 1 :(得分:0)
您声明在标准包含include("includes/layouts/header.php");
之后,您可以使用$layout_context
,但是在使用函数include_layout_template('header-admin.php');
进行包含后,您不是。{/ p>
这是变量范围的问题。
您的$layout_context
是在header.php
文件中定义的,在任何函数声明之外。
在这样的文件中,如果将其包含在全局级别,那么其中的变量将成为全局变量。
但是,如果从函数中包含它,那么这些变量将成为该函数中的变量。
因此,当您调用include_layout_template()
时,会创建变量,但仅限于include_layout_template()
范围内。一旦函数返回,那些变量就不再可用了。
这里快速而肮脏的解决方案是在header.php
文件中将它们定义为全局。因此,将global $layout_context;
添加到此文件中代码的顶部,并将其添加到其中声明的任何其他变量。
这可能会帮助你完成现在最小的工作。
然而,全局变量是一种非常生硬的工具,并且由于多种原因通常被认为是非常差的实践。重写配置变量会更好,以便您可以从函数调用或对象中引用它们。通过这种方式,您可以从任何地方包含它们,任何它们仍然可以以相同的方式访问。