CodeIgniter HMVC

#php #codeigniter #codeigniter-hmvc

#php #codeigniter #codeigniter-hmvc

Вопрос:

Я работаю над установкой 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() не будет буферизоваться. Спасибо

Комментарии:

1. Используя подобное echo Modules::run("header"); , это правило для частичного отображения вида, как указано в документации. Итак, почему вы не хотите его использовать?

Ответ №1:

Да, это делает именно так, как вы описываете, что интересно и то, чего я никогда не наблюдал, поскольку я бы не реализовал то, что вы сделали в реальном сценарии.

Что вы могли бы сделать ( и это работает, потому что я пробовал это), так это создать template_view следующим образом… И это очень урезано…

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);
    }
}  
  

Таким образом, вы могли бы создать свой шаблон, который уже включал бы ваш верхний и нижний колонтитулы, поскольку в вашем примере они являются статическим содержимым. Затем просто создайте области, которые вы заполняете динамически.

Затем это приведет вас к использованию модуля шаблона для обработки всего этого за вас. Это был не ваш вопрос, но надеюсь, что это дает вам пищу для размышлений.