Основная идея для перегрузки представлений (или любого другого файла):
- Храните пользовательские представления в тех местах, где основные обновления приложений их не перезаписывают. Дайте им то же имя, что и по умолчанию.
- Измените ваш загрузчик шаблонов, чтобы сначала проверить пользовательский файл, если он не существует, тогда используйте файл по умолчанию. Если у вас нет специального решения для загрузки шаблонов, сейчас самое время написать один или расширить класс CI Loader, чтобы учесть это изменение.
Вероятно, придет время, когда вам понадобится перегрузить или расширить не только представления: например, файлы конфигурации, помощники, языковые файлы или даже контроллеры. Итак, вы можете начать думать о том, как справиться с этим в долгосрочной перспективе. Вы можете имитировать работу CI, сначала просматривая файлы system/
, но позволяя файлам application/
расширяться или перегружаться. Разумеется, настройки будут нести бремя совместимости.
Краткий пример с представлениями:
class MY_Template_Loader {
// We'll assume this is in your application/ dir
private $custom_path = 'custom_views/';
function load($file = NULL)
{
// This is the default view
$view = $file;
// Is there a file with the same name in the custom dir?
// If so, use that instead of the default
if (is_file(APPPATH.$this->custom_path.$file.'.php'))
{
// This is a little bit of a trick
// Use a relative path from CI's default view dir
$view = '../'.$this->custom_path.$file;
}
get_instance()->load->view($view);
}
}
Использование в методе контроллера:
function my_method()
{
$this->my_template_loader->load('my_method/index');
// If "APPPATH/custom_views/my_method/index.php" exists it will be loaded
// Otherwise it will try to load "views/my_method/index.php"
}
Как вы на самом деле это делаете, зависит от вас, но это основная идея.