CodeIgniter 中的页眉和页脚

2022-08-30 08:45:15

我真的不喜欢在每个控制器中写作:

    $this->load->view('templates/header');
    $this->load->view('body');
    $this->load->view('templates/footer');

有没有可能,页眉和页脚会自动包含在内,如果我们需要更改它,我们也可以这样做?你是如何处理的?或者在你看来这不是问题?谢谢。


答案 1

以下是我的工作:

<?php

/**
 * /application/core/MY_Loader.php
 *
 */
class MY_Loader extends CI_Loader {
    public function template($template_name, $vars = array(), $return = FALSE)
    {
        $content  = $this->view('templates/header', $vars, $return);
        $content .= $this->view($template_name, $vars, $return);
        $content .= $this->view('templates/footer', $vars, $return);

        if ($return)
        {
            return $content;
        }
    }
}

对于 CI 3.x:

class MY_Loader extends CI_Loader {
    public function template($template_name, $vars = array(), $return = FALSE)
    {
        if($return):
        $content  = $this->view('templates/header', $vars, $return);
        $content .= $this->view($template_name, $vars, $return);
        $content .= $this->view('templates/footer', $vars, $return);

        return $content;
    else:
        $this->view('templates/header', $vars);
        $this->view($template_name, $vars);
        $this->view('templates/footer', $vars);
    endif;
    }
}

然后,在您的控制器中,您只需执行以下操作:

<?php
$this->load->template('body');

答案 2

是的。

创建一个在文件夹中调用的文件。template.phpviews

内容:template.php

$this->load->view('templates/header');
$this->load->view($v);
$this->load->view('templates/footer');

然后,从控制器中,您可以执行如下操作:

$d['v'] = 'body';
$this->load->view('template', $d);

这实际上是我个人如何加载我所有观点的非常简单的版本。如果你把这个想法发挥到极致,你可以做一些有趣的模块化布局:

请考虑是否创建一个名为包含单行的视图:init.php

$this->load->view('html');

现在创建包含以下内容的视图:html.php

<!DOCTYPE html>
<html lang="en">
    <? $this->load->view('head'); ?>
    <? $this->load->view('body'); ?>
</html>

现在创建一个包含以下内容的视图:head.php

<head>
<title><?= $title;?></title>
<base href="<?= site_url();?>">
<link rel="shortcut icon" href='favicon.ico'>
<script type='text/javascript'>//Put global scripts here...</script>
<!-- ETC ETC... DO A BUNCH OF OTHER <HEAD> STUFF... -->
</head>

以及包含以下内容的视图:body.php

<body>
    <div id="mainWrap">
        <? $this->load->view('header'); ?>
        <? //FINALLY LOAD THE VIEW!!! ?>
        <? $this->load->view($v); ?>
        <? $this->load->view('footer'); ?>
    </div>
</body>

并根据需要创建和查看。header.phpfooter.php

现在,当您从控制器调用init时,所有繁重的工作都已完成,您的视图将被包裹在里面和标签中,您的页眉和页脚将被加载进去。<html><body>

$d['v'] = 'fooview'
$this->load->view('init', $d);

推荐