Общие шаблоны Codeigniter - PullRequest
       12

Общие шаблоны Codeigniter

0 голосов
/ 08 апреля 2010

Допустим, у меня есть веб-сайт, который имеет 100 разных страниц. Каждая страница использует общий колонтитул. Внутри заголовка находится некоторый динамический контент, который поступает из базы данных.

Я бы хотел избежать необходимости иметь код в каждом отдельном контроллере и действие, которое передает этот общий код в представление.

function index()
{
    // It sucks to have to include this on every controller action.
    data['title'] = "This is the index page";
    data['currentUserName'] = "John Smith";

    $this->load->view("main_view", data);
}

function comments()
{
    // It sucks to have to include this on every controller action.
    data['title'] = "Comment list";
    data['currentUserName'] = "John Smith";

    $this->load->view("comment_view", data);
}

Я понимаю, что мог бы реорганизовать код так, чтобы общие части были в одной функции и функция вызывалась действием. Это уменьшит НЕКОТОРЫЕ болевые ощущения, но это по-прежнему будет неправильным, поскольку мне все равно придется каждый раз вызывать эту функцию.

Какой правильный способ справиться с этим?

Ответы [ 4 ]

1 голос
/ 08 апреля 2010

Я также использовал библиотеку шаблонов, указанную выше - http://www.williamsconcepts.com/ci/codeigniter/libraries/template/

Это еще одна библиотека шаблонов, вышедшая недавно - http://philsturgeon.co.uk/code/codeigniter-template

Я не особо разбирался в различиях между ними, но я знаю, что люди, которые их создали, оба внесли большой вклад в сообщество Codeigniter.

1 голос
/ 08 апреля 2010

Один из способов сделать это - расширить класс контроллера по умолчанию. Вы можете прочитать о расширении классов с помощью MY_Controller в руководстве пользователя . Внутри этого расширенного класса вы можете включить что-то, что вы ВСЕГДА хотите сделать, например визуализировать шаблон заголовка страницы перед основным контентом, или разрешить доступ пользователей и т. Д.

class MY_Controller extends Controller {

    function __construct()
    {
        parent::Controller();
        //code to always do goes here
        echo 'Always print this comment';
        $this->load->view('partials/template_start');
    }
} 

Тогда вы можете сделать так, чтобы ваш обычный класс контроллеров расширил этот класс с помощью

class MyControllerNameHere extends MY_Controller {
    function __construct()
    {
        //setup here
    }
    function index()
    {
        echo 'Only print this bit when this method is called';
        $this->load->view('partials/MYPAGENAMEHERE');
    }
}

Есть и другие способы сделать это, я использую смесь из вышеперечисленного и Библиотека шаблонов кодов Уильямса . Немного поиска - есть несколько решений для вас.

0 голосов
/ 08 апреля 2010

Я наткнулся на это после поиска по их сайту.http://codeigniter.com/wiki/Header_and_footer_and_menu_on_every_page/ Я рассмотрю эту страницу и ее ссылки, а затем опубликую свои мысли.

0 голосов
/ 08 апреля 2010

У меня была похожая ситуация. Я создал папку «include» и поместил туда файл с повторяющимся кодом из моих контроллеров. Тогда в контроллерах просто include('/path/to/includeFile.php');

Не знаю, правильный ли это путь, но он хорошо работает для меня.

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