多页面有codeigniter?

时间:2009-07-22 16:17:58

标签: php jquery 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全局,理想情况下我想使用switch,并定义案例,但唉也没有用。

3 个答案:

答案 0 :(得分:1)

首先,你不应该加载这么多页面。每个文件系统请求都会影响性能。而不是有“标题”和“页脚”只是将它们组合到“home_view”页面。

其次,您的问题听起来像是在说明加载视图后,您希望它们在之后的每个页面请求中保持加载状态。这是不可能的PHP,因为每个请求都是一个全新的负载。但是,如果您正在进行大量数据库查询或计算,然后加载小部件,则可以将小部件缓存5分钟左右,并在每个页面中保存查询。在CodeIgniter论坛中查找缓存类。

答案 1 :(得分:1)

如果我理解正确,我认为您只想为所有加载代码设置一个共同位置,这样您就不必为控制器中的每个操作复制/粘贴该部分。如果是这样的话......

在控制器中创建一个构造函数,将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,$ script等引用更改为$ this-> header,$ this-> scripts等。

另外,如果您使用的是PHP4,请将__construct替换为您的班级名称。

答案 2 :(得分:0)

这可能会或可能没有用处: http://codeigniter.com/forums/viewthread/77279/

我在我的所有CodeIgniter项目中使用它,它使模板非常容易。