You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
4.Tạo bố cục (layout) cho ứng dụng web sử dụng Twig
Mỗi ứng dụng web thường sẽ có một bố cục (layout) đồng nhất về giao diện.
Layout backend: bố cục dùng cho trang Quản trị (admin).
Layout frontend: bố cục dùng cho trang Hiển thị đối với client (khách hàng).
Ý tưởng sử dụng bố cục (layout) là để có thể kế thừa lại giao diện; sử dụng cùng lúc nhiều nơi trong các trang của ứng dụng; dễ dàng tùy chỉnh bố cục khi cần thiết;...
Cách thực hiện thường thấy:
Ứng dụng web sẽ tạo 1 layout chung cho toàn ứng dụng web.
Các trang (hay chức năng) của ứng dụng sẽ kế thừa layout chung và nhúng các thành phần giao diện tương ứng với trang (hay chức năng) vào thành phần đã đục lỗ (hay chừa chỗ sẵn) trong layout chung.
Step 1: chuẩn bị thư viện frontend để tạo bố cục trang web
Chúng ta sẽ sử dụng một số thư viện giao diện nổi tiếng như sau:
+---assets
| \---vendor
| \---feather <- tạo thư mục feather để tiện quản lý
| +---feather.min.js <- download file về
| ...
| \***Các gói thư viện frontend khác
Step 1.5. Chuẩn bị các file custom css, js do mình tự viết
Trong môi trường thiết kế web, đa số chúng ta sử dụng các thư viện CSS, JS của các nhà cung cấp. Tùy theo nhu cầu sử dụng, chúng ta thường hay custom các giao diện CSS, hay có các đoạn JS tự viết để tùy chỉnh ứng dụng theo nhu cầu.
Để thuận tiện sử dụng và không gây ảnh hưởng đến các thư viện của các nhà cung cấp. Chúng ta sẽ tạo cấu trúc thư mục như sau:
Step 2: tạo file template quản lý bố cục ứng dụng web
Để dễ dàng quản lý các file template về bố cục. Chúng ta tạo mới thư mục /templates/backend/layouts
Tạo file /templates/backend/layouts/layout.html.twig
+---php
| \---twig <- Đây là thư mục gốc của dự án, các bạn có thể đặt tên các bạn...
| \---templates
| \---backend
| \---layouts
| \---layout.html.twig <- Tạo file
Nội dung file:
<!doctype html><htmllang="vi"><head><!-- Required meta tags --><metacharset="utf-8"><metaname="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><!-- Bootstrap CSS --><linkrel="stylesheet" href="/php/twig/assets/vendor/bootstrap/css/bootstrap.min.css" type="text/css" />
<!-- Custom css - Các file css do chúng ta tự viết --><linkrel="stylesheet" href="/php/twig/assets/backend/css/style.css" type="text/css" />
<!-- Block title - Đục lỗ trên giao diện bố cục chung, đặt tên là `title` --><title>Nền tảng - Kiến thức cơ bản về WEB |
{% block title %}
{% endblock %}
</title><!-- End block title --></head><body><navclass="navbar navbar-dark fixed-top bg-dark flex-md-nowrap p-0 shadow"><aclass="navbar-brand col-sm-3 col-md-2 mr-0" href="#">Nền tảng</a><inputclass="form-control form-control-dark w-100" type="text" placeholder="Tìm kiếm" aria-label="Search"><ulclass="navbar-nav px-3"><liclass="nav-item text-nowrap"><aclass="nav-link" href="#">Đăng xuất</a></li></ul></nav><divclass="container-fluid"><divclass="row"><navclass="col-md-2 d-none d-md-block bg-light sidebar"><divclass="sidebar-sticky"><ulclass="nav flex-column"><liclass="nav-item"><aclass="nav-link active" href="#"><spandata-feather="home"></span>
Bảng tin <spanclass="sr-only">(current)</span></a></li></ul></div></nav><mainrole="main" class="col-md-9 ml-sm-auto col-lg-10 px-4"><divclass="d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-3 pb-2 mb-3 border-bottom"><!-- Block headline - Đục lỗ trên giao diện bố cục chung, đặt tên là `headline` -->
{% block headline %}
{% endblock %}
<!-- End block headline --></div><!-- Block content - Đục lỗ trên giao diện bố cục chung, đặt tên là `content` -->
{% block content %}
{% endblock %}
<!-- End block content --></main></div></div><!-- Optional JavaScript --><!-- jQuery first, then Popper.js, then Bootstrap JS --><scriptsrc="/php/twig/assets/vendor/jquery/jquery.min.js"></script><scriptsrc="/php/twig/assets/vendor/popperjs/popper.min.js"></script><scriptsrc="/php/twig/assets/vendor/bootstrap/js/bootstrap.min.js"></script><scriptsrc="/php/twig/assets/vendor/feather/feather.min.js"></script><!-- Custom script - Các file js do mình tự viết --><scriptsrc="/php/twig/assets/backend/js/app.js"></script><!-- Block custom-scripts - Đục lỗ trên giao diện bố cục chung, đặt tên là `custom-scripts` -->
{% block customscripts %}
{% endblock %}
<!-- End block custom-scripts --></body></html>
Step 3: tạo file template Dashboard
Để dễ dàng quản lý các trang tĩnh (static). Ta sẽ tạo thư mục /pages/ để quản lý các trang này.
Trang Dashboard (bảng tin) đơn giản là một nội dung tĩnh; hoặc nếu làm tốt hơn, các bạn có thể lưu nội dung trang trong database và truy xuất; hiển thị vài báo cáo thông số cần thiết trong hệ thống...
Tạo file /backend/pages/dashboard.php
+---php
| \---twig <- Đây là thư mục gốc của dự án, các bạn có thể đặt tên các bạn...
| \---backend
| \---pages
| \---dashboard.php <- Tạo file
Nội dung file:
<?php// Include file cấu hình ban đầu của `Twig`require_once __DIR__.'/../../bootstrap.php';
// Tạo danh sách sản phẩm mẫu// Các bạn có thể viết các câu lệnh truy xuất vào database để lấy dữ liệu, ...$products = [
[
'name' => 'Notebook',
'description' => 'Core i7',
'value' => 800.00,
'date_register' => '2017-06-22',
],
[
'name' => 'Mouse',
'description' => 'Razer',
'value' => 125.00,
'date_register' => '2017-10-25',
],
[
'name' => 'Keyboard',
'description' => 'Mechanical Keyboard',
'value' => 250.00,
'date_register' => '2017-06-23',
],
];
// Yêu cầu `Twig` vẽ giao diện được viết trong file `backend/pages/dashboard.html.twig`// với dữ liệu truyền vào file giao diện được đặt tên là `products`echo$twig->render('backend/pages/dashboard.html.twig', ['products' => $products] );
Step 4: tạo file template Dashboard kế thừa giao diện layout chung
Để dễ dàng quản lý các chức năng tương ứng. Chúng ta sẽ tạo thư mục tương ứng với chức năng
Tạo file /templates/backend/pages/dashboard.html.twig
+---php
| \---twig <- Đây là thư mục gốc của dự án, các bạn có thể đặt tên các bạn...
| \---templates
| \---backend
| \---pages
| \---dashboard.html.twig <- Tạo file
Nội dung file:
{# Kế thừa layout backend #}
{% extends "backend/layouts/layout.html.twig" %}
{# Nội dung trong block title #}
{% block title %}
Bảng tin
{% endblock %}
{# End Nội dung trong block title #}
{# Nội dung trong block headline #}
{% block headline %}
Bảng tin
{% endblock %}
{# End Nội dung trong block headline #}
{# Nội dung trong block content #}
{% block content %}
<tableborder="1" style="width: 80%;"><thead><tr><td>Product</td><td>Description</td><td>Value</td><td>Date</td></tr></thead><tbody>
{% for product in products %}
<tr><td>{{ product.name }}</td><td>{{ product.description }}</td><td>{{ product.value }}</td><td>{{ product.date_register|date("m/d/Y") }}</td></tr>
{% endfor %}
</tbody></table>
{% endblock %}
{# End Nội dung trong block content #}