Tạo trang quản lý admin trong CodeIgniter 3x

Hướng dẫn tạo trang quản lý admin trong CodeIgniter 3x, bước đầu xây dựng một CMS với CodeIgniter gồm phần quản lý admin và phần xử lý trang khi người dùng tương tác.
  • 10:32 30/09/2016
  • Kỳ Nhân
  • 0 Bình luận
  • 1576

Chắc một số bạn bất ngờ, thắc mắc sao mới giới thiệu tới phần Controllers và Views đã nhảy sang phần tạo trang quản lý admin trong CodeIgniter 3x,

Với mục tiêu giúp các bạn hiểu rõ hơn khi thực hành, làm tới đâu biết hàm tới đó, chứ không như một số trang khác hướng dẫn nhiều hàm. Trải qua quá trình tự tìm hiểu và xây dựng lên một CMS bằng CodeIgniter nên mình hiểu rõ khi tự học Codeigniter cần gì? Nên học phần nào trước, phần nào sau ? Quan điểm của mình là lý thuyết cho lắm cũng không làm gì được, quan trọng vừa làm vừa học, làm tới đâu học tới đó như vậy dễ nhớ, dễ biết hơn. Một số hàm cơ bản nên tham khảo user_guide của CodeIgniter vì nó chi tiết hơn.

Vào dự án của mình ( dự án đang hướng dẫn tên là ci) tại localhost/ci. Tạo 2 folder assets, uploads. 2 folder này 1 chứa css, js, font.. và 1 chứa các hình ảnh, file upload lên.

Trong folder assets tạo 2 folder là admin và web.

Trong 2 folder admin và web tạo các folder css, js, extra, images, fonts

Tạo như vậy để các bạn dễ quản lý chỉnh sửa trang web thôi, ví dụ như cần chỉnh sửa css trang admin thì vào assets/admin/css thôi.

Các bạn sau khi down bộ source code về có thể hiểu rõ hơn. Link tải bộ source như bài viết.

Down source tại đây

Các bài về sau hoàn toàn hướng dẫn dựa trên bộ source này nên các bạn chú ý nha.

Vào application/core tạo file MY_Controller.php với nội dung bên dưới

<?php 
defined('BASEPATH') OR exit('No direct script access allowed');
class MY_Controller extends CI_Controller {
    protected $data = array();
    function __construct() {
        parent::__construct();
        $this->load->helper('url');
    }
    protected function render($the_view = NULL, $template = 'master') {
        if($template == 'json' || $this->input->is_ajax_request()) {
            header('Content-Type: application/json');
            echo json_encode($this->data);
        }
        elseif(is_null($template)) {
            $this->load->view($the_view,$this->data);
        }
        else {
            $this->data['the_view_content'] = (is_null($the_view)) ? '' : $this->load->view($the_view, $this->data, TRUE);
            $this->load->view('layout_admin/' . $template, $this->data);
        }
    }
    protected function view($the_view = NULL, $template = 'master') {
        if($template == 'json' || $this->input->is_ajax_request()) {
            header('Content-Type: application/json');
            echo json_encode($this->data);
        }
        elseif(is_null($template)) {
            $this->load->view($the_view,$this->data);
        }
        else {
            $this->data['the_view_content'] = (is_null($the_view)) ? '' : $this->load->view($the_view, $this->data, TRUE);
            $this->load->view('layout_web/' . $template, $this->data);
        }
    }
}
class Admin_Controller extends MY_Controller {
    function __construct() {
        parent::__construct();
    }
    protected function render($the_view = NULL, $template = 'master') {
        parent::render($the_view, $template);
    }
}
class Public_Controller extends MY_Controller {
    function __construct() {
        parent::__construct();            
    }
}

Vào application/config/routes.php thêm dòng $route['admin'] = 'admin/dashboard';

Vào application/controllers tạo 1 folder admin

Trong application/controllers/admin tạo file Dashboard.php với nội dung

<?php defined('BASEPATH') OR exit('No direct script access allowed');
class Dashboard extends Admin_Controller {
    function __construct() {
        parent::__construct();
    }
    public function index() {
        $this->render('admin/dashboard_view');
    }
}

Vào application/views tạo 4 folder lần lượt là admin, layout_admin, web, layout_web

Vào application/views/admin tạo file dashboard_view.php với nội dung

<div class="container">
    <h1 class="text-center">phan giao dien admin</h1>
</div>

Vào application/views/layout_admin tạo file master.php với nội dung

<?php defined('BASEPATH') OR exit('No direct script access allowed'); ?>
<?php $this->load->view('layout_admin/include/head'); ?> 
<?php echo $the_view_content;?>
<?php $this->load->view('layout_admin/include/end');?>

Và folder include

Vào application/views/layout_admin/include tạo 2 file head.phpend.php với nội dung lần lượt là

head.php

<?php defined('BASEPATH') OR exit('No direct script access allowed');?>
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Trang Admin</title>
    <script src="<?=base_url()?>assets/admin/js/jquery-1.11.0.min.js"></script>
    <link href="<?=base_url()?>assets/admin/extra/bootstrap/css/bootstrap.min.css" rel="stylesheet">
    <link href="<?=base_url()?>assets/admin/css/style.css" rel="stylesheet">
</head>
<body>

end.php

<?php defined('BASEPATH') OR exit('No direct script access allowed');?>
<script src="<?=base_url()?>assets/admin/extra/bootstrap/js/bootstrap.min.js"></script>
<script src="<?=base_url()?>assets/admin/js/admin.js"></script>
</body>
</html>

Truy cập link localhost/ci/admin.html thấy kết quả. Như vậy trải qua các bước trên chúng ta đã hoàn thành xong bước phân chia 2 khu vực là admin và web.

Trong phần này có sử dụng phần Helper trong CodeIgniter $this->load->helper('url'); cần phải load helper url này thì hàm base_url() trong 2 file head.php end.php mới sử dụng được.

Tham khảo helper tại: http://www.codeigniter.com/user_guide/helpers/url_helper.html

Để cấu hình link hàm base_url() các bạn vào application/config/config.php sửa dòng $config['base_url'] = ''; thành $config['base_url'] = 'http://localhost/ci/';$config['index_page'] = 'index.php'; thành $config['index_page'] = '';

Mục đích tạo file MY_Controller.php giúp chia ra 2 class là Admin_Controller Public_Controller đều thừa hưởng từ Class cha là MY_Controller, sau đó các Controllers thuộc admin đều thừa hưởng từ hàm Admin_Controller, controllers trang web thừa hưởng từ hàm Public_Controller. Để khi ta cần 1 biến mà toàn bộ trang admin đều sử dụng được có thể viết 1 hàm trong class Admin_Controller chứ không phải mỗi Class phải viết lặp lại. Giống như hàm load helper url, chỉ cần viết trong class MY_Controller là các class Admin và Public đều sử dụng được.