Php - 从页面完成页眉/页脚提取的正确方法是什么?

时间:2011-08-02 05:05:28

标签: php templates codeigniter inheritance

刚接触php我真的很想知道这是如何实现的。页眉和页脚总是出现在页面上,内容是唯一不同的内容。因此,如果您想要更改页眉或页脚,则无需在每页上更改它。

1. include(...)

在阅读了一些论坛后,大多数人都不推荐这个,并通过使用模板引擎解决了这个问题。

2. Template Engines

我认为这将是答案,但它看起来很漂亮,蒙面,PHP代码。我看了一下模板引擎如何解决最初的问题;模板继承。因此,在使用带有继承的Smarty模板引擎之后,我认为它很精彩,工作得很完美,并且很容易将代码提取到父模板中。

但另一个问题出现了。在使用smarty编写我自己的小框架后,我想尝试CodeIgniter并创建一个应用程序。他们使用的模板引擎非常基本,他们不推荐它。在发现我不能使用模板继承之后,对于页眉和页脚问题,我寻找了一个解决方案,我找到了一个可以用来实现继承的库,但是它建立在已经存在的CI模板引擎上,它不提供我需要的功能。

现在我被困住了,不知道该怎么做。你们用什么来分隔页眉和页脚与php中的页面?我写的可能太多,但我想知道这样做的正确方法。提前谢谢。

3 个答案:

答案 0 :(得分:1)

如果您正在使用codeigniter,只需使用不同的视图..

class Content extends CI_Controller {

   function index()
   {
     $data['title'] = 'This is page one';
     $this->load->view('header', $data);
     $this->load->view('page_one');
     $this->load->view('footer');
   }

   function page_two()
   {
    $data['title'] = 'This is page two';
    $this->load->view('header', $data);
    $this->load->view('page_two');
    $this->load->view('footer');
  }
    //and so on..
}

在header.php中,你只需回显$ title;如果你在第一页或第二页,你会发现它有所不同。无论如何,你应该为每个页面使用一个控制器,而不是像我在这个例子中那样的方法,我只是在没有编写太多代码的情况下展示了一种可能性。

此外,您可以在视图中加载视图,后者继承传递给主视图的数据。使用上面的例子:

$data['page']['title'] = 'Page one';
$data['foot']['whatever'] = 'Whatever you want';
$this->load->view('page_one', $data);

查看page_one.php

  <?php $this->load->view('header', $page); ?>

   <!-- html and php stuff for this page only -->

  <?php $this->load->view('footer', $foot); ?>

在header.php中:

<title><?php echo $title; ?></title>

在footer.php中:

<p><?php echo $whatever; ?></p>

Header.php和Footer.php是单独的“块”,只需2个文件就可以在任何地方加载。它与include()非常相似,如果你看得好。我知道,这不是真正的模板引擎,但有时模板引擎“太多”,如果其他非程序员正在弄乱布局,那么它很有用。如果你想要实现的只是页面部分的分离,那么将每个页面分成块,你可以根据需要进行组合,然后实现Smarty或其他模板引擎。

答案 1 :(得分:0)

也许你可以使用这个template library for Codeigniter。它比默认的模板引擎略好,实际上是easy to use。您可以为每个模板设置默认的“区域”。

答案 2 :(得分:0)

Code Igniter - how would you structure this site?

<?php

 class MY_Controller extends CI_Controller {

    function __construct() {
        parent::__construct();
    }

    public function loadView($view) {
        $this->load->view('header');
        $this->load->view($view);
        $this->load->view('footer');
    }
}

如果您需要在页眉或页脚中加载数据:

$data["title"] = 'About us';
$this->load->view('header', $data);