在两个地方同时包含变量

时间:2009-10-17 16:11:29

标签: php

我在这里有一个小小的情况。我正在为我的某个网站构建自定义CMS。

以下是主索引页面的代码:

<?php
require("includes/config.php");   
include("includes/header.php");  
 if(empty($_GET['page'])) {     
     include('pages/home.php'); 
     } else {
      if(!empty($_GET['page'])){ 
$app = mysqli_real_escape_string($db,$_GET['page']);
$content = mysqli_fetch_assoc(mysqli_query($db, "SELECT * FROM pages_content WHERE htmltitle = '$app'")) or die(mysqli_error($db));
$title = $content['title'];
$metakeywords = $content['htmlkeywords'];
$metadesc = $content['htmldesc'];
?>
<h1><?php echo $content['title']; ?></h1><hr /><br />
<div id="content"><?php echo $content['content']; ?></div>              
<? } else { include('includes/error/404.php');} }
include('includes/footer.php'); ?>

该文件包含/ header.php包含回显变量的代码,例如页面标题和元文件。

问题是,当include("includes/header.php");位于它之外时,在if条件之外,它不会回应可变,但是,我不能把包含在if条件中,否则,主页,不需要任何url变量将显示没有这些条件。

我该怎么办?

1 个答案:

答案 0 :(得分:2)

你不能真正写这样的代码太久了。开始可以,但你很快就会意识到它很难维护。通常的方法是将其分成几个步骤。

  • 首先检查输入并确定您在哪个页面上
  • 如果您知道自己位于首页,请添加includes/templates/homepage.php
  • 等内容
  • 否则尝试从数据库加载页面
    • 如果有效,请加入includes/templates/page.php
    • 否则请加includes/templates/404.php

includes/templates中的每个文件都会输出整个页面,即它们都包含标题,执行某些操作并包含页脚。您可以使用例如Smarty模板而不是PHP文件,这将使该方法变得明显。

完成此操作后,您可以进一步拆分代码。不是直接从index.php加载页面,而是包含另一个定义类似load_page($name)的函数的文件,并返回页面详细信息。

然后再做一些更改,您就会发现自己正在使用MVC方法。 :)从数据库加载数据的函数是 Models ,Smary模板是 Views ,将它们放在一起的PHP文件是控制器