Nền tảng Kiến thức - Hành trang tới Tương lai
Card image

Chương trình học


  1. Bức tranh tổng thể về Lập trình WEB 1
    1. Sơ đồ vận hành của một Website
  2. Cài đặt môi trường Lập trình PHP 1
    1. Các chương trình cần thiết để Lập trình Web
  3. Thực hiện Dự án PHP thực tế mẫu - sử dụng TWIG template
  4. Dự án thực tế mẫu (TWIG template) - Trang web bán hàng trực tuyến - Thiết kế CSDL 3
    1. Mô hình thiết kế CSDL mẫu NetaShop
    2. Tạo cấu trúc (schema) database netashop
    3. Tạo dữ liệu mẫu (data seed / dummy data) cho netashop
  5. Dự án thực tế mẫu (TWIG template) - Trang web bán hàng trực tuyến - Thiết kế Backend 6
    1. Thiết kế bố cục (layouts) cho giao diện Backend
    2. Tạo chức năng CRUD (Thêm, Sửa, Xóa, Xem) danh mục phẳng
    3. Tạo chức năng CRUD (Thêm, Sửa, Xóa, Xem) danh mục có liên kết khóa ngoại
    4. Tạo chức năng CRUD (Thêm, Sửa, Xóa, Xem) upload hình Sản phẩm (upload đơn, mỗi lần 1 file)
    5. Tạo API lấy dữ liệu báo cáo thống kê
    6. Tạo trang Dashboard
  6. Dự án thực tế mẫu (TWIG template) - Trang web bán hàng trực tuyến - Thiết kế Frontend 11
    1. Thiết kế bố cục (layouts) cho giao diện Frontend
    2. Thực hiện Trang chủ Frontend
    3. Thực hiện Trang Đăng nhập Login
    4. Thực hiện Trang Đăng ký Register
    5. Thực hiện chức năng Kích hoạt Tài khoản
    6. Thực hiện Trang Liên hệ (có gởi mail thông báo)
    7. Thực hiện chức năng Đăng xuất
    8. Thực hiện Trang chi tiết Sản phẩm
    9. Thực hiện Xử lý cho phép Đặt hàng trong trang Chi tiết Sản phẩm
    10. Thực hiện Trang Giỏ hàng
    11. Thực hiện Trang tìm kiếm Sản phẩm

Chương 5-Bài 6. Tạo trang Dashboard

Tác giả: Dương Nguyễn Phú Cường
Ngày đăng: Hồi xưa đó

Để tạo báo cáo với biểu đồ trực quan, chúng ta sẽ sử dụng thư viện rất mạnh về biểu đồ là ChartJS

Step 1: download thư viện và tích hợp vào dự án

ChartJS

assets
├───vendor
│   └───Chart.jS
│       │       * -> các file css, js của thư viện Chart.JS
 

Step 2: viết file logic xử lý Trang Dashboard

  • Tạo file backend/pages/dashboard.php
<?php
// Include file cấu hình ban đầu của `Twig`
require_once __DIR__.'/../../bootstrap.php';

// Yêu cầu `Twig` vẽ giao diện được viết trong file `backend/pages/dashboard.html.twig`
echo $twig->render('backend/pages/dashboard.html.twig');

Step 3: tạo file template Trang Dashboard

  • Tạo file templates/backend/pages/dashboard.php
{# Kế thừa layout backend #}
{% extends "backend/layouts/layout.html.twig" %}

{% block title %}
Bảng tin Dashboard
{% endblock %}


{# Nội dung trong block content #}
{% block content %}
<div class="container-fluid">
    <div class="row">
        <div class="col-sm-6 col-lg-3">
            <div class="card text-white bg-primary mb-2">
                <div class="card-body pb-0">
                    <div class="text-value" id="baocaoSanPham_quantity">
                        <h1>0</h1>
                    </div>
                    <div>Tổng số mặt hàng</div>
                </div>
            </div>
            <button class="btn btn-primary btn-sm form-control" id="refreshBaoCaoSanPham">Refresh dữ liệu</button>
        </div> <!-- Tổng số mặt hàng -->

        <div class="col-sm-6 col-lg-3">
            <div class="card text-white bg-success mb-2">
                <div class="card-body pb-0">
                    <div class="text-value" id="baocaoKhachHang_quantity">
                        <h1>0</h1>
                    </div>
                    <div>Tổng số khách hàng</div>
                </div>
            </div>
            <button class="btn btn-success btn-sm form-control" id="refreshBaoCaoKhachHang">Refresh dữ liệu</button>
        </div> <!-- Tổng số khách hàng -->

        <div class="col-sm-6 col-lg-3">
            <div class="card text-white bg-warning mb-2">
                <div class="card-body pb-0">
                    <div class="text-value" id="baocaoDonHang_quantity">
                        <h1>0</h1>
                    </div>
                    <div>Tổng số đơn hàng</div>
                </div>
            </div>
            <button class="btn btn-warning btn-sm form-control" id="refreshBaoCaoDonHang">Refresh dữ liệu</button>
        </div> <!-- Tổng số đơn hàng -->

        <div class="col-sm-6 col-lg-3">
            <div class="card text-white bg-danger mb-2">
                <div class="card-body pb-0">
                    <div class="text-value" id="baocaoGopY_quantity">
                        <h1>0</h1>
                    </div>
                    <div>Tổng số góp ý</div>
                </div>
            </div>
            <button class="btn btn-danger btn-sm form-control" id="refreshBaoCaoGopY">Refresh dữ liệu</button>
        </div> <!-- Tổng số góp ý -->

        <div id="ketqua"></div>
    </div><!-- row -->

    <div class="row">
        <!-- Biểu đồ thống kê loại sản phẩm -->
        <div class="col-sm-6 col-lg-6">
            <canvas id="chartOfobjChartThongKeLoaiSanPham"></canvas>
            <button class="btn btn-outline-primary btn-sm form-control" id="refreshThongKeLoaiSanPham">Refresh dữ liệu</button>
        </div><!-- col -->

        
    </div><!-- row -->
</div>


{% endblock %}
{# End Nội dung trong block content #}

{% block customscripts %}
<script src="/project-nentang/assets/vendor/Chart.js/Chart.min.js"></script>
<script>
    $(document).ready(function() {

        function getDuLieuBaoCaoTongSoMatHang() {
            $.ajax('/project-nentang/backend/ajax/baocao-tongsomathang-ajax.php', {
                success: function (data) {
                    var dataObj = JSON.parse(data);
                    var htmlString = `<h1>${dataObj.quantity}</h1>`;
                    $('#baocaoSanPham_quantity').html(htmlString);
                },
                error: function () {
                    var htmlString = `<h1>Không thể xử lý</h1>`;
                    $('#baocaoSanPham_quantity').html(htmlString);
                }
            });
        }

        $('#refreshBaoCaoSanPham').click(function(event) {
            event.preventDefault();

            getDuLieuBaoCaoTongSoMatHang();
        });

        // Mới mở web
        getDuLieuBaoCaoTongSoMatHang();

        // ----------------- Tổng số khách hàng --------------------------
        function getDuLieuBaoCaoTongSoKhachHang() {
            $.ajax('/project-nentang/backend/ajax/baocao-tongsokhachhang-ajax.php', {
                success: function (data) {
                    var dataObj = JSON.parse(data);
                    var htmlString = `<h1>${dataObj.quantity}</h1>`;
                    $('#baocaoKhachHang_quantity').html(htmlString);
                },
                error: function () {
                    var htmlString = `<h1>Không thể xử lý</h1>`;
                    $('#baocaoKhachHang_quantity').html(htmlString);
                }
            });
        }

        $('#refreshBaoCaoKhachHang').click(function(event) {
            event.preventDefault();

            getDuLieuBaoCaoTongSoKhachHang();
        });

        // Mới mở web
        getDuLieuBaoCaoTongSoKhachHang();
        

        // ------------------ Vẽ biểu đồ thống kê Loại sản phẩm -----------------
        // Vẽ biểu đổ Thống kê Loại sản phẩm sử dụng ChartJS
        var $objChartThongKeLoaiSanPham;
        var $chartOfobjChartThongKeLoaiSanPham = document.getElementById("chartOfobjChartThongKeLoaiSanPham").getContext(
            "2d");
        function renderChartThongKeLoaiSanPham() {
            $.ajax({
                url: '/project-nentang/backend/ajax/baocao-thongkeloaisanpham-ajax.php',
                type: "GET",
                success: function (response) {
                    debugger;
                    var data = JSON.parse(response);
                    var myLabels = [];
                    var myData = [];
                    $(data).each(function () {
                        myLabels.push((this.TenLoaiSanPham));
                        myData.push(this.quantity);
                    });
                    myData.push(0); // tạo dòng số liệu 0
                    if (typeof $objChartThongKeLoaiSanPham !== "undefined") {
                        $objChartThongKeLoaiSanPham.destroy();
                    }
                    $objChartThongKeLoaiSanPham = new Chart($chartOfobjChartThongKeLoaiSanPham, {
                        // Kiểu biểu đồ muốn vẽ. Các bạn xem thêm trên trang ChartJS
                        type: "bar",
                        data: {
                            labels: myLabels,
                            datasets: [{
                                data: myData,
                                borderColor: "#9ad0f5",
                                backgroundColor: "#9ad0f5",
                                borderWidth: 1
                            }]
                        },
                        // Cấu hình dành cho biểu đồ của ChartJS
                        options: {
                            legend: {
                                display: false
                            },
                            title: {
                                display: true,
                                text: "Thống kê Loại sản phẩm"
                            },
                            responsive: true
                        }
                    });
                }
            });
        };
        $('#refreshThongKeLoaiSanPham').click(function (event) {
            event.preventDefault();
            renderChartThongKeLoaiSanPham();
        });
    });
</script>
{% endblock %}
   

Các bài học

Chương trình học

Bao gồm Module, Chương, Bài học, Bài tập, Kiểm tra...

Chương trình học


  1. Bức tranh tổng thể về Lập trình WEB 1
    1. Sơ đồ vận hành của một Website
  2. Cài đặt môi trường Lập trình PHP 1
    1. Các chương trình cần thiết để Lập trình Web
  3. Thực hiện Dự án PHP thực tế mẫu - sử dụng TWIG template
  4. Dự án thực tế mẫu (TWIG template) - Trang web bán hàng trực tuyến - Thiết kế CSDL 3
    1. Mô hình thiết kế CSDL mẫu NetaShop
    2. Tạo cấu trúc (schema) database netashop
    3. Tạo dữ liệu mẫu (data seed / dummy data) cho netashop
  5. Dự án thực tế mẫu (TWIG template) - Trang web bán hàng trực tuyến - Thiết kế Backend 6
    1. Thiết kế bố cục (layouts) cho giao diện Backend
    2. Tạo chức năng CRUD (Thêm, Sửa, Xóa, Xem) danh mục phẳng
    3. Tạo chức năng CRUD (Thêm, Sửa, Xóa, Xem) danh mục có liên kết khóa ngoại
    4. Tạo chức năng CRUD (Thêm, Sửa, Xóa, Xem) upload hình Sản phẩm (upload đơn, mỗi lần 1 file)
    5. Tạo API lấy dữ liệu báo cáo thống kê
    6. Tạo trang Dashboard
  6. Dự án thực tế mẫu (TWIG template) - Trang web bán hàng trực tuyến - Thiết kế Frontend 11
    1. Thiết kế bố cục (layouts) cho giao diện Frontend
    2. Thực hiện Trang chủ Frontend
    3. Thực hiện Trang Đăng nhập Login
    4. Thực hiện Trang Đăng ký Register
    5. Thực hiện chức năng Kích hoạt Tài khoản
    6. Thực hiện Trang Liên hệ (có gởi mail thông báo)
    7. Thực hiện chức năng Đăng xuất
    8. Thực hiện Trang chi tiết Sản phẩm
    9. Thực hiện Xử lý cho phép Đặt hàng trong trang Chi tiết Sản phẩm
    10. Thực hiện Trang Giỏ hàng
    11. Thực hiện Trang tìm kiếm Sản phẩm

Bài học trước Bài học tiếp theo