如何使用Codeigniter构建动态网站

时间:2013-06-21 04:14:18

标签: php codeigniter

我有一些PHP的经验,但我最近才开始学习Codeigniter。我曾经有一个带有固定导航窗格和侧边栏的网站,但网站的主要部分是基于Get变量动态加载的。基本上是

include head.php
include navbar.php
include sidebar.php
include the page requested from the get variable (home, about, contact, etc.)
include footer.php

我喜欢这个,因为当用户从一个页面导航到另一个页面时,整个站点都不必重新加载。

我无法弄清楚Codeiginiter如何做到这一点。我应该为每个页面使用控制器还是每个页面都有一个功能的控制器?有谁知道一个类似的好教程?我见过的所有教程都会为每个页面重新加载整个网站。

编辑:基本上我想做this但是使用Codeigniter

4 个答案:

答案 0 :(得分:4)

由于您看起来想要相对静态的内容,但是动态加载,您可以使用一个控制器和(可能)控制器中的一个方法。

要使用一种方法,请在welcome控制器中执行此操作:

public page( $page_id ){
    // views/header.php
    $this->load->view( "header" );


    if( $page_id = "about" ){
      $this->load->view("about");     // views/about.php
    }

    else if( $page_id = "contact" ){
      $this->load->view("contact");  // views/contact.php
    }

    // views/footer.php
    $this->load->view("footer");
}

这需要一个get变量,并确定在页眉和页脚之间加载哪个页面。

这种方式www.yoursite.com/page/about会加载关于页面,www.yoursite.com/page/contact会加载contact页面

现在,如果您要删除/page部分,则需要在application/config/routes.php

中进行一些网址重新路由

或者,您可以在一个控制器中使用多种方法:

public about(  ){
    // views/header.php
    $this->load->view( "header" );

    $this->load->view( "about" );

    // views/footer.php
    $this->load->view("footer");
}


public contact(  ){
    // views/header.php
    $this->load->view( "header" );

    $this->load->view( "contact" );

    // views/footer.php
    $this->load->view("footer");
}

现在您的网址看起来更好而无需路由,但您必须为每个网页加载页眉/页脚。

答案 1 :(得分:1)

在codeIgniter中你可以这样做,你可以从控制器同时加载不同的视图。例如:

例如,在您的导航栏视图中,您的菜单中有一个通讯录按钮,如下所示:

<a href='contacts'>Contacts</a>

在您的控制器中:

public function contacts()
{
    $this->load->view('header');
    $this->load->view('navbar');
    $this->load->view('sidebar');
    $this->load->view('contacts_view');
    $this->load->view('footer');
}

所以我们在这里假设您已经准备好加载以下视图( header.php,navbar.php,sidebar.php,contacts_view.php,footer.php

<强>更新: 您不需要$_GET[]请求,只需在<a>锚标记中提供控制器中的方法名称

答案 2 :(得分:1)

你真的想将许多$ this-&gt; load-&gt; view()复制/粘贴到任何控制器功能吗? 这是意大利面条代码。您可以尝试下一步:例如,我们将main.php控制器作为默认控制器。该主控制器包含主要功能:

public function index()
    {
        ob_start();
        $this->load->model('mainmodel');  
        $data = $this->mainmodel->_build_blocks(); //return array with needed blocks (header, menu, content, footer) in correct order
        foreach ($data->result_array() as $row) {
            $this->load->module($row['block_name']);
            $this->name = new $row['block_name'];
            $this->name->index();
        }            
        ob_end_flush();
    } 

所以,每个其他控制器也有index()函数,可以根据url段调度动作,准备params等。

作为示例的页脚控制器(我使用Smarty作为模板引擎):

public function index()
    { 
               $this->mysmarty->assign('year', date("Y"));
               $this->mysmarty->view('footer');
               return true;
    }

内容控制器将具有:

public function index()
    {
        $name = $this->uri->segment(1, 'index');
        $act = $this->uri->segment(2, 'index');
        $this->load->module($name);
        $this->name = new $name;
        $pageData = $this->name->_show($act);
        if ($pageData)
        {
            $this->mysmarty->assign($name, $pageData);
        }
        $this->mysmarty->view($name);
    }

这意味着如果你想展示http://site.name/page/contactus,我们会做下一步:

1)main.php按所需块开始循环

2)首先我们通过标题控制器

显示header.tpl

3)然后我们显示菜单

4)然后我们调用解析url的内容控制器,找到他应该在Page控制器中调用_show()函数并将action ='contactus'传递给它。 _show()函数可以包含一些开关/案例构造,它们显示模板取决于操作名称(在这种情况下为contactus.tpl)

5)最后我们展示了页脚模板

在这种情况下,我们有灵活的结构。所有控制器都应该有index()函数,所有可以在内容中调用的控制器都应该有_show($ act)函数。多数民众赞成。

答案 3 :(得分:0)

在codeigniter中我使用模板

首先使用header.php,navbar.php等在一个文件夹中创建模板文件

示例:template.php

<?php 
 echo $this->load->view('header'); //load header
 echo $this->load->view('navbar');//load navbar
 echo $this->load->view('sidebar');//load sidebar
 echo $this->load->view($body); //load dynamic content
 echo $this->load->view('footer');//load footer
?> 

控制器中的第二个

function index(  ){
$data['body'] = 'home'; // cal your content
$this->load->view('template', $data);
}