2016-08-18 87 views
0

我想用一個header.php來處理我的公共頁面和我的管理頁面使用條件語句。當我使用include時,我可以使這種技術起作用,但是我學會了使用函數包含文件的另一種技術,現在我的用於管理員和公共的條件語句不起作用。爲什麼我的條件語句不起作用?

所以,這段代碼是在我的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'); ?> 

功能家住的functions.php中包括夾。

function include_layout_template($template="") { 
include(SITE_ROOT.DS.'includes'.DS.'layouts'.DS.$template); 
} 

我無法獲得條件代碼的工作。有誰知道爲什麼會這樣?

謝謝:)

+0

嘗試的var_dump(($ layout_context),並檢查是否有實際內容.. – scaisEdge

+2

沒有足夠的信息來做出分析。 –

+0

您在其中分配「管理員」值這個'$ layout_context'變量的代碼的一部分? –

回答

0

幽州後一個標準包括:include("includes/layouts/header.php");,你能夠使用$layout_context,但之後包括使用功能include_layout_template('header-admin.php');,你不是。

這是與變量範圍的問題。

您的$layout_contextheader.php文件中定義,在任何函數聲明之外。

在這樣的文件,如果包括它在全球範圍內,則其中的變量會來全局變量。

但是,如果你在一個函數中包含它,那麼這些變量成爲函數中的變量。

因此,當您撥打include_layout_template()時,將創建變量,但僅限於include_layout_template()範圍內。只要函數返回,那些變量就不再可用。

這裏的快速和骯髒的解決方案是在header.php文件中將它們定義爲全局。因此,將global $layout_context;添加到此文件中代碼的頂部,對於在其中聲明的任何其他變量也是如此。

這可能會讓你在現在所處的最小範圍內工作。

然而,全局變量是一個非常鈍的工具,由於多種原因,通常認爲這是非常糟糕的做法。重寫你的配置變量會讓你可以更好地從函數調用或對象中引用它們。通過這種方式,您可以從任何地方將它們包含在內,任何方式仍然可以以相同方式訪問。

+0

謝謝,謝謝! :) – Ajoy2w

0

不使用==的字符串比較。總是使用strcmp()進行字符串比較。
變化

if($layout_context == "public") 

if (strcmp($layout_context, "public") == 0) 
{ 
//string is equal 
} 
+0

它仍然不起作用,它只是做同樣的事。抓取一組html並將其用於我的公共頁面和我的管理頁面。需要查!!isset聲明? – Ajoy2w

+0

可能..'strcmp()'安全地比較字符串。當我使用'=='時,我也面臨同樣的問題。在你的邏輯中可能會有一些問題。 –