#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);
}
}
Таким образом, вы могли бы создать свой шаблон, который уже включал бы ваш верхний и нижний колонтитулы, поскольку в вашем примере они являются статическим содержимым. Затем просто создайте области, которые вы заполняете динамически.
Затем это приведет вас к использованию модуля шаблона для обработки всего этого за вас. Это был не ваш вопрос, но надеюсь, что это дает вам пищу для размышлений.