Не удается загрузить модули из библиотек в CodeIgniter HMVC

У меня проблема с загрузкой модулей внутри моего шаблон библиотека в 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 года.

Спасибо за ваше время,

С наилучшими пожеланиями.

1

Решение

Исправлена.

Боковые панели были загружены из метода set_defaults (), который был вызван методом конструктора в моей библиотеке шаблонов. А так как он не был полностью загружен, объект шаблона не был сохранен в суперобъекте CI, поэтому он был недоступен и выбрасывал ошибки в модуле боковой панели.

Я переместил вызов set_defaults () в функцию render_page () моей библиотеки шаблонов (которая вызывается контроллерами модулей), и теперь она работает отлично.

Жаль, что я добавил награду за несколько часов до того, как найти решение, хе-хе.

1

Другие решения

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

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

Ура!

0

По вопросам рекламы [email protected]