Несколько страниц с codeigniter?

Я пытаюсь найти лучший способ загрузить свое представление только один раз и повторно использовать их на разных страницах.

Например, для домашней страницы у меня есть этот код:

function index()
    {

        /* Load Includes for all pages */
        $header = $this->load->view('includes/header','',true);
        $scripts = $this->load->view('includes/scripts','',true);
        $navigation = $this->load->view('includes/navigation','',true);
        $footer = $this->load->view('includes/footer','',true);

        /* Load widgets for Home Page*/
        $rotator = $this->load->view('widgets/home_feature','',true);

        $login = $this->load->view('widgets/login','',true);

        $cal = $this->load->view('widgets/calendar_home','',true);
        $gallery = $this->load->view('widgets/photos_scroll','',true);
        $tags = $this->load->view('widgets/tags_view','',true);
        $spotlight = $this->load->view('widgets/spotlight','',true);
        $recent = $this->load->view('widgets/activityfeed','',true);

        $data=array(
                    'title'=>'Philly2Night.com',
                    'MetaDesc'=>'Cities2Night new social network',
                    'MetaKeywords'=>'Social, Party, Plan, Events',
                    //Load Includes
                    'header'=>$header,
                    'scripts'=>$scripts,
                    'navigation'=>$navigation,
                    'footer'=>$footer,
                    //Load Widgets
                    'feature'=>$rotator,
                    'login'=>$login,
                    'calendar'=>$cal,
                    'photos'=>$gallery,
                    'tags'=>$tags,
                    'spotlight'=>$spotlight,
                    'recent'=>$recent
                    );
        $this->load->vars($data);           
        $this->load->view('pages/home_view');



    }

Как создать новые страницы, но ссылаясь на эти представления? Я попытался сделать var глобальным, в идеале я хочу использовать переключатель и определять случаи, но это, увы, тоже не сработало.


person matthewb    schedule 22.07.2009    source источник


Ответы (3)


Если я правильно понимаю, я думаю, вы просто хотите иметь одно общее место для всего кода загрузки, чтобы вам не приходилось копировать/вставлять эту часть для каждого действия в контроллере. Если это так...

Создайте конструктор в своем контроллере, переместите туда load->view и сохраните их в переменных внутри класса:

function __construct() {
    parent::__construct();
    /* Load Includes for all pages */
    $this->header = $this->load->view('includes/header','',true);
    $this->scripts = $this->load->view('includes/scripts','',true);
    $this->navigation = $this->load->view('includes/navigation','',true);
    $this->footer = $this->load->view('includes/footer','',true);
}

Обязательно замените любые ссылки $header, $scripts и т. д. на $this->header, $this->scripts и т. д.

Кроме того, замените __construct на имя вашего класса, если вы используете PHP4.

person jimyi    schedule 23.07.2009

Прежде всего, вы не должны загружать так много страниц. Каждый запрос к файловой системе влияет на производительность. Вместо того, чтобы иметь «верхний колонтитул» и «нижний колонтитул», просто объедините их на странице «home_view».

Во-вторых, ваш вопрос звучит так, как будто вы заявляете, что после загрузки представлений вы хотите, чтобы они оставались загруженными для каждого запроса страницы впоследствии. Это невозможно с PHP, так как каждый запрос — это совершенно новая нагрузка. Однако, если вы выполняете много запросов или вычислений к базе данных, а затем загружаете виджеты, вы можете кэшировать виджеты примерно на 5 минут и сохранять запросы на каждой странице. Посмотрите на форумах CodeIgniter классы кеша.

person Xeoncross    schedule 22.07.2009
comment
это было сделано для загрузки сегментов в разных местах на моем домашнем экране. - person matthewb; 22.07.2009

Это может быть или не быть полезным: http://codeigniter.com/forums/viewthread/77279/

Я использую это во ВСЕХ своих проектах CodeIgniter, это очень упрощает создание шаблонов.

person amr    schedule 23.07.2009