2013-06-21 37 views
2

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

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但笨

回答

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

这需要一个得到变量,计算出的页眉和页脚之间加载的页面。

这样www.yoursite.com/page/about将加载关于页面,www.yoursite.com/page/contact将加载contact页面

现在,如果你想摆脱/page部分,你需要做一些URL中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

CI中你可以做,这样,你可以在您的控制器,同时加载不同的看法。例如:

例如在导航栏视图,您有联系人在您的菜单按钮应该是这样的:

<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)。

UPDATE: 你不需要有$_GET[]要求,只是在<a>锚标记提供方法的名字从你的控制器

1

你真的喜欢复制/粘贴许多$ this-> load-> 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(); 
    } 

所以,互相控制器还具有可以分派动作取决于URL段,准备PARAMS等index()函数

页脚控制器如实施例(I使用的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内容控制器,发现他应该叫什么_show()在页面控制器功能,并通过行动=“联系我们”给它。 _show()函数可以包含一些开关/壳体结构,其示出的模板依赖动作名称(在此情况下contactus.tpl)

5)最后,我们看看页脚模板

在这种情况下,我们有柔性结构。所有的控制器应具有指数()函数和所有的控制器谁能够在内容被称为应有_show($行为)功能。就这样。

0
在笨

使用模板我

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