2009-07-22 2 views
0

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

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

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 global, в идеале я хочу использовать switch и определять случаи, но это, увы, тоже не работает.

ответ

1

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

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

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); 
} 

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

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

1

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

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

+0

Это было сделано для загрузки сегментов в разных местах на моем домашнем экране. – matthewb

Смежные вопросы