Я пытаюсь создать шаблон заголовка / тела / нижнего колонтитула в CodeIgniter, аналогичный описанному в:
Верхний и нижний колонтитулы в CodeIgniter
Мой код хранится в \ application \ core \ MY_loader.php:
<?php
class MY_Loader extends CI_Loader {
public function load_template($template_name, $vars = array(), $return = FALSE)
{
if($return):
$content = $this -> view('templates/header', $vars, $return);
$content .= $this -> view($template_name, $vars, $return);
$content .= $this -> view('templates/footer', $vars, $return);
return $content;
else:
$this -> view('templates/header', $vars);
$this -> view($template_name, $vars);
$this -> view('templates/footer', $vars);
endif;
}
}
?>
Код моего контроллера хранится в application \ controllers \ Manager.php:
class Managers extends CI_Controller {
function login()
{
$this -> load -> load_template('managers/login');
}
}
Когда я просматриваю BASE_URL / Manager / login, я получаю эту ошибку:
Вызов неопределенного метода CI_Loader :: load_template ()
Моя интерпретация этого заключается в том, что система не расширяет CI_Loader с помощью MY_Loader, а вместо этого полностью игнорирует MY_Loader. Эта настройка работала над моей локальной установкой сайта, когда я запускал его под XAMPP, но он перестал работать после того, как я перенес сайт на веб-хостинг. Я не помню изменения конфигурации CI (хотя я мог бы иметь), и при этом я не знаю, связано ли это с проблемой конфигурации на новом хосте.
Я ищу какие-либо указания относительно того, что может мешать MY_loader расширять CI_loader. Мне не удалось найти подобные сообщения; все другие проблемы, которые я обнаружил, связанные с MY_loader, предполагают, что переопределение уже работает.
Файл должен называться «MY_Loader.php» — он чувствителен к регистру и НЕ совпадает с «MY_loader.php».
В отличие от единственного другого ответа в настоящее время, «My_loader.php» также не будет работать, так как subclass_prefix
применяется отдельно от имени библиотеки.
Простейший способ проиллюстрировать это:
$libraryName = 'loader';
$className = ucfirst(strtolower($libraryName));
$className = config_item('subclass_prefix').$className;
$fileName = $className.'.php';
Сохраните это как MY_Loader.php (благодаря предложению другого друга, что буква «L» также должна быть заглавной)
public function load_template($template_name, $vars = array(), $return = FALSE)
{
$CI = & get_instance();
if($return):
$content = $CI->load->view('templates/header', $vars, $return);
$content .= $CI->load->view($template_name, $vars, $return);
$content .= $CI->load->view('templates/footer', $vars, $return);
return $content;
else:
$CI->load->view('templates/header', $vars);
$CI->load->view($template_name, $vars);
$CI->load->view('templates/footer', $vars);
endif;
}
}
?>
Я надеюсь, что смогу помочь. Хорошего дня.