TỔ NG QUAN
T ổ ng quan v ề World Wide Web
World Wide Web (WWW) hay còn gọi là web là một dịch vụ phổ biến nhất hiện nay trên Internet, 85% các giao dịch trên Internet ước lượng thuộc về
Ngày nay, số lượng website trên toàn cầu đã đạt đến con số khổng lồ, cho phép người dùng truy cập thông tin đa dạng bao gồm văn bản, hình ảnh, âm thanh và video từ khắp nơi trên thế giới.
Thông qua website, các quý công ty có thể giảm thiểu tối đa chi phí in ấn và phân phát tài liệu cho khách hàng ở nhiều nơi.
1.1.2 Cách tạo ra trang web
Có nhiều cách để tạo trang web, có thể tạo trang web trên bất kì chương trình xử lí văn bản nào:
- Tạo web bằng cách viết mã nguồn bởi một trình soạn thảo văn bản như:
Notepad, WordPad, v.v là những chương trình soạn thảo văn bản có sẵn trong Window
- Thiết kế bằng cách dùng web Wizard và công cụ của Word 97, Word
- Thiết kế web bằng các phần mềm chuyên nghiệp: PHPStorm,
Dreamweaver, Nescape Editor, sẽ giúp thiết kế trang web dễ dàng hơn, nhanh chóng hơn, phần lớn mã lệnh HTML sẽ có sẵn trong phần code
Để phát triển một ứng dụng web hoàn chỉnh và có tính thương mại, cần kết hợp Client Script (kịch bản trình khách) và Server Script (kịch bản trên trình chủ) cùng với một cơ sở dữ liệu, chẳng hạn như MS SQL.
Access, SQL Server, MySQL, Oracle,
- Khi muốn triển khai ứng dụng web trên mạng, ngoài các điều kiện về cấu hình phần cứng, cần có trình chủ web thường gọi là web Server.
1.1.3 Trình duyệt web (web Client hay web Browser)
Trình duyệt Web là phần mềm cho phép người dùng truy cập và tương tác với dữ liệu trên Internet Chức năng chính của trình duyệt là nhận yêu cầu từ người dùng, gửi chúng đến các máy chủ Web và hiển thị dữ liệu nhận được lên màn hình Để sử dụng dịch vụ World Wide Web (WWW), người dùng cần có một trình duyệt Web và kết nối Internet thông qua nhà cung cấp dịch vụ (ISP) Một số trình duyệt phổ biến hiện nay bao gồm Microsoft Internet Explorer, Google Chrome và Mozilla Firefox.
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 13
Webserver là một máy tính kết nối Internet, chạy các phần mềm chuyên dụng Nó thực hiện các nhiệm vụ quan trọng như tìm kiếm trang web thích hợp, xử lý dữ liệu và kiểm tra tính hợp lệ của thông tin.
Webserver là phần mềm chịu trách nhiệm cung cấp dịch vụ web và lưu trữ cơ sở dữ liệu, hỗ trợ nhiều công nghệ khác nhau.
- IIS (Internet Information Service): Hỗ trợ ASP, mở rộng hỗ trợ PHP -
- Tomcat: Hỗ trợ JSP (Java Servlet Page).
T ổ ng quan v ề Html-css
- Thẻ định nghĩa trang html, kiểu khai báo của html 5
Thẻ title là một thành phần bắt buộc trong HTML, xuất hiện trên thanh tiêu đề của trình duyệt mỗi khi người dùng truy cập vào trang web Thẻ này giúp hiển thị chuỗi tiêu đề của trang, đóng vai trò quan trọng trong việc tối ưu hóa SEO và cải thiện trải nghiệm người dùng.
Thẻ chứa tất cả thông tin được khai báo sẽ hiển thị trên trang web, và những thông tin này có thể được người dùng nhìn thấy trực tiếp trên giao diện của trang.
- Thẻ… định nghĩa một nội dung
- Thẻ
tạo một đoạn mới
- Thẻ thay đổi phông chữ, kích cỡ và màu kí tự
Thẻ là thẻ dùng để định dạng bảng trên trang web, và sau khi khai báo thẻ này, cần phải khai báo các thẻ hàng cùng với thẻ cột và các thuộc tính liên quan.
- Thẻ cho phép chèn hình ảnh vào trang web Thẻ này thuộc loại thẻ không có thẻđóng.
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 14
Thẻ được sử dụng để tạo liên kết giữa các trang web, cũng như kết nối đến địa chỉ Internet, địa chỉ email, hoặc Intranet (URL), và các tệp tin trong mạng cục bộ (UNC).
Thẻ cho phép người dùng nhập dữ liệu hoặc thực hiện các hành động như gửi biểu mẫu Các loại thẻ Input bao gồm: text, password, submit, button, reset, checkbox, radio, hidden và image.
- Thẻ < textarea> < \textarea> cho phép người dùng nhập liệu với rất nhiều dòng Với thẻ này không thể giới hạn chiều dài lớn nhất trên trang Web
Thẻ trong HTML cho phép người dùng lựa chọn một phần tử từ danh sách các phương thức đã được định nghĩa trước Khi thẻ cho phép chọn một phần tử trong danh sách, nó hoạt động tương tự như một combobox.
cho phép người dùng chọn nhiều phần tử cùng một lần trong danh sách phần tử, thẻ đó là dạng listbox
Thẻ được sử dụng để gửi dữ liệu từ người dùng trên trang web lên máy chủ, với hai phương thức chính là POST và GET Một trang web có thể chứa nhiều thẻ khác nhau, nhưng các thẻ này không được lồng vào nhau, và mỗi thẻ cần được khai báo hành động (action) để chỉ định đến một trang xử lý khác.
Css là ngôn ngữ tạo phong cách cho trang web – Cascading Style Sheet language. CSS được phát triển bởi W3C (World Wide Web Consortium) vào năm 1996
CSS được sử dụng để tạo phong cách và định kiểu cho các yếu tố trong ngôn ngữ đánh dấu như HTML Nó cho phép điều chỉnh định dạng cho nhiều trang web cùng lúc, giúp tiết kiệm công sức cho người viết web CSS phân biệt cách hiển thị của trang web với nội dung chính bằng cách kiểm soát bố cục, màu sắc và font chữ.
HTML và CSS có mối quan hệ chặt chẽ, trong đó HTML là ngôn ngữ đánh dấu cơ bản cho website, còn CSS chịu trách nhiệm định hình phong cách và giao diện của trang Sự kết hợp giữa hai ngôn ngữ này là không thể tách rời, tạo nên nền tảng vững chắc cho mọi trang web.
Các stylesheet ngoài được lưu trữ dưới dạng các tập tin CSS
Bootstrap is a framework that includes HTML, CSS, and JavaScript templates for developing responsive websites It streamlines the web development process, making it faster and easier to create websites that are fully responsive.
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 15
Ngôn ngữ PHP
PHP là chữ viết tắt của “Personal Home Page do” Rasmus Lerdorf tạo ra năm
Năm 1994, PHP bắt đầu được áp dụng trong môi trường chuyên nghiệp nhờ tính hữu dụng và khả năng phát triển, và từ đó trở thành "PHP: Hypertext Preprocessor" PHP thực chất là một ngôn ngữ kịch bản nhúng trong HTML, cho phép mã PHP được tích hợp một cách linh hoạt trong các trang HTML.
PHP là một ngôn ngữ lập trình mạnh mẽ, chuyên dùng cho phát triển ứng dụng phía máy chủ, với khả năng hoạt động độc lập trên nhiều hệ điều hành khác nhau như Windows và Unix Điều này có nghĩa là tất cả các xử lý của PHP đều diễn ra trên máy chủ, và mã kịch bản PHP có thể chạy trên các máy chủ khác mà không cần chỉnh sửa nhiều Tính năng này giúp PHP trở thành một công nghệ linh hoạt và phổ biến trong việc phát triển web.
PHP chạy trên môi trường Webserver và lưu trữ dữ liệu thông qua hệ quản trị cơ sở dữ liệu nên PHP thường đi kèm với Apache, MySQL….
Apache là phần mềm máy chủ web, chịu trách nhiệm nhận yêu cầu từ trình duyệt của người dùng, chuyển giao cho PHP để xử lý và sau đó gửi kết quả trở lại trình duyệt.
MySQL, giống như các hệ quản trị cơ sở dữ liệu khác như Postgres, Oracle và SQL Server, đóng vai trò quan trọng trong việc lưu trữ và truy vấn dữ liệu hiệu quả.
1.3.2 Lý do nên dùng PHP
PHP được sử dụng làm web động vì nó nhanh, dễ dàng, tốt hơn so với các giải pháp khác.
PHP có khả năng tích hợp mạnh mẽ với hầu hết các cơ sở dữ liệu, mang lại tính linh hoạt, bền vững và khả năng phát triển không giới hạn Là mã nguồn mở, PHP cung cấp tất cả các tính năng này miễn phí, đồng thời cộng đồng phát triển web luôn nỗ lực cải tiến và khắc phục lỗi, giúp nâng cao hiệu suất của ngôn ngữ lập trình này.
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 16
PHP là ngôn ngữ lập trình dễ tiếp cận cho người mới, đồng thời cũng đáp ứng tốt các nhu cầu của lập trình viên chuyên nghiệp Với khả năng thực hiện xuất sắc mọi ý tưởng, PHP hiện đang được sử dụng trên hơn 13 triệu website.
PHP là ngôn ngữ lập trình phía máy chủ, cho phép xử lý mã lệnh trực tiếp trên máy chủ để phục vụ các trang web theo yêu cầu của người dùng qua trình duyệt.
Yêu cầu URL Gọi mã kịch bản
Khi người dùng truy cập website viết bằng PHP, máy chủ sẽ đọc và xử lý mã lệnh PHP theo các hướng dẫn được mã hóa Mã lệnh này yêu cầu máy chủ gửi dữ liệu phù hợp, thường là mã lệnh HTML, đến trình duyệt web Trình duyệt sẽ hiển thị dữ liệu này như một trang HTML tiêu chuẩn PHP thực chất là một trang HTML có nhúng mã PHP và có phần mở rộng là php, với phần mở của PHP được đặt trong thẻ mở.
Khi một file PHP được gửi đến Server, Server sẽ phân tích nội dung của file, lọc và thực thi các đoạn mã PHP Kết quả từ việc thực thi mã PHP sẽ được thay thế vào vị trí ban đầu trong file, và cuối cùng, Server trả về một trang HTML hoàn chỉnh cho trình duyệt.
Cấu trúc cơ bản: PHP cũng có thẻ bắt đầu và kết thúc giống với HTML
Trong PHP, để kết thúc một dòng lệnh, chúng ta sử dụng dấu chấm phẩy ";" Để chú thích một đoạn dữ liệu, ta có thể dùng dấu "//" cho từng dòng hoặc sử dụng cặp thẻ "/* */".
Máy khách Máy chủ web
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 17
*/" cho từng cụm mã lệnh
Ví dụ:
Xuất giá trịra trình duyệt chúng ta có những dòng cú pháp sau:
PHP có các kiểu dữ liệu cơ bản sau:
- Số nguyên, số thực, chuỗi, Boolean, mảng, đối tượng,resource, NULL/
Một số thành phần chính trong PHP
- Biến: Một biến bắt đầu bằng dấu $, theo sau là tên của biến
- Tên biến phải bắt đầu bằng một chữ cái hoặc ký tự gạch dưới
- Một tên biến không thể bắt đầu bằng một số
- Tên biến chỉ có thể chứa các ký tự chữ và số dưới (Az, 0-9 và _)
- Tên biến là phân biệt chữ hoa chữ thường
Chuỗi: là một nhóm các kỹ tự, số, khoảng trắng, dấu ngắt được đặt trong các dấu nháy, ví dụ: ‘Hello’.
Hằng số là một định danh cho một giá trị đơn giản và không thay đổi trong suốt tập lệnh Để tạo hằng số, bạn sử dụng hàm define() Các hằng số này được tự động toàn cầu và có thể được sử dụng ở bất kỳ đâu trong tập lệnh.
Printf “Thông tin”; Thông tin bao gồm biến, chuỗi,hoặc lệnh html….
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 18
Sức mạnh thực sự của PHP đến từcác Hàm
PHP cung cấp hơn 1000 hàm dựng sẵn và cho phép người lập trình tạo các hàm tùy chỉnh Việc định nghĩa các hàm này giúp giảm thời gian lặp lại thao tác code, đồng thời giúp kiểm soát mã nguồn một cách rõ ràng Người lập trình có thể dễ dàng tùy biến các hàm trên mọi trang mà không cần khởi tạo hay viết lại mã lệnh như trong HTML thuần.
Khai báo hàm do người dùng định nghĩa bắt đầu bằng từ "function", với tên hàm phải bắt đầu bằng chữ cái hoặc dấu gạch dưới Lưu ý rằng tên hàm không phân biệt chữ hoa và chữ thường.
Tự định nghĩa hàm có tham số
Tự định nghĩa hàm có giá trị trả về
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 19
Có 2 phương thức được sử dụng trong lập trình PHP là GET và POST.
Phương thức GET được sử dụng chủ yếu để lấy nội dung từ web server, nhưng cũng có thể lấy dữ liệu từ form nhập liệu.
- Phương thức POST: phương thức này được sử dụng để lấy dữ liệu từ form nhập liệu và chuyển chúng lên trình chủ webserver
1.3.7 PHP OOP(Object-Oriented Programming.)
OOP là viết tắt của lập trình hướng đối tượng, là việc tạo các đối tượng chứa cả hàm và dữ liệu
Lập trình hướng đối tượng có một số lợi thế so với lập trình thủ tục:
- OOP nhanh hơn và dễ thực hiện hơn
- OOP cung cấp một cấu trúc rõ ràng cho các chương trình
- OOP giúp giữ mã PHP DRY "Đừng lặp lại chính mình" và làm cho mã dễ dàng hơn để duy trì, sửa đổi và gỡ lỗi
- OOP cho phép tạo các ứng dụng có thể tái sử dụng đầy đủ với ít mã hơn và thời gian phát triển ngắn hơn
Cookie và Session là hai phương pháp sử dụng để quản lý các phiên làm việc giữa người sử dụng và hệ thống
Cookie và Session là hai phương pháp sử dụng để quản lý các phiên làm việc giữa người sử dụng và hệ thống
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 20
Session được sử dụng để lưu trữ dữ liệu trên server, bao gồm thông tin người dùng và tùy chọn cấu hình hệ thống Tất cả session được lưu trong biến toàn cục $_SESSION.
T ổ ng quan v ề framework Yii 2
Yii là một framework PHP mã nguồn mở miễn phí, nổi bật với hiệu suất xử lý cao, giúp tăng tốc độ phát triển ứng dụng web 2.0 Framework này tối ưu hóa việc sử dụng các thành phần, mang lại lợi ích cho các nhà phát triển Tên gọi Yii, phát âm là Yê hoặc [ji:], có nghĩa là “thật đơn giản và luôn phát triển” trong tiếng Trung, thể hiện triết lý thiết kế của nó.
“dịch”) Nghĩa thứhai có thểđọc ngắn gọn là Yes It Is
Yii là một framework phát triển ứng dụng Web mạnh mẽ, cho phép xây dựng nhiều loại ứng dụng bằng ngôn ngữ lập trình PHP Với trọng lượng nhẹ và giải pháp cache tối ưu, Yii rất phù hợp cho các ứng dụng web có dung lượng dữ liệu lớn như web portal, forum, CMS, e-commerce, và các dự án thương mại điện tử cũng như dịch vụ Web RESTful.
Giống như những PHP frameworks khác, Yii sử dụng mô hình MVC (Model-View- Controller) tổ chức code một cách hợp lý và có hệ thống
Yii mang đến một phương pháp lập trình với mã nguồn đơn giản và thanh lịch, phản ánh triết lý thiết kế của nó Yii không ngừng đổi mới và không bao giờ chấp nhận những mẫu thiết kế quá an toàn và ít thay đổi.
Yii là một framework dễ dàng mở rộng, cho phép bạn tùy chỉnh hoặc thay thế bất kỳ bộ mã chuẩn nào Bên cạnh đó, bạn có thể tận dụng kiến trúc mở rộng của Yii để sử dụng hoặc phát triển các mở rộng phân phối một cách hiệu quả.
Controller là một thành phần quan trọng trong mẫu thiết kế MVC, kế thừa từ class yii\base\Controller, có nhiệm vụ xử lý các yêu cầu và gửi phản hồi Sau khi nhận yêu cầu từ ứng dụng, controller sẽ phân tích thông tin, truyền dữ liệu đến models để xử lý, và gán kết quả từ model vào views trước khi gửi phản hồi cho người dùng.
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 22
Mỗi Controller đều chứa các action để user có thế tìm thấy, gửi yêu cầu tới ứng dụng để xửlý Mỗi controller có thểcó nhiều action
Để tạo mới một Action, bạn chỉ cần định nghĩa trong lớp Controller với tên phương thức bắt đầu bằng "action" Các phương thức của mỗi Action đều có phạm vi toàn cục, giúp dễ dàng quản lý và sử dụng trong ứng dụng.
Model là phần trong mô hình MVC Là đối tượng đại diện cho phần dữ liệu, phương thức xử lý và nghiệp vụ logic
Views là thành phần trong mô hình MVC, đóng vai trò quan trọng trong việc hiển thị dữ liệu cho người dùng Một view cơ bản được xem như một kịch bản PHP kết hợp giữa mã HTML và PHP.
Assets là các tệp tin có thể tham chiếu đến trang web, bao gồm file CSS, JavaScript, hình ảnh hoặc video Những tài sản này được lưu trữ trong các thư mục có thể truy cập trên web và được phục vụ trực tiếp từ các máy chủ web.
Giải thích về mô hình MVC
- Giữa Client và Database có mô hình MVC
Khi người dùng nhập từ khóa trên trình duyệt, Controller sẽ được kích hoạt, sau đó một hàm trong Model sẽ được gọi để tương tác với cơ sở dữ liệu Model sẽ truy xuất dữ liệu từ database, gửi dữ liệu trở lại Controller, và cuối cùng hiển thị thông tin cho Client thông qua View, nơi mà người dùng có thể thấy kết quả.
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 23
- Model là kho tạo ra những hàm gọi ra từ cơ sở dữ liệu, sau đó trả về Controller và trả về View
- View và Model không liên quan đến nhau, View chỉ được gọi hàm liên quan đến truy vấn dữ liệu thông qua Controller
- Một số hàm thông dụng findOne(), findAll(), delete(), deleteALL(), redirect(), where(), andFilterWhere, orderBy()
1.4.3 Routing and URL Creation Đường dẫn URL mặc định sử dụng tham sốr để thể hiện tuyến đường và các tham số truy vấn thông thường để biểu thịcác tham số truy vấn được liên kết với đường dẫn
Đường dẫn trong đề tài có cấu trúc như sau: http://localhost/my-web/quan-ly/?ri-viet, trong đó "my-web" là tên dự án, "quan-ly" là tên thư mục, và "bai-viet" là BaiVietController.php nằm trong thư mục backend/controllers Đường dẫn này cho phép truy cập vào danh mục bài viết trong backend, phục vụ cho việc quản lý bài viết, ví dụ như tại địa chỉ http://localhost/my-web/index.php?r=site%2Fbai-viet&path=gioi-thieu.
File index.php chứa các đường dẫn đến các mục front-end, trong đó site%2Fbai-viet là đường dẫn tương ứng với site/bai-viet, và path =gioi-thieu đại diện cho danh mục giới thiệu thông qua tham số path.
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 24
CHƯƠNG 2 THI Ế T K Ế BACK-END, FRONT-END
Phân tích thiế t k ế h ệ th ố ng
Trường Cao Đẳng Du Lịch Hải Phòng là cơ sở giáo dục công lập trực thuộc Bộ Văn hóa, Thể thao và Du lịch, chuyên đào tạo 6 ngành nghề trọng điểm quốc gia Các ngành học bao gồm: Quản trị nhà hàng, Quản trị khách sạn, Quản trị lễ tân, Quản trị lữ hành, Hướng dẫn du lịch và Quản trị chế biến món ăn.
Website của trường cần có logo và các danh mục menu sắp xếp ngang ngay sau logo Nhà trường nên hiển thị thông tin nổi bật qua Slider và các bài viết quan trọng Cần cập nhật liên tục các bài viết thuộc nhiều danh mục khác nhau, bao gồm giới thiệu về trường, tin tức, tuyển sinh, hoạt động sinh viên, việc làm cho sinh viên, và cảm nhận từ thầy cô, sinh viên cũng như cựu sinh viên Bài viết của đối tác cũng nên được thể hiện qua hình ảnh đại diện Việc xây dựng website riêng cho trường ngày càng trở nên cần thiết, giúp thông tin về trường và các thông báo, quyết định được truyền tải nhanh chóng và hiệu quả đến sinh viên và người dùng, giảm thiểu phiền hà trong giao tiếp truyền thông.
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 25
Xây dựng biểu đồ ngữ cảnh của hệ thống
Bài viết cần đăng Thông tin xác nhận đăng bài viết Ảnh slider cần đăng Thông tin xác nhận đăng ảnh slider
Danh mục cần đăng Thông tin xác nhận đăng danh mục
Từkhóa cần đăng Thông tin xác nhận đăng từkhóa Người dùng cần đăng
Thông tin xác nhận đăng người dùng
Thông tin bài viết Thông tin ảnh slider Thông tin danh mục
Thông tin từkhóaThông tin tìm kiếm
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 26
Website được chia làm hai thành phần
Front-end là phần giao diện của website, nơi người dùng tương tác trực tiếp Nó bao gồm hệ thống giao diện người dùng (GUI) và lập trình phía người dùng, đóng vai trò quan trọng trong trải nghiệm người sử dụng.
Back-end (Lập trình trên server) gồm có các thành phần để xửlý thông tin từ Front- end Là việc tương tác với hệ quản trịcơ sở dữ liệu
Người quản trị viên website sử dụng tài khoản và mật khẩu để đăng nhập vào phần quản trị Mỗi tài khoản được phân quyền thành hai vai trò: vai trò quản trị viên có quyền truy cập đầy đủ vào tất cả các chức năng của trang web, trong khi vai trò người quản lý bị hạn chế, chỉ có khả năng xem và kiểm tra chi tiết.
Người quản trị viên có trách nhiệm tạo và quản lý các danh mục trên trang web, giúp sắp xếp chúng trên thanh menu Các danh mục này được tích hợp đầy đủ chức năng để thêm, sửa, xóa và xem nội dung, đảm bảo trải nghiệm người dùng mượt mà và hiệu quả.
Người quản trị viên có thể sử dụng chức năng quản lý slider để quản lý hình ảnh và nội dung của slider trên trang web, với các tùy chọn thêm, sửa và xóa Mỗi slider bao gồm nhiều hình ảnh, được lưu trữ trực tiếp trong cơ sở dữ liệu và trên server.
Người quản trị viên có thể quản lý các bài viết trên trang web thông qua chức năng quản lý bài viết, cho phép thêm, sửa, xóa và xem chi tiết từng bài viết Mỗi bài viết có thể được đánh dấu là nổi bật hoặc không, kèm theo ảnh đại diện; nếu không có ảnh, hệ thống sẽ sử dụng ảnh mặc định Bài viết bao gồm tiêu đề, nội dung, ngày đăng, danh mục liên quan, nhiều hình ảnh và từ khóa, trong đó mỗi từ khóa có thể xuất hiện trong nhiều bài viết khác nhau Ngoài ra, mỗi bài viết cũng có thể có nhiều vai trò người dùng khác nhau.
Hàng ngày, người dùng truy cập vào website của Trường để tìm hiểu thông tin giới thiệu, các bài viết nổi bật và mới nhất, thông tin về các khoa, hỗ trợ sinh viên, tin tức tuyển sinh, cơ hội việc làm và các đối tác của trường.
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 27
2.1.1 Bảng cơ sở dữ liệu
STT Tên trường Kiểu dữ liệu Ghi chú
2 name Varchar(60) Tên danh mục
3 code varchar(60) Mã danh mục
STT Tên trường Kiểu dữ liệu Ghi chú
2 name varchar(60) Tên bài viết
3 ngay_dang datetime Ngày đăng bài
4 noi_dung text Nội dung bài đăng
5 anh_dai_dien varchar(150) Ảnh đại diện bài viết
6 code varchar(150) Mã bài viết
7 mo_ta_ngan_gon varchar(300) Mô tảbài viết
8 user_id int Khóa ngoài
9 noi_bat tinyint Bài viết nổi bật
Bảng Danh mục bài viết
STT Tên trường Kiểu dữ liệu Ghi chú
2 danh_muc_id int Khóa ngoài
3 bai_viet_id int Khóa ngoài
STT Tên trường Kiểu dữ liệu Ghi chú
2 file varchar(100) Thư mục ảnh
3 anh_bai_viet_id int Khóa ngoài
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 28
STT Tên trường Kiểu dữ liệu Ghi chú
2 mo_ta varchar(150) Mô tả nội dung
3 link varchar(150) Đường dẫn liên kết Ảnh slider
STT Tên trường Kiểu dữ liệu Ghi chú
2 file varchar(60) Thư mục ảnh
3 slider_id int Khóa ngoài
Bảng vai trò người dùng
STT Tên trường Kiểu dữ liệu Ghi chú
2 vai_tro Varchar(45) Tên vai trò người dùng
3 user_id Int Khóa ngoài
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 29
STT Tên trường Kiểu dữ liệu Ghi chú
2 username varchar(45) Tên đăng nhập
5 password_reset_toke n varchar(45) Restart mật khẩu
6 email varchar(45) Địa chỉ email người dùng
7 status varchar(45) Trang thái toàn khoản
8 created_at datetime Thời gian tạo tài khoản
9 update_at datetime Thời gian cập nhập thài khoản
10 vai_tro enum Vai trò người dùng
11 them_bai_viet_id int Khóa ngoài
12 sua_bai_viet_id int Khóa ngoài
STT Tên trường Kiểu dữ liệu Ghi chú
2 name varchar(100) Tên từ khóa
STT Tên trường Kiểu dữ liệu Ghi chú
2 tu_khoa_id int Khóa ngoài
3 noi_dung_bai_viet_id int Khóa ngoài
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 30
Danh Mục Có Danh Mục Bài
Bài Viết Có Danh Mục
Bài Viết 1 Có n Ảnh Bài Viết
Từ Khóa 1 Có n Bài Viết Id
Bài Viết 1 Có n Bai Viết Id
User Có Vai Trò Người
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 31
Hình 3 Bảng cơ sở dữ liệu
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 32
Xây d ự ng back-end
2.1.1 Tạo Project và thêm framework Yii2
Hình 4 Project và framewwork Yii 2
- Project có tên là: my-web
- Và các thư mục framework yii2
2.1.2 Kết nối cơ sở dữ liệu
- Truy cập vào file common => config => main-local.php
- Điền nội dung để kết nối tới cơ sở dữ liệu PHPMyadmin
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 33
Hình 5 Cấu hình kết nối tới cơ sở dữ liệu
Tạo giao diện back-end và thay đổi lại đường dẫn thành localhost/my-web/quan- ly/index
Tạo file có tên quan-ly, copy file assets,css,index.php vào file quan-ly
Thay đổi lại đường dẫn của file index.php
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 34
Hình 6 Sau khi thay đổi lại đường dẫn file index.php
2.1.3 Tạo Model Generator và CRUD Generator
Truy cập đường dẫn: http://localhost/my-web/quan-ly/?r=gii
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 35
Hình 7 Giao diện Model Generator
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 36
Table Name: Tên bảng cơ sở dữ liệu
Model Class Name: Tênmodel, được tạo tựđộng khi chọn bảng cơ sở dữ liệu
Namespace: Đường dẫn chứa đối tượng được tạo
User Table Prefix: Sử dụng tiền tố của bảng
Generate Relations from Current Schema: Tạo mối quan hệ từ bảng hiện tại
Generate Labels from DB Comments: Tạo nhãn từ comment từ bảng
User Schenma Name: Sử dụng tên lược đồ
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 37
Hình 8 Giao diện CRUD Generator
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 38
Model class: Khai báothư mục chứa tên đối tượng
Search Model Class: Nơi chứa đối tượng Search
Controller Class: Nơi chứa đối tượng Controller
View Path: Nơi chứa thư mục View
Hình 9 Giao diện quản lý danh mục
Tại giao diện Quản lý danh mục gồm: số thứ tự, ID, Tên danh mục, Code, Danh Mục check, và các chức năng Xem, Sửa, Xóa
Chức năng tìm kiếm Danh mục, tìm kiếm theo ID, Tên danh mục, Code
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 39
Hình 10 Giao diện Thêm Danh Mục
Khi thêm mới một danh mục, người dùng cần nhập tên danh mục và sử dụng chức năng Danh Mục check để quyết định hiển thị danh mục đó Nếu chức năng này được chọn, danh mục sẽ được hiển thị.
Hình 11 Giao diện xem chi tiết
Khi bạn chọn xem chi tiết, tiêu đề sẽ hiển thị tên danh mục, cùng với ID, tên và mã của danh mục đó Bên cạnh đó, bạn cũng có thể cập nhật hoặc xóa danh mục đang xem.
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 40
Hình 12 Giao diện sửa danh mục
Khi chỉnh sửa danh mục, hệ thống sẽ hiển thị tên danh mục cần sửa Người dùng cần lấy ra tên danh mục và danh mục kiểm tra để thực hiện chỉnh sửa Sau khi hoàn tất, người dùng chỉ cần chọn chức năng Lưu để lưu lại thay đổi.
Tại chức năng xóa, khi người dùng chọn xóa, sẽ hỏi lại rằng có chắc chắn xóa không trước khi xóa một danh mục
Tạo hàmXóa danh mục public function beforeDelete()
DanhMucBaiViet::deleteAll(['danh_muc_id' => $this->id]); return parent::beforeDelete(); // TODO: Change the autogenerated stub
Tạo hàmchuyển đổi từ Name sang Code public function beforeSave($insert)
$this -> code = API_H17::createCode($this->name); return parent::beforeSave($insert); // TODO: Change the autogenerated stub
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 41
Hình 13 Giao diện Từ khóa
Tại giao diện từkhóa, hiển thị tên tiêu đề từkhóa, Hiển thị số thứ tự, ID, Tên từkhóa,
Code Chức năng tìm kiếm theo ID, theo Tên từkhóa, theo Code Và chức năng Tạo mới
Từ Khóa, chức năng Xem, Sửa, Xóa
Hình 14 Giao diện tạo mới từkhóa
Tại giao diện Tạo từkhóa gồm: tiêu đề Tạo từ khóa, hàng nhập Tên từkhóa, và chức năng Save đểlưu từkhóa
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 42
Hình 15 Giao diện xem từ khóa
Giao diện xem chi tiết từ khóa hiển thị các thông tin quan trọng như tiêu đề, ID, tên và mã của từ khóa Người dùng có thể cập nhật hoặc xóa từ khóa đang xem một cách dễ dàng.
Hình 16 Giao diện sửa từkhóa
Giao diện sửa từkhóa, gồm tiêu đề cập nhập Từ Khóa là tên từ khóa cần sửa, Lấy ra tên từkhóa cần sửa, và chức năng lưu từkhóa
Tại chức năng Xóa từ khóa, Khi người dùng chọn xóa, sẽ có giao diện hỏi lại có chắc chắn xóa từkhóa không
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 43
Tạo hàmlưu từkhóa public function beforeSave($insert)
$this->code = API_H17::createCode($this->name); return parent::beforeSave($insert); // TODO: Change the autogenerated stub
Tạo hàmxóa từkhóa public function beforeDelete()
BaiVietId::deleteAll(['tu_khoa_id'=>$this->id]); return parent::beforeDelete(); // TODO: Change the autogenerated stub
Hình 17 Giao diện Slider Tại giao diện Slider, hiển thị tiêu đề Slider, gồm có các cột số thứ tự, ID, Mô tả, Link
Chức năng tìm kiếm theo ID, theo Mô Tả, Theo Link Chức năng Tạo Slider, Xem, Sửa, Xóa một Slider
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 44
Hình 18 Giao diện tạo Slider
Khi tạo một Slider gồm: Mô tả, Link, Hình ảnh Khi chọn hình ảnh, sẽ lấy ra một hoặc nhiều ảnh cần chọn Chức năng Save đểlưu Slider
Hình 19 Giao diện xem Slider
- Khi xem một Slider, sẽ hiển thịtiêu đềLà ID của Slider cần xem
- Xem ID, Mô tả, Link của Slider cần xem Và chức năng cập nhập Slider, chức năng Xóa Slider đang xem
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 45
Hình 20 Giao diện sửa Slider
Giao diện sửa Slide cho phép bạn cập nhật thông tin của Slider bằng cách nhập ID Slider cần chỉnh sửa Bạn có thể lấy ra nội dung mô tả, liên kết và hình ảnh của Slider để thực hiện việc sửa đổi một cách dễ dàng.
Khi thực hiện chỉnh sửa hình ảnh trong Slider, cần bổ sung chức năng xóa ảnh, giúp người dùng xóa ảnh không mong muốn Khi ảnh bị xóa, hệ thống sẽ xóa nó khỏi cơ sở dữ liệu cũng như xóa trên ổ cứng vật lý Sau khi hoàn tất việc sửa đổi, người dùng có thể sử dụng chức năng Lưu để lưu lại các thay đổi cho Slider.
- Tại chức năng xóa một slider, khi người dùng chọn xóa, sẽ có giao diện hỏi lại có chắc chắn xóa slider không
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 46
Tạo hàm lưu Slider public function afterSave($insert, $changedAttributes)
$files = UploadedFile::getInstances($this, 'hinh_anhs'); foreach ($files as $file){
$ten_file = time().$file ->name;
$anh_slider -> slider_id = $this ->id;
$anh_slider -> file = $ten_file; if($anh_slider ->save()){
$path = dirname(dirname( DIR )).'/images/'.$ten_file;
} parent::afterSave($insert, $changedAttributes); // TODO: Change the autogenerated stub
Tạo hàm xóa ảnh Slider public function actionXoaAnhSlider($idhinhanh){
$anh_slider = AnhSlider::findOne($idhinhanh);
$id_slider = $anh_slider ->slider_id; if($anh_slider->delete()) return $this ->redirect(url::toRoute(['slider/update', 'id'=>$id_slider])); else throw new HttpException(500, Html::errorSummary($anh_slider));
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 47
Tạo hàm xóa ảnh Slider public function beforeDelete()
// beforeDelete -> delete ->aftẻDelete xóa ảnh trong daraadase xong thì xóa ảnh trên ổ cứng
// AnhSlider::deleteAll(['slider_id'=> $this->id]); // hàm xóa tất cả dữ liệu bảng con mà ko liên quan đế ảnh dữ liệu vật lý, xóa id mà m chọn
$anh_sliders = AnhSlider::findAll(['slider_id'=>$this->id]); foreach ($anh_sliders as $anh_slider){
$anh_slider->delete(); // Anhslider -> beforeDelete + afterDelete,
} return parent::beforeDelete(); // TODO: Change the autogenerated stub
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 48
Hình 21 Giao diện bài viết
Giao diện bài viết được tổ chức thành nhiều cột, bao gồm số thứ tự bài viết, hình ảnh đại diện, tên bài viết, ngày đăng, nội dung bài viết, nhóm danh mục, nổi bật, nhóm từ khóa, cùng với các chức năng như xem, sửa và xóa.
Chức năng tìm kiếm bài viết thông qua: Tên bài viết
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 49
Chức năng tìm kiếm bài viết thông qua: Ngày đăng Từ ngày – đến ngày, Hoặc từ ngày, tháng –đến ngày, tháng Hoặc từngày, tháng, năm –đến ngày, tháng, năm
Chức năng tìm kiếm bài viết thông qua: Nội dung bài viết
Chức năng tạo mới bài viết
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 50
Hình 22 Giao diện tạo mới bài viết
Tại giao diện tạo mới bài viết: gồm tiêu đềlà Thêm bài viết
Tên bài viết là trường bắt buộc phải điền; nếu người dùng bỏ trống, hệ thống sẽ hiển thị thông báo “Tên bài viết không được để trống!”.
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 51
The article content editor serves as a platform for managing written content, equipped with essential text editing tools such as Cut, Copy, Paste, Paste from Word, Undo, Redo, and a Spell Checker It allows users to format text with styles like Bold, Italic, and Strikethrough, as well as to insert or remove numbered and bulleted lists Additional features include the ability to insert links, images, tables, and to apply various text styles, including Normal and headings.
Người dùng chỉ có thể chọn một ảnh đại diện cho mình Nếu không chọn, hệ thống sẽ tự động sử dụng ảnh mặc định có tên no-image.jpg Khi người dùng đã chọn ảnh, tên của ảnh được chọn sẽ được hiển thị.
Hàng ảnh bài viết: Người dùng chọn được nhiều ảnh, sẽ hiển thị ra sốlượng ảnh được chọn
Hàng Danh mục bài viết: Trước tiên sẽ lấy ra tất cả danh mục thuộc bảng Danh mục
Mỗi bài viết cần thuộc ít nhất một danh mục Đối với những bài viết nổi bật, người dùng có thể chọn chức năng "Nổi bật" trong danh mục bài viết bằng cách sử dụng checkbox.
Hàng Từ khóa bài viết: Người dùng sẽ nhập các từkhóa, có gợi ý cách nhập từkhóa
(mỗi từ khóa cách nhau bởi dấu phẩy) Có chức năng xóa từ khóa khi người dùng muốn xóa.
Tại hàng Mô tả ngắn gọn: Sẽ mô tả thông tin về bài viết
Và chức năng Save dùng để lưu lại bài viết được tạo
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 52
Hình 23 Giao diện xem chi tiết bài viết Khi xem chi tiết bài viết: Gồm tiêu đềbài viết là tên bài viết
Xem được chi tiết: ID bài viết, Tên bài viết, Ngày đăng bài viết, Nội dung bài viết, ảnh đại diện, Code, User ID, Mô tả ngắn gọn
Và chức năng cập nhập bài viết, chức năng xóa bài viết đang xem
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 53
Hình 24 Giao diện sửa bài viết
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 54
Hình 25 Giao diện sửa bài viết Khi sửa một bài viết: Tiêu đề Cập nhập bài viết là tên bài viết cần sửa
Hàng tên bài viết: Lấy ra tênbài viết cần sửa
Hàng nội dung bài viết: Lấy ra nội dung bài viết cần sửa
Hàng ảnh đại diện cho phép người dùng sửa đổi hình ảnh đại diện và thêm chức năng xóa ảnh Người dùng có thể tùy chọn thêm hoặc không thêm ảnh đại diện; nếu mục này để trống, hệ thống sẽ tự động lấy ảnh mặc định có tên là no-image.jpg.
Bài viết này đề cập đến việc quản lý hình ảnh trong bài viết, cho phép người dùng lấy ra tất cả hình ảnh hiện có và thêm chức năng xóa ảnh Người dùng có thể lựa chọn thêm hoặc không thêm hình ảnh mới vào bài viết, và các hình ảnh này có thể có hoặc không có trong nội dung.
Bài viết sẽ thuộc ít nhất một danh mục đã được chọn, với khả năng thêm hoặc hủy bỏ các danh mục Đối với những bài viết nổi bật, cần chọn hai chức năng nổi bật trong danh mục tương ứng.
Hàng từkhóa bài viết: Sẽ lấy ra danh sách các từ khóa của bài viết, có thể thêm hoặc xóa các từkhóa bài viết
Tại hàng mô tả ngắn gọn: Sẽ lấy ra nội dung mô tả ngắn gọn cần sửa
Chức năng Save dùng đểlưu lại bài viết
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 55
Tại chức năng xóa một bài viết, khi người dùng chọn xóa, sẽ có giao diện hỏi lại có chắc chắn xóa bài viết không
Tạo hàm sửa bài viết public function actionUpdate($id)
$model ->danh_muc_bai_viets = ArrayHelper::map(
DanhMucBaiViet::findAll(['bai_viet_id' => $id]),
'danh_muc_id','danh_muc_id'
// từ khóa -< bài viết id >- bài viết
// cần lấy ra tên từ khoa đã chọn dựa trên id bài viết đang sửa
$tukhoa_baiviet = BaiVietId::findAll(['noi_dung_bai_viet_id' => $id]);
$model->tu_khoa_bai_viets= []; foreach ($tukhoa_baiviet as $item){
$tukhoa = TuKhoa::findOne($item->tu_khoa_id); // mỗi item là một từ khóa sản phẩm $model ->tu_khoa_bai_viets[] = $tukhoa->name;
$model ->tu_khoa_bai_viets = implode(',', $model->tu_khoa_bai_viets); if ($model->load(Yii::$app->request->post()) && $model->save()) { return $this->redirect(['view', 'id' => $model->id]);
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 56
Tạo hàm xóa ảnh đại diện public function actionXoaAnhDaiDien($idbv){
$bai_viet = BaiViet::findOne($idbv); // lấy ra thông tin bài viết cần xóa if($bai_viet->anh_dai_dien != 'no-image.jpg'){
$path = dirname(dirname( DIR )).'/images/'.$bai_viet->anh_dai_dien; if(is_file($path)){ unlink($path);
BaiViet::updateAll(['anh_dai_dien' => 'no-image.jpg'], ['id' => $idbv]);
Yii::$app->session->setFlash('thongbao', "Không thể xóa ảnh mặc định củasản phẩm này!");
$this->redirect(\yii\helpers\Url::toRoute(['bai-viet/update', 'id' => $idbv]));
Tạo hàmxóa ảnh bài viết public function actionXoaAnhBaiViet($idhinhanh){
$anh_baiviet = AnhBaiViet::findOne($idhinhanh);
$id_anhbaiviet = $anh_baiviet->anh_bai_viet_id; if($anh_baiviet->delete()) return $this->redirect(\yii\helpers\Url::toRoute(['bai-viet/update',
'id'=>$id_anhbaiviet])); else throw new HttpException(500, Html::errorSummary($anh_baiviet));
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 57
Tạo hàm lưu bài viết public function beforeSave($insert)
$this->ngay_dang = new Expression("NOW()");
$this->user_id = 1;//Yii::$app->user->id; tạo người dùng
$this->code = API_H17::createCode($this->name);
$file = UploadedFile::getInstance($this, 'anh_dai_dien'); if(!is_null($file)){
$type = API_H17::get_extension($file->type);
$ten_file = API_H17::createCode($this->name);
$ten_file = "{$time}_anhdaidien-{$ten_file}{$type}";
$this->anh_dai_dien = $ten_file; if(!$insert){
$baiviet = self::findOne($this->id); // my-anhdaidien.png
Yii::$app->session->set('old_name_anhdaidien',$baiviet->anh_dai_dien);
$this->anh_dai_dien = 'no-image.jpg';
// lấy lại giá trị ảnh đại diện cũ
$baiviet = self::findOne($this->id);
// gán giá trị anhdaidien mới bằng giá trị cũ
$this->anh_dai_dien = $baiviet->anh_dai_dien;
// $files = UploadedFile::getInstances($this, 'anh_bai_viets');
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 58 return parent::beforeSave($insert); // TODO: Change the autogenerated stub
Tạo hàm lưu bài viết public function afterSave($insert, $changedAttributes)
DanhMucBaiViet::deleteAll(['bai_viet_id'=> $this->id]); foreach ($this->danh_muc_bai_viets as $phan_loai_bai_viet){
$plbv->danh_muc_id = $phan_loai_bai_viet;
$plbv->bai_viet_id = $this->id;
BaiVietId::deleteAll(['noi_dung_bai_viet_id' => $this->id]); if($this->tu_khoa_bai_viets != ''){
$tukhoa = explode(',', $this->tu_khoa_bai_viets); foreach ($tukhoa as $item){
$old_tag = TuKhoa::findOne(['name' => trim($item)]); if(!is_null($old_tag)){
$id_tukhoa = $old_tag->id;
$id_tukhoa = $new_tag->id;
$tukhoa_bv->tu_khoa_id = $id_tukhoa;
$tukhoa_bv->noi_dung_bai_viet_id = $this->id;
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 59
// uppdate ảnh sau khi lưu dữ liệu thành công vào trong csdl
$file = UploadedFile::getInstance($this, 'anh_dai_dien'); if(!is_null($file)){
$ten_file = $this->anh_dai_dien;
$path = dirname(dirname( DIR )).'/images/'.$ten_file;
$file->saveAs($path); if(!$insert){
$ten_file_cu = Yii::$app->session->get('old_name_anhdaidien'); if($ten_file_cu != 'no-image.jpg'){
$path = dirname(dirname( DIR )).'/images/'.$ten_file_cu; if (is_file($ten_file_cu)) unlink($path);
// upload hình ảnh bài viết
// code upload anh bai viet
$files = UploadedFile::getInstances($this, 'anh_bai_viets'); foreach ($files as $file){
$ten_file = time().$file ->name; echo strlen($ten_file);
$anh_slider -> anh_bai_viet_id = $this ->id;
$anh_slider -> file = $ten_file; if($anh_slider ->save(false)){
$path = dirname(dirname( DIR )).'/images/'.$ten_file;
//echo "anh da luu".$this ->id;die();
//etecho "anh da luu 123".$this ->id;die();
} parent::afterSave($insert, $changedAttributes); // TODO: Change the autogenerated stub
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 60
Tạo hàm xóa bài viết public function beforeDelete()
{ if ($this->anh_dai_dien != 'no-image.jpg') {
$path = dirname(dirname( DIR )) '/images/' $this->anh_dai_dien; if (is_file($path)) unlink($path);
$anh_sliders = AnhBaiViet::findAll(['anh_bai_viet_id' => $this->id]); foreach ($anh_sliders as $anh_slider) {
$anh_slider->delete(); // Anhslider -> beforeDelete + afterDelete,
BaiVietId::deleteAll(['noi_dung_bai_viet_id' => $this->id]);
DanhMucBaiViet::deleteAll(['bai_viet_id' => $this->id]); return parent::beforeDelete(); // TODO: Change the autogenerated stub
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 61
Hình 26 Giao diện người dùng
Hình 27 Giao diện người dùng
Tại giao diên người dùng: Gồm có các cột số thứ tự, Id người dùng, username, Auth key, Password Hash, Password Reset Token, và chức năng Xem, Sửa, Xóa
Chức năng tạo người dùng
Passwword Hash và Password Reset Token và Auth Key được mã hóa, chứa mật khẩu người dùng
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 62
Hình 28 Giao diện Tạo người dùng Giao diện tạo người dùng gồm: Tiêu đềlà Khởi tạo tài khoản người dùng
Hàng Username: Tạo tên người dùng mới
Hàng Password Hash: Tạo mật khẩu người dùng
Email Là địa chỉ Email của người dùng cần tạo
Status là trạng thái của tài khoản Được chia làm hai trạng thái là hoạt động và không hoạt động
- Trạng thái hoạt động: là tài khoản được chấp nhập sử dụng, khi đó người dùng có thểđăng nhập được
- Trạng thái Không hoạt động: là tài khoản không hoạt động, và không được quyền đăng nhập
Hàng Vai trò: là vai trò của người dùng khi đăng nhập vào quản lý nội dung, gồm hai vai trò là Admin vàNgười quản lý
- Khi chọn vai trò Admin: Người dùng có toàn quyền quản lý chức năng.
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 63
Khi chọn vai trò Người quản lý, bạn cần lưu ý rằng vai trò này có chức năng hạn chế hơn so với vai trò Admin Cụ thể, Người quản lý không thể xem danh mục người dùng, nơi lưu trữ các tài khoản người dùng, mà chỉ có thể thực hiện chức năng xem thông tin.
Và cuối cùng là chức năng Save dùng để lưu nội dung
Hình 29 Giao diện cập nhập người dùng
Giao diện sửa một người dùng: Có tiêu đề Cập nhập người dùng với tên là tên người dùng cần sửa
Hàng Username: lấy ra tên người dùng cần sửa
Xây d ự ng Front-end
Trong thư mục frontend, tạo thư mục có tên truongcaodangdulichhp(Trường Cao đẳng Du lịch Hải Phòng), tạo hai thư mục có tên assets và views.
Thư mục assets cócác file:
- Css: là thư mục có chứa các file css của website
- Fonts: là thư mục có chứa các file phông chữ, các icon
- Js: chứa các thư viện javascript
- Style.css là file định dạng nội dung bằng css
Thư mục views có các file layouts và site
File layouts có chứa file main.php, file main.php là file chứa nội dung header và footer của trang web
File site có chứa file:
- Index.php là file trang chủ của website
- Gioi-thieu.php là file trang giới thiệu của website
- Bai-viet.php là file trang bài viết của website
- Chi-tiet-bai-viet là file trang chi tiết các bài viết
2.2.2 Tổng quan về front-end
Website sử dụng HTML 5, được phát triển trên nền tảng ngôn ngữ HTML và quan trọng nhất của world wide web
Website sử dụng Css làm ngôn ngữ tạo phong cách cho trang web.
Website dử dụng framework Bootstrap 3, bao gồm HTML, CSS và JavaScript template để phát triển website chuẩn responsive
Website sử dụng ngôn ngữ lập trình Javascript và framework Jquery
Website sử dụng hai font chữlà: Arial, Helvetica
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 67
2.2.3 Xây dựng trang trang chủ
Hình 31 Giao diện trang chủ
- Trang chủ là trang đại diện cho trang chính của website
- Nội dung menu là danh sách các danh mục
- Slider của trang là danh sách các ảnh
- Hai bài viết bên phải đại diện cho hai bài nổi bật của trang website
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 68
Hình 32: Giao diện trang chủ
- Nội dung tin tức là danh sách các tin tức, khi xem một bài viết sẽ xem chi tiết bài viết đó
- Xem tất cả để xem tất cả các bài viết
Hình 33 Giao diện trang chủ
- Khi xem một bài viết tuyển dụng, sẽ xem chi tiết nội dung bài viết
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 69
Hình 34: Giao diện trang chủ -Khi xem một bài viết về khoa, sẽ xem chi tiết vềbài viết khoa
- Xem được Clip nổi bật của trang
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 70
Hình 35: Giao diện trang chủ
- Khi xem một bài viết cảm nhận về htc, sẽxem được chi tiết bài viết
- Và hiển thị danh sách các ảnh đối tác của trường
Hình 36 Giao diện trang chủ
- Hiển thị thông tin về trường, liên kết tới trang facebook của trường, liên kết đến kênh Youtube của trường, hiển thịđịa chỉ map của trường
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 71
Code trang index.php public function actionIndex()
->andFilterWhere(['code_loai_bai_viet' => 'tin-tuc'])
->andFilterWhere(['code_loai_bai_viet'=>'viec-lam-htc'])
->andFilterWhere(['code_loai_bai_viet'=>'doi-tac'])
->andFilterWhere(['code_loai_bai_viet' =>'khoa'])
->andFilterWhere(['code_loai_bai_viet' => 'cam-nhan-ve-htc'])
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 72
->andFilterWhere(['code_loai_bai_viet' => 'trang-sinh-vien-htc'])
->andFilterWhere(['code_loai_bai_viet' => 'trang-tuyen-sinh-htc'])
->andFilterWhere(['code_loai_bai_viet' => 'trang-dich-vu-cong'])
//echo $trangsinhvienhtc->anh_dai_dien; die();
$vieclam_link = DanhMuc::find()->where(['code'=> 'viec-lam-htc'])->one();
$khoa_link = DanhMuc::find()->where(['code'=>'khoa'])->one();
$tintuc_link = DanhMuc::find()->where(['code'=>'tin-tuc'])->one();
$camnhanvehtc_link = DanhMuc::find()->where(['code'=>'cam-nhan-ve-htc'])->one(); return $this->render('index',[
'baiviet_khoa_link' => $khoa_link,
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 73
2.2.4 Xây dựng trang giới thiệu
Hình 37 Giao diện trang giới thiệu
- Hiển thịtiêu đềbài viết, và nội dung chi tiết của trang giới thiệu
- Khi chọn thông tin vềban giám hiệu nhà trường sẽ hiển thị ảnh chứa thông tin.
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 74
Code trang Giới thiệu if($path == 'gioi-thieu'){
$gioi_thieu_BV = DanhMuc::findOne(['code'=>$path]);
->andFilterWhere(['code_loai_bai_viet'=>'gioi-thieu'])
$danhsachkhoas = ChiTietBaiViet::findAll(['code_loai_bai_viet' => 'khoa']); return $this->render('gioi-thieu',[
'gioi_thieu_BV'=>$gioi_thieu_BV,
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 75
2.2.5 Xây dựng trang bài viết
Hình 38: Giao diện trang Khoa
- Hiển thịdanh sách các khoa của trường
- Khi xem một khoa sẽ xem được nội dung chi tiết của bài viết khoa đó
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 76
Code trang bài viết public function actionBaiViet($path){ if($path == 'gioi-thieu'){
$gioi_thieu_BV = DanhMuc::findOne(['code'=>$path]);
->andFilterWhere(['code_loai_bai_viet'=>'gioi-thieu'])
$danhsachkhoas = ChiTietBaiViet::findAll(['code_loai_bai_viet' => 'khoa']); return $this->render('gioi-thieu',[
'gioi_thieu_BV'=>$gioi_thieu_BV,
$baiviets = ChiTietBaiViet::findAll(['code_loai_bai_viet'=>$path]);
$danh_muc_BV = DanhMuc::findOne(['code'=>$path]);
//echo $danh_muc_BV->name;die();
$noidungViecLamBaiViets = ChiTietBaiViet::findAll(['code_loai_bai_viet'=>'viec- lam-htc']);
$noidungNoiBatBaiViets = ChiTietBaiViet::findAll(['noi_bat'=>1]);
$noidungCamNhanVeHTC = ChiTietBaiViet::findAll(['code_loai_bai_viet'=>'cam- nhan-ve-htc']);
$noidungDoitacBaiviets = ChiTietBaiViet::findAll(['code_loai_bai_viet'=>'doi- tac']); return $this->render('bai-viet',[
'danh_muc_BV'=>$danh_muc_BV,
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 77
2.2.6 Xây dựng trang chi tiết bài viết
Hình 39 Giao diện trang chi tiết bài viết
Khi bạn xem bài viết chi tiết, nội dung cụ thể sẽ được hiển thị, cùng với các bài viết liên quan trong cùng một danh mục.
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 78
Hình 40 Giao diện trang chi tiết bài viết
- Ngoài chi tiết bài viết và các bài viết liên quan, trang chi tiết bài viết còn hiển thị Ảnh bài viết và Bài viết nổi bật
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 79
Code trang chi tiết bài viết public function actionProduct($path){
$baiviet = ChiTietBaiViet::findOne(['code'=>$path]);
$anh_bai_viet = AnhBaiViet::findAll(['anh_bai_viet_id'=>$baiviet->id]);
$noidungNoiBatBaiViets = ChiTietBaiViet::findAll(['noi_bat'=>1]);
// $noidungchitiettintucBaiViets = ChiTietBaiViet::findAll(['code_loai_bai_viet'=>'tin- tuc']);
$baivietTuongtus = $baiviet->danhMucs; foreach ($baivietTuongtus as $item){
$samePosts = $item->getBaiViets()->where(['!=','id',$baiviet->id])->all();
} return $this->render('chi-tiet-bai-viet',[
'anh_bai_viet'=>$anh_bai_viet,
Sinh Viên: Bùi Quang Tuấn - Lớp: CT1701- Ngành: Công nghệthông tin 80