2016-10-19 2 views
1

Я работаю над установкой CI + HMVC. Когда я пользуюсь вызовом функции HMVC:CodeIgniter 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, под этим нижним колонтитулом вещи.

Пожалуйста, помогите мне узнать, почему модули: run() не будут буферизировать. Спасибо

+0

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

ответ

2

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

Что вы могли бы сделать (и это работает, потому что я пробовал), чтобы создать 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); 
    } 
} 

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

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

Смежные вопросы