2009-07-22 10 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グローバルを作ろうとしました、理想的には私はスイッチを使いたい、そしてケースを定義したいのですが、それはうまくいきませんでした。

答えて

1

私が正しく理解すれば、すべてのロードコードに共通の場所を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); 
} 

は$スクリプト、任意の$ヘッダーを変更してくださいPHP4を使用している場合は、__constructをクラス名に置き換えてください。また、PHP4を使用している場合は__constructをクラス名に置き換えてください。

1

まずはたくさんのページを読み込まないでください。それぞれのファイルシステム要求はパフォーマンスに悪影響を及ぼします。 「ヘッダー」と「フッター」を「home_view」ページに結合するのではなく、

第2に、後でページリクエストごとにロードしたままにしておきたいビューをロードすると、あなたの質問に似ているように聞こえます。これはPHPでは不可能です。なぜなら、それぞれのリクエストがまったく新しい負荷であるからです。しかし、データベースのクエリや計算をしてウィジェットを読み込んでいる場合は、ウィジェットを5分間キャッシュして各ページのクエリを保存することができます。 CodeIgniterフォーラムでは、キャッシュクラスについて調べています。

+0

これは、私の家の景色の異なる場所にセグメントを読み込むために行われました。 – matthewb

0

これは、またはいくつかの使用であってもなくてもよい。 http://codeigniter.com/forums/viewthread/77279/

私はCodeIgniterのプロジェクトのすべてにこれを使用するには、それはテンプレートは非常に非常に容易になります。

関連する問題