1

我正在安装 CI + HMVC。当我使用 HMVC 函数调用时:

Modules::run("header");

它不打印任何内容。但是,如果我运行:

echo Modules::run("header");

或者:

$x = Modules::run("header");

然后它工作。

这是我试图使工作的代码:

// HOME MODULE
class Home extends MX_Controller{
    public function index(){
        Modules::run("header");
        $this->load->view('home_view');


        Modules::run("header");
       }
   }
// HEADER MODULE
class Header extends MX_Controller{
    public function index(){
        $this->load->view('header_view');
    }
}

// FOOTER MODULE
class Footer extends MX_Controller{
    public function index(){
        $this->load->view('footer_view');
    }
}

但是当我运行它时,我只看到“home_view”内容。没有页眉和页脚。

我无法使用上述方法来解决它,因为 $this->load->view() 是缓冲的,这使得我的“home_view”内容出现在我的 HTML 底部,在我的页脚下方,这会破坏事情。

请帮我找出为什么 Modules:run() 不会缓冲。谢谢

4

1 回答 1

3

是的,它完全按照您的描述进行,这很有趣,而且我从未观察到,因为我不会在现实世界的脚本中实现您所做的事情。

你可以做的(这很有效,因为我已经尝试过了)是像这样创建一个 template_view ......而且这非常减少......

模板视图.php

<?= isset( $header ) ? $header : ''; ?>

<?= isset( $content ) ? $content : ''; ?>

<?= isset( $footer ) ? $footer : ''; ?>

然后您将构建您的页面部分并创建最终输出。

Home.php 控制器

class Home extends MX_Controller {

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

    public function index() {
        // Build the Page Sections
        $data['header']  = Modules::run("header");
        $data['footer'] = Modules::run("footer");
        $data['content'] = $this->load->view('home_view', '', true);
        // Display the final Page
        $this->load->view('template_view',$data);
    }
}  

因此,您可以创建模板以包含您的页眉和页脚,因为它们在您的示例中是静态内容。然后只需创建您动态填写的区域。

然后,这将引导您使用模板模块为您处理所有这些。这不是你的问题,但希望它能给你一些思考。

于 2016-10-20T06:53:27.457 回答