让我的导航菜单与CodeIgniter一起使用

时间:2012-05-17 08:10:30

标签: php codeigniter

基本上我有两个使用CodeIgniter的控制器,用于学校项目的简单博客。 一个是Home,它是登录页面。另一个是成员,当他们登录时。在这个成员控制器中,我正在为add_post(),view_users_posts()等创建函数。 Member.php

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的新控制器,它将加载视图?

我的理由是如果我点击添加帖子它会把我带到member / add_post但是当我点击回家时我得到会员/会员然后再添加帖子我得到会员/会员/ add_post。

我希望这是有道理的,我完全失去了。谢谢你的帮助!

3 个答案:

答案 0 :(得分:4)

您需要使用base url

支持您的基本网址(在配置中),www.example.com /

那么你的代码将是

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

对其他项目也这样做。

注意:请记住配置文件中的斜杠。否则将其包含在base_url('/member/add_post')

Reference

答案 1 :(得分: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()访问一些新的模型函数来检索帖子,将其传递给视图以进行适当的格式化。请注意,view/view_users_posts.php应根据我上面编写的方式访问变量$posts

答案 2 :(得分:0)

前段时间我遇到了同样的问题。我的解决方案是将基本URL设置为index.php的路径。例如

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

所以你可以像这样使用它

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