Getting my nav menu to work with CodeIgniter

徘徊边缘 提交于 2020-01-04 17:00:46

问题


Basically I have two controllers using CodeIgniter for a simple blog for a project at school. One is Home which is the login page. The other is Member for when they are signed in. in this member controller I am creating functions for add_post(), view_users_posts(), etc. 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');
}

My member view has a nav menu with links to these functions like so: 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>

I haven't finished them as I am having trouble knowing what to code. Basically if the user clicks Add Post should it refer to the function add_post in the controller which will load a view called add_post? Or should it direct to a new controller called Add_post that will load the view?

My reason is if I click add post it takes me to member/add_post but when I click back home I get member/member then add post again I get member/member/add_post.

I hope this makes sense, I am at a total loss. Thanks for any help!


回答1:


you need to use base url.

Suppsoe your base url is (in the config), www.example.com/

then your code will be

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

Do the same for other items.

Note: Remember slash in the config file. otherwise include it in base_url('/member/add_post')

Reference




回答2:


You are on the right track. For the menu items you have, you would have to complete these controller functions:

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()
    {
        ...
    }
}

The first new function references views/header.php, views/add_post.php, and views/footer.php. The other "member" functions should probably also load header and footer (for a consistent site look) but load a different main body of functionality, probably called something very similar to the functions.

I have assumed view_users_posts() accesses some new model function to retrieve the posts, passes it along to the view to format appropriately. Note that view/view_users_posts.php should access the variable $posts based on the way I wrote it above.




回答3:


Some time ago i had the same problem. My Solution was that is set the base url to the path to the index.php. For example

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

so you can use it like this

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


来源:https://stackoverflow.com/questions/10632016/getting-my-nav-menu-to-work-with-codeigniter

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!