Giáo trình Ứng dụng thiết kế Web

Bài 1: Lựa chọn đề tài  
1. Khảo sát nhu cầu  
Công ty ABC có nhu cầu thuê bạn xây dựng một trang web về tin tức để giới  
thiệu các thông tin cũng như các sản phẩm của công ty.  
2. Đặc tả bài toán  
Nhiệm vụ của bạn cần thiết kế cơ sở dữ liệu và xây dựng website thực hiện  
được các chức năng sau đây:  
Thiết kế các bảng csdl theo yêu cầu bài toán.  
Thiết kế giao diện website  
Thiết kế chức năng quản người dùng  
o Đăng ký  
o Đăng nhập  
o Đăng xuất  
Thiết kế chức năng quản lý chuyên mục  
o Thêm chuyên mục  
o Sửa chuyên mục  
o Xoá chuyên mục  
Thiết kế chức năng quản lý bài viết  
o Thêm bài viết  
o Sửa bài viết  
o Xoá bài viết  
Thiết kế chức năng hiển thị  
o Hiển thị bài viết  
o Hiển thị chuyên mục  
Yêu cầu kỹ thuật:  
- Ngôn ngữ lập trình: HTML, CSS, JavaScript, PHP  
- Lập trình hướng đối tượng; Lập trình theo mô hình MVC  
Bài 2: Thiết kế Database và xây dựng bố cục website  
1. Giới thiệu  
Để làm một Blog Tin Tức chúng ta sẽ tạo các bảng  
sau: users, categories, posts.  
Trong đó:  
1. Bảng users: chứa thông tin tài khoản thành viên trong Blog.  
2. Bảng categories: chứa các chuyên mục của Blog.  
3. Bảng posts: chứa các bài viết của Blog.  
Bảng users:  
Bảng categories:  
Bảng posts:  
2. Tạo bảng cho Database  
Sau khi bạn tải và cài đặt xong Xammp Server, truy cập vào phpmyadmin để  
bắt đầu tạo bảng theo đường dẫn: http://localhost/phpmyadmin/index.php  
Bước 1: Tạo một database tên là blog  
Bước 2:  
Chạy lệnh SQL sau để tạo bảng users:  
CREATE TABLE `blog`.`users` ( `id` INT NOT NULL AUTO_INCREMENT ,  
`username` VARCHAR(20) NOT NULL COMMENT 'tên đăng nhập' ,  
`password` VARCHAR(20) NOT NULL COMMENT 'mật khẩu' , `full_name`  
VARCHAR(50) NOT NULL COMMENT 'tên đầy đủ' , `level` INT NOT NULL  
DEFAULT '0' COMMENT 'quyền' , PRIMARY KEY (`id`)) ENGINE =  
InnoDB;  
Chạy lệnh SQL để tạo bảng categories:  
CREATE TABLE `blog`.`categories` ( `id` INT NOT NULL  
AUTO_INCREMENT , `name` VARCHAR(500) NOT NULL COMMENT 'tên  
chuyên mục' , `slug` VARCHAR(500) NOT NULL COMMENT 'tên chuyên  
mục không dấu' , PRIMARY KEY (`id`)) ENGINE = InnoDB;  
Chạy lệnh SQL để tạo bảng posts:  
CREATE TABLE `blog`.`posts` ( `id` INT NOT NULL AUTO_INCREMENT ,  
`title` VARCHAR(500) NOT NULL COMMENT 'tiêu đề bài viết' , `slug`  
VARCHAR(500) NOT NULL COMMENT 'tiêu đề không dấu' , `view_number`  
INT NOT NULL COMMENT 'lượt xem' , `image` VARCHAR(500) NOT NULL  
COMMENT 'ảnh' , `summary` TEXT NOT NULL COMMENT 'tóm tắt' ,  
`content` LONGTEXT NOT NULL COMMENT 'nội dung' , `category_id` INT  
NOT NULL COMMENT 'id chuyên mục' , `user_id` INT NOT NULL COMMENT  
'id thành viên' , `date` DATE NOT NULL COMMENT 'thời gian đăng' ,  
PRIMARY KEY (`id`)) ENGINE = InnoDB;  
3. Xây dựng bố cục thư mục  
Trong quá trình xây dựng và phát triển một dự án ngoài việc lựa chọn công  
nghệ, lựa chọn các thư viện hỗ trợ... thì việc tổ chức các thư mục, các thành phần,  
cấu trúc của project là việc cực kì quan trọng, nó là một trong những công việc cần  
phải thực hiện đầu tiên trước khi bạn bắt tay vào việc coding.  
Lợi ích của một project có cấu trúc chặc chẽ:  
Source code dễ nhìn, dễ hiểu(điều này sẽ rất lợi cho những người mới vào  
sau dễ dàng làm quen với dự án hơn)  
Việc quản lý, bảo trì project sẽ trở nên dễ dàng và hiệu quả  
điều cuối cùng nó sẽ giúp cho project của chúng ta nhìn trờ nên chuyên  
nghiệp hơn  
Xây dựng bố cục  
Trong bài học này chúng ta sẽ bắt đầu xây dựng bố cục thư mục của Blog Tin tức.  
Thông thường các project của chúng ta sẽ chia thành các loại như sau:  
Trong đó:  
1. Folder Controller: sẽ chứa các file có chức năng nhận request từ client, điều  
phối các Model và View để thể cho ra output thích hợp trả kết quả về  
cho người dung.  
2. Folder Lib: sẽ chứa nhưng thư viện hoặc những function.  
3. Folder Model: chứa các file có chức năng giao tiếp, truy vấn tới sơ sở dữ liệu.  
4. Folder Public: chứa hình ảnh, css, font,....  
5. Folder View: chứa các file xử lý giao diện.  
6. File Index.php: là file chính của của chúng ta, file này có tác dụng nhận các  
request để điều hướng đến các View và Controller tương ứng để xử lý.  
Bài 3: Lập trình các chức năng  
1. Tạo kết nối với CSDL  
Tạo kết nối  
Đầu tiên chúng ta tạo file Database.php trong folder Model và copy và paste  
đoạn code dưới đây:  
<?php  
class Database  
{
public $conn = NULL;  
private $server = 'localhost';  
private $dbName = 'blog';  
private $user = 'root';  
private $password = '';  
// Hàm kết nối CSDL  
public function connect()  
{
$this->conn = new mysqli($this->server, $this->user,  
$this->password, $this->dbName);  
if ($this->conn->connect_error) {  
printf($this->conn->connect_error);  
exit();  
}
$this->conn->set_charset("utf8");  
}
{
// Hàm đóng kết nối CSDL  
public function closeDatabase()  
if ($this->conn) {  
$this->conn->close();  
}
}
}
Gọi hàm kết nối  
Sau khi kết nối xong với CSDL, chúng ta viết đoạn code dưới đây vào  
file index.php  
<?php  
require('Model/Database.php');  
$db = new Database;  
$db->connect();  
/*Xử lý các request*/  
$db->closeDatabase();  
2. Thiết kế giao diện cho trang Admin  
Sau khi tạo kết nối với Database thành công, chúng ta bắt đầu thiết kế giao  
diện cho trang quản trị Admin  
Download template Admin tại đây.  
Thiết lập bố cục folder  
Sau khi đã tải template, giải nén bằng winrar hoặc 7-zip được  
folder AdminLTE-master.  
Copy toàn bộ folder dist plugins trong AdminLTE-master vào thư  
mục Public/admin.  
Tiếp tục tạo các file folder như hình vẽ dưới đây:  
Thiết kế trang chủ Admin  
Sau khi đã tạo bố cục cho trang chủ xong chúng ta bắt đầu tiến hành viết code  
cho từng file.  
File header.php: copy và paste đoạn code sau vào file header.php (đường  
dẫn: blog/View/admin/layouts/header.php)  
<!DOCTYPE html>  
<html>  
<head>  
<meta charset="utf-8">  
<meta http-equiv="X-UA-Compatible" content="IE=edge">  
<title>AdminLTE 3 | Dashboard</title>  
<!-- Tell the browser to be responsive to screen width -->  
<meta name="viewport" content="width=device-width, initial-  
scale=1">  
<!-- Font Awesome -->  
<link rel="stylesheet"  
href="../../Public/admin/plugins/fontawesome-  
free/css/all.min.css">  
<!-- Ionicons -->  
<link rel="stylesheet"  
s.min.css">  
<!-- Tempusdominus Bbootstrap 4 -->  
<link rel="stylesheet"  
href="../../Public/admin/plugins/tempusdominus-bootstrap-  
4/css/tempusdominus-bootstrap-4.min.css">  
<!-- iCheck -->  
<link rel="stylesheet"  
href="../../Public/admin/plugins/icheck-bootstrap/icheck-  
bootstrap.min.css">  
<!-- JQVMap -->  
<link rel="stylesheet"  
href="../../Public/admin/plugins/jqvmap/jqvmap.min.css">  
<!-- Theme style -->  
<link rel="stylesheet"  
href="../../Public/admin/dist/css/adminlte.min.css">  
<!-- overlayScrollbars -->  
<link rel="stylesheet"  
href="../../Public/admin/plugins/overlayScrollbars/css/OverlaySc  
rollbars.min.css">  
<!-- Daterange picker -->  
<link rel="stylesheet"  
href="../../Public/admin/plugins/daterangepicker/daterangepicker  
.css">  
<!-- summernote -->  
<link rel="stylesheet"  
href="../../Public/admin/plugins/summernote/summernote-bs4.css">  
<!-- Google Font: Source Sans Pro -->  
<link  
0,400,400i,700" rel="stylesheet">  
</head>  
<body class="hold-transition sidebar-mini layout-fixed">  
<div class="wrapper">  
<!-- Navbar -->  
<nav class="main-header navbar navbar-expand navbar-  
white navbar-light">  
<!-- Left navbar links -->  
<ul class="navbar-nav">  
<li class="nav-item">  
<a class="nav-link" data-widget="pushmenu"  
href="#"><i class="fas fa-bars"></i></a>  
</li>  
<li class="nav-item d-none d-sm-inline-block">  
<a href="#" class="nav-link">Home</a>  
</li>  
<li class="nav-item d-none d-sm-inline-block">  
<a href="#" class="nav-link">Contact</a>  
</li>  
</ul>  
<!-- SEARCH FORM -->  
<form class="form-inline ml-3">  
<div class="input-group input-group-sm">  
<input class="form-control form-control-  
navbar" type="search" placeholder="Search" aria-label="Search">  
<div class="input-group-append">  
<button class="btn btn-navbar"  
type="submit">  
<i class="fas fa-search"></i>  
</button>  
</div>  
</div>  
</form>  
<!-- Right navbar links -->  
<ul class="navbar-nav ml-auto">  
<!-- Messages Dropdown Menu -->  
<li class="nav-item dropdown">  
<a class="nav-link" data-toggle="dropdown"  
href="#">  
<i class="far fa-comments"></i>  
<span class="badge badge-danger navbar-  
badge">3</span>  
</a>  
<div class="dropdown-menu dropdown-menu-lg  
dropdown-menu-right">  
<a href="#" class="dropdown-item">  
<!-- Message Start -->  
<div class="media">  
<img  
src="../../Public/admin/dist/img/user1-128x128.jpg" alt="User  
Avatar" class="img-size-50 mr-3 img-circle">  
<div class="media-body">  
<h3 class="dropdown-item-  
title">  
Brad Diesel  
<span class="float-right text-sm text-  
danger"><i class="fas fa-star"></i></span>  
</h3>  
<p class="text-sm">Call me  
whenever you can...</p>  
<p class="text-sm text-  
muted"><i class="far fa-clock mr-1"></i> 4 Hours Ago</p>  
</div>  
</div>  
<!-- Message End -->  
</a>  
<div class="dropdown-divider"></div>  
<a href="#" class="dropdown-item">  
<!-- Message Start -->  
<div class="media">  
<img  
src="../../Public/admin/dist/img/user8-128x128.jpg" alt="User  
Avatar" class="img-size-50 img-circle mr-3">  
<div class="media-body">  
<h3 class="dropdown-item-  
title">  
John Pierce  
<span class="float-right text-sm text-  
muted"><i class="fas fa-star"></i></span>  
</h3>  
<p class="text-sm">I got  
<p class="text-sm text-  
your message bro</p>  
muted"><i class="far fa-clock mr-1"></i> 4 Hours Ago</p>  
</div>  
</div>  
<!-- Message End -->  
</a>  
<div class="dropdown-divider"></div>  
<a href="#" class="dropdown-item">  
<!-- Message Start -->  
<div class="media">  
<img  
src="../../Public/admin/dist/img/user3-128x128.jpg" alt="User  
Avatar" class="img-size-50 img-circle mr-3">  
<div class="media-body">  
<h3 class="dropdown-item-  
title">  
Nora Silvester  
<span class="float-right text-sm text-  
warning"><i class="fas fa-star"></i></span>  
</h3>  
<p class="text-sm">The  
subject goes here</p>  
<p class="text-sm text-  
muted"><i class="far fa-clock mr-1"></i> 4 Hours Ago</p>  
</div>  
</div>  
<!-- Message End -->  
</a>  
<div class="dropdown-divider"></div>  
<a href="#" class="dropdown-item  
dropdown-footer">See All Messages</a>  
</div>  
</li>  
<!-- Notifications Dropdown Menu -->  
<li class="nav-item dropdown">  
<a class="nav-link" data-toggle="dropdown"  
href="#">  
<i class="far fa-bell"></i>  
<span class="badge badge-warning navbar-  
badge">15</span>  
</a>  
<div class="dropdown-menu dropdown-menu-lg  
dropdown-menu-right">  
<span class="dropdown-item dropdown-  
header">15 Notifications</span>  
<div class="dropdown-divider"></div>  
<a href="#" class="dropdown-item">  
<i class="fas fa-envelope mr-2"></i>  
4 new messages  
<span class="float-right text-muted  
text-sm">3 mins</span>  
</a>  
<div class="dropdown-divider"></div>  
<a href="#" class="dropdown-item">  
<i class="fas fa-users mr-2"></i> 8  
friend requests  
<span class="float-right text-muted  
text-sm">12 hours</span>  
</a>  
<div class="dropdown-divider"></div>  
<a href="#" class="dropdown-item">  
<i class="fas fa-file mr-2"></i> 3  
new reports  
<span class="float-right text-muted  
text-sm">2 days</span>  
</a>  
<div class="dropdown-divider"></div>  
<a href="#" class="dropdown-item  
dropdown-footer">See All Notifications</a>  
</div>  
</li>  
</ul>  
</nav>  
<!-- Main Sidebar Container -->  
<aside class="main-sidebar sidebar-dark-primary  
elevation-4">  
<!-- Brand Logo -->  
<a href="index3.html" class="brand-link">  
<img  
src="../../Public/admin/dist/img/AdminLTELogo.png" alt="AdminLTE  
Logo" class="brand-image img-circle elevation-3" style="opacity:  
.8">  
<span class="brand-text font-weight-  
light">Admin</span>  
</a>  
<!-- Sidebar -->  
<div class="sidebar">  
<!-- Sidebar user panel (optional) -->  
<div class="user-panel mt-3 pb-3 mb-3 d-flex">  
<div class="image">  
<img  
src="../../Public/admin/dist/img/user2-160x160.jpg" class="img-  
circle elevation-2" alt="User Image">  
</div>  
<div class="info">  
<a href="#" class="d-block">Nguyễn Trọng  
Chính</a>  
</div>  
</div>  
<!-- Sidebar Menu -->  
<nav class="mt-2">  
<ul class="nav nav-pills nav-sidebar flex-  
column" data-widget="treeview" role="menu" data-  
accordion="false">  
<!-- Add icons to the links using the  
.nav-icon class  
with font-awesome or any other icon font library -->  
<li class="nav-item has-treeview">  
<a href="index.php" class="nav-link  
active">  
<i class="nav-icon fas fa-  
tachometer-alt"></i>  
<p>  
Trang chủ  
</p>  
</a>  
</li>  
<li class="nav-item has-treeview">  
<a href="#" class="nav-link">  
<i class="nav-icon fas fa-  
copy"></i>  
<p>  
Chuyên mục  
<i class="fas fa-angle-left  
right"></i>  
<span class="badge badge-  
info right">6</span>  
</p>  
</a>  
<ul class="nav nav-treeview">  
<li class="nav-item">  
<a href="#" class="nav-  
link">  
<i class="far fa-circle  
nav-icon"></i>  
<p>Thêm</p>  
</a>  
</li>  
<li class="nav-item">  
<a href="#" class="nav-  
link">  
<i class="far fa-circle  
nav-icon"></i>  
<p>Danh sách</p>  
</a>  
</li>  
</ul>  
</li>  
<li class="nav-item has-treeview">  
<a href="#" class="nav-link">  
<i class="nav-icon fas fa-  
copy"></i>  
<p>  
Bài viết  
<i class="fas fa-angle-left  
right"></i>  
<span class="badge badge-  
info right">6</span>  
</p>  
</a>  
<ul class="nav nav-treeview">  
<li class="nav-item">  
<a href="#" class="nav-  
link">  
<i class="far fa-circle  
nav-icon"></i>  
<p>Thêm</p>  
</a>  
</li>  
<li class="nav-item">  
<a href="#" class="nav-  
link">  
<i class="far fa-circle  
nav-icon"></i>  
<p>Danh sách</p>  
</a>  
</li>  
</ul>  
</li>  
<li class="nav-item has-treeview">  
<a href="#" class="nav-link">  
<i class="nav-icon fas fa-  
copy"></i>  
<p>  
Thành viên  
<i class="fas fa-angle-left  
right"></i>  
<span class="badge badge-  
info right">6</span>  
</p>  
</a>  
<ul class="nav nav-treeview">  
<li class="nav-item">  
<a href="#" class="nav-  
link">  
<i class="far fa-circle  
nav-icon"></i>  
<p>Thêm</p>  
</a>  
</li>  
<li class="nav-item">  
<a href="#" class="nav-  
link">  
<i class="far fa-circle  
nav-icon"></i>  
<p>Danh sách</p>  
</a>  
</li>  
</ul>  
</li>  
</ul>  
</nav>  
<!-- /.sidebar-menu -->  
</div>  
<!-- /.sidebar -->  
</aside>  
File footer.php: Viết đoạn code sau vào file footer.php (đường  
dẫn: blog/View/admin/layouts/footer.php)  
<footer class="main-footer">  
<strong>Copyright  
&copy;  
2014-2019  
<a  
href="#">BlogTinTuc</a>.</strong>  
All rights reserved.  
<div class="float-right d-none d-sm-inline-block">  
<b>Version</b> 3.0.3-pre  
</div>  
</footer>  
<!-- Control Sidebar -->  
<aside class="control-sidebar control-sidebar-dark">  
<!-- Control sidebar content goes here -->  
</aside>  
<!-- /.control-sidebar -->  
</div>  
<!-- ./wrapper -->  
<script  
src="https://unpkg.com/ionicons@5.0.0/dist/ionicons.js"></script  
>
<!-- jQuery -->  
<script  
src="../../Public/admin/plugins/jquery/jquery.min.js"></script>  
<!-- jQuery UI 1.11.4 -->  
<script  
src="../../Public/admin/plugins/jquery-ui/jquery-  
ui.min.js"></script>  
<!-- Resolve conflict in jQuery UI tooltip with Bootstrap tooltip  
-->  
<script>  
$.widget.bridge('uibutton', $.ui.button)  
</script>  
<!-- Bootstrap 4 -->  
<script  
src="../../Public/admin/plugins/bootstrap/js/bootstrap.bundle.mi  
n.js"></script>  
<!-- ChartJS -->  
<script  
src="../../Public/admin/plugins/chart.js/Chart.min.js"></script>  
<!-- Sparkline -->  
<script  
src="../../Public/admin/plugins/sparklines/sparkline.js"></scrip  
t>  
<!-- JQVMap -->  
<script  
src="../../Public/admin/plugins/jqvmap/jquery.vmap.min.js"></scr  
ipt>  
<script  
src="../../Public/admin/plugins/jqvmap/maps/jquery.vmap.usa.js">  
</script>  
<!-- jQuery Knob Chart -->  
<script  
src="../../Public/admin/plugins/jquery-  
knob/jquery.knob.min.js"></script>  
<!-- daterangepicker -->  
<script  
src="../../Public/admin/plugins/moment/moment.min.js"></script>  
<script  
src="../../Public/admin/plugins/daterangepicker/daterangepicker.  
js"></script>  
<!-- Tempusdominus Bootstrap 4 -->  
<script src="../../Public/admin/plugins/tempusdominus-bootstrap-  
4/js/tempusdominus-bootstrap-4.min.js"></script>  
<!-- Summernote -->  
<script  
src="../../Public/admin/plugins/summernote/summernote-  
bs4.min.js"></script>  
<!-- overlayScrollbars -->  
<script  
src="../../Public/admin/plugins/overlayScrollbars/js/jquery.over  
layScrollbars.min.js"></script>  
<!-- AdminLTE App -->  
<script src="../../Public/admin/dist/js/adminlte.js"></script>  
<!-- AdminLTE dashboard demo (This is only for demo purposes) -->  
<script  
src="../../Public/admin/dist/js/pages/dashboard.js"></script>  
<!-- AdminLTE for demo purposes -->  
<script src="../../Public/admin/dist/js/demo.js"></script>  
</body>  
</html>  
File home.php:  
copy  
và  
paste  
đoạn  
code  
sau  
vào  
file footer.php (đường dẫn: blog/View/admin/pages/home.php)  
<div class="content-wrapper" style="min-height: 365px;">  
<div class="content-header">  
<div class="container-fluid">  
<div class="row mb-2">  
<div class="col-sm-6">  
<h1 class="m-0 text-dark">Trang  
chủ</h1>  
</div><!-- /.col -->  
<div class="col-sm-6">  
<ol class="breadcrumb float-sm-  
<li class="breadcrumb-  
<li class="breadcrumb-item  
right">  
item"><a href="#">Home</a></li>  
active">Admin</li>  
</ol>  
</div>  
</div>  
</div>  
</div>  
<section class="content">  
<div class="container-fluid">  
<div class="row">  
<div class="col-lg-3 col-6">  
<!-- small box -->  
<div class="small-box bg-info">  
<div class="inner">  
<h3>150</h3>  
<h4>CHUYÊN MỤC</h4>  
</div>  
<div class="icon">  
<i class="ion ion-  
bag"></i>  
</div>  
<a href="#" class="small-  
box-footer">Chi  
tiết  
<i  
class="fas  
fa-arrow-circle-  
right"></i></a>  
</div>  
</div>  
<!-- ./col -->  
<div class="col-lg-3 col-6">  
<!-- small box -->  
<div  
class="small-box  
bg-  
success">  
<div class="inner">  
<h3>53<sup  
style="font-size: 20px">%</sup></h3>  
Tải về để xem bản đầy đủ
docx 130 trang Thùy Anh 05/05/2022 5020
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Ứng dụng thiết kế Web", để tải tài liệu gốc về máy hãy click vào nút Download ở trên

File đính kèm:

  • docxgiao_trinh_ung_dung_thiet_ke_web.docx