У меня проблема с загрузкой модулей внутри моего шаблон библиотека в CodeIgniter HMVC. Причина, по которой я хочу загрузить модуль в библиотеку шаблонов, заключается в том, что я хочу использовать модули для боковых ящиков и других блоков содержимого в моем шаблоне.
PS: Я также использую всезнайка система парсинга шаблонов для CodeIgniter, но я сомневаюсь, что это как-то связано с ошибками, но если у вас есть основания полагать иначе, пожалуйста, дайте мне знать.
Я пытался загрузить модуль двумя разными способами, и оба представлялись с одинаковыми ошибками.
Обнаружена ошибка PHP
Серьезность: Уведомление
Сообщение: неопределенное свойство CI :: $ template
Файл: MX / Loader.php
Номер строки: 141
—
Обнаружена ошибка PHP
Серьезность: Уведомление
Сообщение: неопределенное свойство CI :: $ template
Имя файла: MX / Controller.php
Номер строки: 57
—
Неустранимая ошибка: вызов функции-члена load_content () для необъекта в E: \ Xampp \ htdocs \ firecms \ application \ modules \ sidebar_login_box \ controllers \ sidebar_login_box.php в строке 7
Неопределенная функция load_content () будет объяснена ниже (в Контроллер боковой панели).
MX / грузчик
/*Line 140*/if (isset($this->_ci_classes[$class]) AND $_alias = $this->_ci_classes[$class])
/*Line 141*/ return CI::$APP->$_alias;
MX / контроллер
/*Line 56*/public function __get($class) {
/*Line 57*/ return CI::$APP->$class;
Это была моя первая попытка (загрузка файла и создание экземпляра его класса):
class Template {
//[...]
public function load_sidebars()
{
$sidebars = $this->CI->cms_model->get_sidebars();
foreach ($sidebars as $sidebar)
{
if (trim($sidebar["content"]) == "")
{
//An example of sidebar module name is "sidebar:login_box"//The function below changes the name to "sidebar_login_box" (the
//module's folder and controller name.
$module = str_replace(':', '_', $sidebar["module"]);
$file_path = APPPATH.'modules/'.$module.'/controllers/'.$module.'.php';
require_once $file_path;
$class = ucfirst($module);
$object = new $class();
$module_data = $object->index();
$this->_section_data["sidebars"][]["content"] = $module_data;
}
else
{
$this->_section_data["sidebars"][]["content"] = $sidebar["content"];
}
}
}
//[...]
}
И это была моя вторая попытка (с использованием функции загрузчика):
public function load_sidebars()
{
$sidebars = $this->CI->cms_model->get_sidebars();
foreach ($sidebars as $sidebar)
{
if (trim($sidebar["content"]) == "")
{
$module = str_replace(':', '_', $sidebar["module"]);
$this->CI->load->module($module);
$module_data = $this->CI->$module->index();
$this->_section_data["sidebars"][]["content"] = $module_data;
}
else
{
$this->_section_data["sidebars"][]["content"] = $sidebar["content"];
}
}
}
Вот так выглядит контроллер боковой панели:
class Sidebar_login_box extends Fire_Controller {
public function index()
{
$view_data = array();
//The load_content function in the template library is used to parse template files
//and return them as a string.
return $this->template->load_content("login_box", $view_data);
}
}
Fire_Controller — мой основной контроллер. Префикс моих основных классов — Fire_ вместо MY_.
Вот так выглядит контроллер огня:
class Fire_Controller extends MX_Controller {
public function __construct()
{
parent::__construct();
//Load configurations from the database.
$this->config->load_db_configs();
//Set the timezone.
date_default_timezone_set(config_item("timezone"));
//Loads the form validation library.
$this->load->library("form_validation");
//Reset the Form Validation CI Object (to fix problems with HMVC CI).
$this->form_validation->CI =& $this;
//To reduce load time, the template library will not be loaded in ajax
//requests.
if ( ! $this->input->is_ajax_request())
{
$this->load->library("template");
}
//Force access via SSL connection (HTTPS) if necessary.
if ((int)config_item('force_https') === 1)
{
force_https();
}
}
Замечания: Это очень недавний мой проект, который означает, что фреймворк и все сторонние расширения находятся в самой последней стабильной версии по состоянию на 6 января 2015 года.
Спасибо за ваше время,
С наилучшими пожеланиями.
Исправлена.
Боковые панели были загружены из метода set_defaults (), который был вызван методом конструктора в моей библиотеке шаблонов. А так как он не был полностью загружен, объект шаблона не был сохранен в суперобъекте CI, поэтому он был недоступен и выбрасывал ошибки в модуле боковой панели.
Я переместил вызов set_defaults () в функцию render_page () моей библиотеки шаблонов (которая вызывается контроллерами модулей), и теперь она работает отлично.
Жаль, что я добавил награду за несколько часов до того, как найти решение, хе-хе.
Вам нужно загрузить библиотеку, прежде чем вы сможете использовать ее в контроллере боковой панели. Это не передается от родителя. Попробуй это:
class Sidebar_login_box extends Fire_Controller {
public function index()
{
$view_data = array();
$this->load->library('template');
//The load_content function in the template library is used to parse template files
//and return them as a string.
return $this->template->load_content("login_box", $view_data);
}
}
Ура!