CodeIgniter + App + App Обновления с настройками просмотра - PullRequest
0 голосов
/ 27 марта 2012

У меня есть приложение, которое использует HMVC и codeigniter.Все приложение находится в git-репо под названием MapIt-USA.Я просто столкнулся со сценарием, в котором я развернул это приложение на клиентском xyz, и они хотели, чтобы я настроил макет внешнего вида.Однако я внес изменения, когда я создаю бэкэнд-контроллер, библиотеку, патчи / обновления модели и помещаю эти обновления в исходное состояние и извлекаю их из исходного состояния на сервере. Мне нужен способ избежать перезаписи этих изменений в представлениях.

Есть идеи?

1 Ответ

1 голос
/ 28 марта 2012

Основная идея для перегрузки представлений (или любого другого файла):

  • Храните пользовательские представления в тех местах, где основные обновления приложений их не перезаписывают. Дайте им то же имя, что и по умолчанию.
  • Измените ваш загрузчик шаблонов, чтобы сначала проверить пользовательский файл, если он не существует, тогда используйте файл по умолчанию. Если у вас нет специального решения для загрузки шаблонов, сейчас самое время написать один или расширить класс 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"
}

Как вы на самом деле это делаете, зависит от вас, но это основная идея.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...