2012-05-17 101 views
2
工作

基本上我有使用笨的一個簡單的博客在學校的一個項目兩個控制器。 一個是Home,它是登錄頁面。另一種是,當他們在簽署會員。在這個成員控制器我創造add_post())功能,view_users_posts(等 Member.php讓我的導航菜單使用CodeIgniter

class Member extends CI_Controller{ 

function __construct(){ 
    parent::__construct(); 
    $is_logged_in = $this->session->userdata('is_logged_in'); 
    if (!isset($is_logged_in) || $is_logged_in !== true) { 
     redirect('home'); 
    } 
} 

public function index() { 
    $this->load->library('pagination'); 

    $config['base_url'] = base_url() . 'index.php/member/index/'; 
    $config['total_rows'] = $this->db->get('posts')->num_rows(); 
    $config['per_page'] = 5; 
    $config['num_links'] = 20; 

    $this->pagination->initialize($config); 

    $data['posts'] = $this->posts_model->get_all_posts($config['per_page'], $this->uri->segment(3)); 
    $this->load->view('member_view', $data); 
} 

public function add_post() { 
    $this->load->view('add_post_view'); 
} 

我的會員查看與鏈接導航菜單這些功能如下所示: member_view.php

 <li><a href="member">Home</a></li> 
     <li><a href="member/add_post">Add Post</a></li> 
     <li><a href="member/view_users_posts">My Posts</a></li> 
     <li><a href="member/reset_pass">Reset Password</a></li> 
     <li><a href="member/logout">Logout</a></li> 

因爲我無法知道什麼代碼我還沒有完。基本上,如果用戶點擊添加帖子,它應該引用控制器中的函數add_post,它將加載一個名爲add_post的視圖?還是應該直接到一個名爲Add_post的新控制器來加載視圖?

我的理由是,如果我點擊添加後它需要我給會員/ add_post但是當我點擊回到家裏,我得到會員/會員再加入後,我再次得到會員/會員/ add_post。

我希望這是有道理的,我在全盤損失。謝謝你的幫助!

回答

4

你需要使用base url

Suppsoe您的基本網址(在配置),www.example.com/

那麼你的代碼將

<li><a href="<?php echo base_url('member/add_post');?>">Add Post</a></li> 

執行相同的其他項目。

注:記得在配置文件中的斜槓。否則它包含在base_url('/member/add_post')

Reference

+0

完美,謝謝。我之前使用過的基本網址錯誤。我不得不在index.php中添加,因爲我還沒有刪除它,但它現在起作用了!再次感謝 – Randallsm83

+0

歡迎您。如果它解決了您的問題,請將此答案標記爲已接受,因爲其他一些可能面臨同樣問題的用戶也會發現它也很有用。 – itachi

+0

沒問題,完成。還是新的堆棧:) – Randallsm83

0

你是在正確的軌道上。 對於你的菜單項,你就必須完成這些控制器功能:

class Member extends CI_Controller { 

    function __construct() 
    { 
     parent::__construct(); 
     $is_logged_in = $this->session->userdata('is_logged_in'); 
     if (!isset($is_logged_in) || $is_logged_in !== true) { 
      redirect('home'); 
    } 

    function add_post() 
    { 
     // for example: 
     $this->load->view('header'); // standard header and menu view 
     $this->load->view('add_post'); // input form view 
     $this->load->view('footer'); // standard footer, adverts, etc. 
    } 

    function view_users_posts() 
    { 
     $data ['posts'] = $this->model->get_all_posts(...(etc)...); 
     $this->load->view('header'); // standard header and menu view 
     $this->load->view('view_users_posts', $data); 
     $this->load->view('footer'); // standard footer, adverts, etc. 
    } 

    function reset_pass() 
    { 
     ... 
    } 

    function logout() 
    { 
     ... 
    } 
} 

第一個新函數引用views/header.phpviews/add_post.phpviews/footer.php。其他「成員」函數也許應該加載頁眉和頁腳(爲了一致的站點外觀),但加載不同的主體功能,可能被稱爲與功能非常相似的東西。

我假設view_users_posts()訪問一些新的模型函數來檢索帖子,將它傳遞給視圖以適當地格式化。請注意,​​應根據我上面寫的方式訪問變量$posts

+0

我認爲他的問題是在導航菜單.... – itachi

+0

@itachi:我的網站不使用導航欄中的基本URL,他們工作正常。不過我確實是用'/'開頭的。 – wallyk

+0

是的,它是導航菜單,但我完成它們時確實需要這些信息。謝謝! – Randallsm83

0

前一段時間我有同樣的問題。我的解決方案是將base url設置爲index.php的路徑。例如

$config['base_url'] = "http://localhost/codeigniter/index.php/" 

所以你可以使用它像這樣

<a href="<?php echo base_url() ?>Controller/Action/Param1/Param2">Link Text</a> 
+0

我會但我的樣式表已全部鏈接,將不得不返回並修復所有這些。下次會做,謝謝! – Randallsm83

+0

也許你可以實現一個函數,在輔助類中回顯你的Base url,並在啓動時通過配置數組加載助手。請在http://codeigniter.com/user_guide/general/creating_libraries.html查看CI的文檔。希望這可以幫助 – Rakin

+0

我有一個小費給你。看看Symfony 2.請不要理解我的錯誤,但我認爲CodeIgniter有點卡住了。 PHP 5.3增加了很多很酷的功能,比如命名空間等等,如果你不使用它們,你必須成爲笨蛋。 CodeIgniter是一款適用於小型Web應用程序的酷炫框架,但是由於我已經看到了Symfony 2的魔力,所以我沒有其他的框架。 – Rakin