1. Trang chủ
  2. » Luận Văn - Báo Cáo

xây dựng website chùa thạnh lâm trên nền zend framework

86 465 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 86
Dung lượng 8,23 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Tuy nhiên, nhu cầu của con người khôngngừng tăng lên, chúng ta luôn cần những điều mới mẻ, từ thực tế đó yêu cầu cáccông ty thiết kế web không dừng lại ở việc lập trình web bằng PHP tuần

Trang 1

TRƯỜNG ĐẠI HỌC GIAO THÔNG VẬN TẢI TP HCM

KHOA CÔNG NGHỆ THÔNG TIN

BỘ MÔN MẠNG MÁY TÍNH VÀ TRUYỀN THÔNG

TRẦN MẠNH PHI - 0851120056

HỒ THANH BÌNH - 0851120005

XÂY DỰNG WEBSITE CHÙA THẠNH LÂM TRÊN NỀN ZEND FRAMEWORK

KHÓA LUẬN TỐT NGHIỆP KỸ SƯ CNTT

GIÁO VIÊN HƯỚNG DẪN

NIÊN KHÓA 2008 - 2012

Trang 2

NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN

Trang 3

NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN

Trang 4

Đặc biệt chân thành bày tỏ lòng cảm ơn sâu sắc đến thầy Thạc Sĩ Đặng NhânCách là người đã tận tình hướng dẫn và giúp đỡ chúng tôi thực hiện khóa luận này.Bên cạnh đó, chúng tôi xin cảm ơn gia đình và bạn bè đã luôn bên cạnh ủng hộ,giúp đỡ trong quá trình thực hiện khóa luận.

Sinh viên thực hiệnTrần Mạnh Phi

Hồ Thanh Bình

Trang 5

Khoa Công Nghệ Thông Tin

Bộ môn mạng máy tính và truyền thông

ĐỀ CƯƠNG CHI TIẾT Tên đề tài: Xây dựng website chùa Thạnh Lâm trên nền Zend Framework

Giáo viên hướng dẫn: ThS Đặng Nhân Cách

Thời gian thực hiện: Từ 24/09/2012 đến 20/12/2012

Sinh viên thực hiện:

• Trần Mạnh Phi – 0851120056

• Hồ Thanh Bình – 0851120005

Loại đề tài:

• Tìm hiểu Zend Framework

• Xây dựng website chùa Thạnh Lâm

Nội Dung Đề Tài:

• Nghiên cứu công nghệ Zend Framework và các lĩnh vực khác liên quan đến lập trình thiết kế web

• Tìm hiểu cách thức hoạt động, quản lý của chùa Thạnh Lâm

• Vận dụng vấn đề đã nghiên cứu để xây dựng website chùa Thạnh Lâm

• Đưa website chùa Thạnh Lâm vào hoạt động thực tiễn

Phi, BìnhPhi, BìnhPhi

2 01/10/2012

07/10/2012

Chỉnh sửa, cắt ghép layoutSoạn thảo dàn ý lý thuyết

PhiBình

3 08/10/2012

17/10/2012

Phân tích và thiết kế CSDLSoạn thảo lý thuyết

PhiBình

Trang 6

Phi, BìnhPhiBìnhPhi

SV Thực hiện

Trang 7

MỤC LỤC

TRƯỜNG ĐẠI HỌC GIAO THÔNG VẬN TẢI TP HCM 1

NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN i

NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN ii

LỜI CÁM ƠN iii

ĐỀ CƯƠNG CHI TIẾT iv

MỤC LỤC vi

DANH SÁCH CÁC BẢNG vii

DANH SÁCH CÁC HÌNH viii

DANH SÁCH CÁC CHỮ VIẾT TẮT, CHỮ TIẾNG ANH ix

MỞ ĐẦU xi

1.1.Gi i thi uớ ệ 1

1.2.M c tiêuụ 1

1.3.Ph m vi đ tàiạ ề 2

1.4.B c c báo cáoố ụ 2

2.1.C s d li u MySQLơ ở ữ ệ 3

2.2.Ngôn ng đánh d u siêu v n b n - HTMLữ ấ ă ả 3

2.3.Cascading Style Sheet – CSS 4

2.4.Ngôn ng l p trình PHPữ ậ 4

2.5.L p trình h ng đ i t ngậ ướ ố ượ 5

2.6.Zend Framework 7

2.6.1.Gi i thi uớ ệ 7

2.6.2.Mô hình MVC trong Zend Framework 8

2.6.3.C b n v các thành ph n trong Zend Frameworkơ ả ề ầ 9

2.6.4.Các l p c b n trong th vi n Zend Frameworkớ ơ ả ư ệ 11

2.6.5 u đi m và khuy t đi mƯ ể ế ể 33

3.1.Kh o sátả 35

3.2.Phân tích 36

3.3.L p trình và thi t kậ ế ế 37

3.3.1.Công c và ngôn ng s d ngụ ữ ử ụ 37

3.3.2.Thi t k c s d li uế ế ơ ở ữ ệ 38

3.3.3.S đ trang webơ ồ 47

4.1.Các ch c n ng c a trang webứ ă ủ 50

4.2.Các ng d ng trong trang webứ ụ 66

4.2.1 ng d ng công ngh Zend Framework vào trang webỨ ụ ệ 66

4.2.2.Các ng d ng khácứ ụ 67

5.1.Tóm t tắ 72

5.2.H ng phát tri nướ ể 72

TÀI LIỆU THAM KHẢO 74

Trang 8

DANH SÁCH CÁC BẢNG

Trang 9

DANH SÁCH CÁC HÌNH

Trang 10

DANH SÁCH CÁC CHỮ VIẾT TẮT, CHỮ TIẾNG ANH

 Các chữ viết tắt:

AJAX (Asynchronous JavaScript And XML): Công nghệ tải một phần

nội dung website

API (Application Programming Interface): Giao diện lập trình ứng dung.

CMS (Content Management System): Hệ thống quản lý nội dung.

CSS (Cascading Style Sheet): Ngôn ngữ trang trí website.

DOM (Document Object Model): Là một mô hình cho phép truy xuất

đến các thành phần của một tài liệu có cấu trúc

HTML (Hyper Text Markup Language): Ngôn ngữ đánh dấu siêu văn

bản

JSON (JavaScript Object Notation)Là cú pháp để lưu trữ và trao đổi

thông tin văn bản

LDAP (Lightweight Directory Access Protocol): Giao thức ứng dụng

truy cập các cấu trúc thư mục

MVC (Model View Controller): Phương pháp chia nhỏ một ứng dụng

thành ba thành phần để cài đặt, mỗi thành phần đóng một vai trò khácnhau và ảnh hưởng lẫn nhau

OOP (Object Oriented Programming): Lập trình hướng đối tượng.

PDF (Portable Document Format): Là một loại định dạng tài liệu văn

bản di dộng

PHP (Hypertext Preprocessor): Một ngôn ngữ lập trình website phổ

biến

RSS (Really Simple Syndication): Một định dạng tập tin thuộc họ XML

dùng trong việc chia sẻ tin tức website

SQL (Structured Query Language): Ngôn ngữ truy vấn cấu trúc cơ sở dữ

liệu

Trang 11

TCP/IP (Transmission Control Protocol/Internet Protocol): Tập hợp các

giao thức hỗ trợ việc lưu truyền trên mạng

URL (Uniform Resource Locator): Địa chỉ liên kết trỏ đến đích của một

website

 Các chữ tiếng Anh:

Album: Bộ sưu tập, tập ảnh, tập nhạc, …

Banner: Bảng giới thiệu ở vị trí đầu trang web.

Captcha: Nhập văn bản như trong hình hiển thị để xác nhận.

Footer: Phần dưới cùng của trang web.

Menu: Thực đơn tùy chọn.

Request: Yêu cầu.

Username: Tên đăng nhập.

Zoom: Phóng to, thu nhỏ một nội dung.

Trang 12

MỞ ĐẦU

Khi công nghệ thông tin ra đời, con người có thể tiếp cận mọi thứ ở hầu hếtmọi nơi trên thế giới một cách dễ dàng Trong đó, website là một thành tựu nổi bậtgóp phần không nhỏ cho bước ngoặc này Tuy nhiên, nhu cầu của con người khôngngừng tăng lên, chúng ta luôn cần những điều mới mẻ, từ thực tế đó yêu cầu cáccông ty thiết kế web không dừng lại ở việc lập trình web bằng PHP tuần tự hay lậptrình hướng đối tượng, mà còn phải biết ứng dụng các công nghệ Framework hiệnđại, trong đó Zend Framework là một framework phổ biến được nhiều người dùngnhất do là một PHP Framework được chính công ty phát triển ngôn ngữ PHP pháttriển Chúng tôi chọn đồ án này, bên cạnh việc được trực tiếp trải nghiệm quá trìnhthiết kế web thì chúng tôi còn muốn nhiều người nhận thấy được những nét đẹp vànhững điều tốt đẹp mà Phật Giáo mang lại cho cuộc sống, đồng thời chúng tôi cũngmuốn thay mặt đảo Phú Quý-tỉnh Bình Thuận gửi một thông điệp đến khách dulịch: Phú Quý- một hòn đảo tuyệt đẹp và nhiều bí ẩn đang chờ du khách đến khámphá

Khóa luận không chỉ xoay quanh việc nghiên cứu một công nghệ duy nhất làZend Freamework, mà còn kết hợp thêm nhiều công nghệ hiện đại khác như: CSS3,nhúng các CMS và các thư viện mã nguồn AJAX, JQuerry,… vào website để mangđến cho website những diện mạo mới, nhiều tính năng mới hiện đại hơn và từ đó sẽthu hút nhiều người xem hơn

Trang 13

CHƯƠNG 1: TỔNG QUAN 1.1 Giới thiệu

Hiện nay, thiết kế website đã trở nên khá phổ biến rộng rãi ở mọi nơi trên thếgiới, nên việc áp dụng các công nghệ mới là điều tất yếu cần phải có Nhu cầu thiết

kế web trên các framework với các thư viện được lập trình sẵn ngày càng cao dotính tiêu chuẩn hóa mã nguồn, tính thuận tiện và nhanh chóng,… Zend Framework

là một ví dụ điển hình, nó được chính công ty phát triển ngôn ngữ PHP(www.zend.com) phát triển với kho thư viện hỗ trợ ngày càng đầy đủ và phong phúluôn được cập nhật liên tục Hầu hết các nhà nghiên cứu và lập trình web đều biếtđến Zend Framework vì nó khá phổ biến Do Zend Framework là một dạng mãnguồn mở, nên thư viện của Zend Framework không chỉ được phát triển bởi các kỹ

sư lập trình web chuyên môn, mà còn được cộng đồng mạng đóng góp phát triển,nên Zend không ngừng phát triển và hoàn thiện

Tuy nhiên, do thư viện hỗ trợ khổng lồ, nên việc tìm hiểu và thích nghi vớiZend Framework là một điều khó khăn và tốn thời gian Vì thế, chúng tôi thực hiệnkhóa luận này nhằm trình bày các vấn đề cơ bản về Zend Framework, sau đó là cácphần mở rộng về Zend Framework cũng như các vấn đề khác liên quan đến lập trìnhthiết kế website Bên cạnh đó còn tạo một website thực tế cho chùa Thạnh Lâm đểứng dụng công nghệ Zend Framework

1.2 Mục tiêu

Khi tìm hiểu và ứng dụng Zend Framework, bên cạnh nắm vững phươngthức lập trình theo hướng đối tượng, chúng ta còn có thể biết được cách thức hoạtđộng của mô hình chuẩn MVC (Model-View-Controller) và sự thuận lợi mà các lớptrong thư viện Zend Framework hỗ trợ như việc tạo form, kiểm tra và sàn lọc dữliệu đầu vào, chứng thực và phân quyền người dùng, tích hợp các ứng dụng và dịch

vụ của các hãng thứ ba vào trong dự án,

Dựa vào lý thuyết đã tìm hiểu để ứng dụng vào xây dựng website chùaThạnh Lâm Khi xây dựng website, chúng ta sẽ biết được cách thức hoạt động vàquản lý thực tế cụ thể từ phía nhà chùa, cũng như nhu cầu từ phía người dùng Từ

Trang 14

đó rút ra kinh nghiệm thực tế cho công việc lập trình thiết kế website sau này Đồngthời giới thiệu nét đẹp văn hóa Phật Giáo đến cho mọi người, nhằm đem lại cuộcsống an lành hạnh phúc Qua đó, hình ảnh đảo Phú Quý-tỉnh Bình Thuận cũng đượcquảng bá rộng rãi – một danh lam thắng cảnh đẹp của miền nam Việt Nam.

1.3 Phạm vi đề tài

Đề tài khóa luận không chỉ xoay quanh việc nghiên cứu một công nghệ duynhất là Zend Freamework, mà còn kết hợp thêm nhiều công nghệ hiện đại khác liênquan đến việc lập trình và thiết kế website như: công nghệ thiết kế CSS3 mới,nhúng các CMS và các thư viện mã nguồn AJAX, JQuerry, … vào website để mangđến cho website những diện mạo mới, nhiều tính năng mới hiện đại hơn và từ đó sẽthu hút nhiều người xem hơn

Áp dụng các lý thuyết đã nghiên cứu trong khóa luận để tạo một trang webhoạt động thực tiễn cho chùa Thạnh Lâm Để thực hiện được điều đó, chúng tôiphải tham khảo mô hình hoạt động, quản lý của các trang web nói chung và websitechùa nói riêng Nắm bắt được nhu cầu thực tế của người dùng để lập trình và thiết

kế trang web một cách hợp lý, tối ưu

1.4 Bố cục báo cáo

Khóa luận tập trung nghiên cứu các vấn đề sau:

 Tìm hiểu công nghệ Zend Framework

• Giới thiệu về Zend Framework

• Mô hình MVC (Model-View-Controller) trong Zend Framework

• Các lớp cơ bản trong thư viện Zend Framework

• Ưu điểm và khuyết điểm của Zend Framework

 Lập trình thiết kế website chùa Thạnh Lâm

• Khảo sát và phân tích hiện trạng thực tế

• Phân tích và thiết kế cơ sở dữ liệu cho website

• Ứng dụng Zend Framework và các công nghệ khác vào thiết kế vàlập trình web cho chùa Thạnh Lâm

• Hướng phát triển trong tương lai

Trang 15

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT

2.1 Cơ sở dữ liệu MySQL

MySQL là hệ quản trị cơ sở dữ liệu tự do nguồn mở phổ biến nhất thế giới

và được các nhà phát triển rất ưa chuộng trong quá trình phát triển ứng dụng VìMySQL là cơ sở dữ liệu tốc độ cao, ổn định và dễ sử dụng, có tính khả chuyển, hoạtđộng trên nhiều hệ điều hành cung cấp một hệ thống lớn các hàm tiện ích rấtmạnh.Với tốc độ và tính bảo mật cao, MySQL rất thích hợp cho các ứng dụng cótruy cập CSDL trên internet MySQL miễn phí hoàn toàn cho nên có thể tải vềMySQL từ trang chủ Nó có nhiều phiên bản cho các hệ điều hành khác nhau: phiênbản Win32 cho các hệ điều hành dòng Windows, Linux, Mac OS X, Unix,FreeBSD, NetBSD, Novell NetWare, SGI Irix, Solaris, SunOS,

MySQL là một trong những ví dụ rất cơ bản về Hệ Quản trị Cơ sở dữ liệuquan hệ sử dụng Ngôn ngữ truy vấn có cấu trúc (SQL)

MySQL được sử dụng cho việc bổ trợ PHP, Perl, và nhiều ngôn ngữ khác, nólàm nơi lưu trữ những thông tin trên các trang web viết bằng PHP hay Perl,

2.2 Ngôn ngữ đánh dấu siêu văn bản - HTML

HTML là dạng viết tắt của Hyper Text Markup Language (ngôn ngữ đánhdấu siêu văn bản) được biết đến là một loại ngôn ngữ dùng để mô tả hiển thị cáctrang web Nhiều người nhầm tưởng HTML là ngôn ngữ lập trình nhưng sự thựckhông phải như vậy, nó là một ngôn ngữ đánh dấu Một ngôn ngữ đánh dấu là một

Trang 16

2.3 Cascading Style Sheet – CSS

Cascading Style Sheets, hay còn gọi tắt là CSS, là những tập tin hỗ trợ chotrình duyệt web trong việc hiển thị một trang HTML Về cơ bản, các trang HTMLnhư bộ xương - khuôn khổ cơ bản của một trang web, trong khi các file CSS sẽ cụthể hóa các thành phần của một trang nên được hiển thị như thế nào CSS cho phépkiểm soát phông chữ, màu chữ, kiểu nền của một trang HTML

CSS đã giúp cho việc thay đổi phong cách của một trang web đơn giản hơn

và đỡ tốn thời gian hơn, có thể thực hiện sự thay đổi trên một mục nào đó và sau đó

áp dụng sự thay đổi này trên toàn bộ trang web thay vì phải thực hiện trên từng mụcriêng lẻ như trước đây

Thế mạnh của CSS:

• Tách riêng phần định dạng ra khỏi nội dung trang web

• CSS giúp người thiết kế kiểm soát toàn bộ giao diện trang web mộtcách nhanh nhất và hiệu quả nhất nên người thiết kế sẽ tiết kiệm đượcnhiều công sức

• Do được tách rời khỏi nội dung của trang web, nên các mã HTML sẽgọn gàng hơn, giúp người thiết kế thuận tiện hơn trong việc chỉnh sửagiao diện Kích thước của file html cũng được giảm đáng kể Hơn thếnữa sẽ được trình duyệt tải một lần và dùng nhiều lần (cache), do đógiúp trang web được load nhanh hơn

Trang 17

dụng web, tốc độ nhanh, nhỏ gọn, cú pháp giống C và Java, dễ học và thời gian xâydựng sản phẩm tương đối ngắn hơn so với các ngôn ngữ khác nên PHP đã nhanhchóng trở thành một ngôn ngữ lập trình web phổ biến nhất thế giới.

2.5 Lập trình hướng đối tượng

Lập trình hướng đối tượng (gọi tắt là OOP, từ chữ Anh ngữ object-orientedprogramming), hay còn gọi là lập trình định hướng đối tượng, là kĩ thuật lập trình

hỗ trợ công nghệ đối tượng OOP được xem là giúp tăng năng suất, đơn giản hóa độphức tạp khi bảo trì cũng như mở rộng phần mềm bằng cách cho phép lập trình viêntập trung vào các đối tượng phần mềm ở bậc cao hơn Ngoài ra, nhiều người còncho rằng OOP dễ tiếp thu hơn cho những người mới học về lập trình hơn là cácphương pháp trước đó

Một cách giản lược, đây là khái niệm và là một nỗ lực nhằm giảm nhẹ cácthao tác viết mã cho người lập trình, cho phép họ tạo ra các ứng dụng mà các yếu tốbên ngoài có thể tương tác với các chương trình đó giống như là tương tác với cácđối tượng vật lý

Những đối tượng trong một ngôn ngữ OOP là các kết hợp giữa mã và dữ liệu

mà chúng được nhìn nhận như là một đơn vị duy nhất Mỗi đối tượng có một tênriêng biệt và tất cả các tham chiếu đến đối tượng đó được tiến hành qua tên của nó.Như vậy, mỗi đối tượng có khả năng nhận vào các thông báo, xử lý dữ liệu (bêntrong của nó), và gửi ra hay trả lời đến các đối tượng khác hay đến môi trường

Các tính chất cơ bản:

• Tính trừu tượng (abstraction): Đây là khả năng của chương trình bỏqua hay không chú ý đến một số khía cạnh của thông tin mà nó đang

Trang 18

trực tiếp làm việc lên, nghĩa là nó có khả năng tập trung vào nhữngcốt lõi cần thiết Mỗi đối tượng phục vụ như là một "động tử" có thểhoàn tất các công việc một cách nội bộ, báo cáo, thay đổi trạng tháicủa nó và liên lạc với các đối tượng khác mà không cần cho biết làmcách nào đối tượng tiến hành được các thao tác Tính chất này thườngđược gọi là sự trừu tượng của dữ liệu.

Tính trừu tượng còn thể hiện qua việc một đối tượng ban đầu có thể

có một số đặc điểm chung cho nhiều đối tượng khác như là sự mởrộng của nó nhưng bản thân đối tượng ban đầu này có thể không cócác biện pháp thi hành Tính trừu tượng này thường được xác địnhtrong khái niệm gọi là lớp trừu tượng hay lớp cơ sở trừu tượng

• Tính đóng gói (encapsulation) và che giấu thông tin (informationhiding): Tính chất này không cho phép người sử dụng các đối tượngthay đổi trạng thái nội tại của một đối tượng Chỉ có các phương thứcnội tại của đối tượng cho phép thay đổi trạng thái của nó Việc chophép môi trường bên ngoài tác động lên các dữ liệu nội tại của mộtđối tượng theo cách nào là hoàn toàn tùy thuộc vào người viết mã.Đây là tính chất đảm bảo sự toàn vẹn của đối tượng

• Tính đa hình (polymorphism): Thể hiện thông qua việc gửi các thôngđiệp (message) Việc gửi các thông điệp này có thể so sánh như việcgọi các hàm bên trong của một đối tượng Các phương thức dùng trảlời cho một thông điệp sẽ tùy theo đối tượng mà thông điệp đó đượcgửi tới sẽ có phản ứng khác nhau Người lập trình có thể định nghĩamột đặc tính (chẳng hạn thông qua tên của các phương thức) cho mộtloạt các đối tượng gần nhau nhưng khi thi hành thì dùng cùng một têngọi mà sự thi hành của mỗi đối tượng sẽ tự động xảy ra tương ứngtheo đặc tính của từng đối tượng mà không bị nhầm lẫn

Thí dụ khi định nghĩa hai đối tượng "hinh_vuong" và "hinh_tron" thì

có một phương thức chung là "chu_vi" Khi gọi phương thức này thì

Trang 19

nếu đối tượng là "hinh_vuong" nó sẽ tính theo công thức khác với khiđối tượng là "hinh_tron".

• Tính kế thừa (inheritance): Đặc tính này cho phép một đối tượng cóthể có sẵn các đặc tính mà đối tượng khác đã có thông qua kế thừa.Điều này cho phép các đối tượng chia sẻ hay mở rộng các đặc tính sẵn

có mà không phải tiến hành định nghĩa lại Tuy nhiên, không phảingôn ngữ định hướng đối tượng nào cũng có tính chất này

2.6 Zend Framework

2.6.1 Giới thiệu

Năm 2005, Andi Gutmans của Zend Technologies đã công bố Zend’s PHPCollaboration Project và giới thiệu Zend Framework Phiên bản 1.0 được phát hànhvào 7/2007 và các phiên bản mới được ra đời thường xuyên sau đó Phiên bản mớinhất hiện nay là Zend Framework 2.0

Zend Framework là một framework mã nguồn mở nhằm phát triển các ứng dụng

và dịch vụ web trên nền ngôn ngữ lập trình PHP Zend Framework là một PHPFramework được chính công ty phát triển ngôn ngữ PHP phát triển.Vì vậy sẽ không

có lý do nào mà Zend Framework sẽ bị biến mất trong tương lai trừ khi PHP khôngtồn tại nữa Những thành viên phát triển Zend Framework là những chuyên gia nổitiếng về mã nguồn mở và PHP trên thế giới

Zend Framework được triển khai bằng 100% mã hướng đối tượng nên có thể dễdàng thừa kế, nâng cấp các ứng dụng Zend Framework cung cấp một mô hìnhMVC mạnh mẽ với hiệu suất cao Cơ cấu thành phần của Zend Framework là đơnnhất, mỗi thành phần được thiết kế ít phụ thuộc vào các thành phần khác Kiến trúcnày cho phép các nhà phát triển dễ sử dụng các thành phần riêng lẻ Zend sử dụngnhững kiểu mẫu thiết kế (design pattern) hiện đại, hỗ trợ tối đa tính linh hoạt, khinghiên cứu và làm việc trên Zend Framework ta thu được rất nhiều kiến thức mới.Thư viện Zend rất đầy đủ, phong phú và chúng ta có thể tự phát triển thêm

Trang 20

2.6.2 Mô hình MVC trong Zend Framework

MVC (Model View Controller) là tên một phương pháp chia nhỏ một ứngdụng thành ba thành phần để cài đặt, mỗi thành phần đóng một vai trò khác nhau vàảnh hưởng lẫn nhau, đó là models, views, và controllers Mô hình MVC phát triểnnhằm mục tiêu giảm thiểu độ phức tạp của phần mềm, thuận tiện cho việc pháttriển, nâng cấp, phân rã các thành phần (module) đễ dễ dàng thay thế, thêm hoặcsửa chữa các thành phần này

Các thành phần trong mô hình MVC:

Trong kiến trúc này, hệ thống được chia thành 3 tầng tương ứng đúng với têngọi của nó (Model – View – Controller) Ở đó nhiệm vụ cụ thể của các tầng đượcphân chia như sau:

Hình 2 1: Mô hình kiến trúc MVC

• Controller (Tầng điều khiển): Là phần điều khiển của ứng dụng, điều hướngcác nhiệm vụ (task) đến đúng phương thức (method) có chức năng xử lýnhiệm vụ đó Nó chịu trách nhiệm xử lý các tác động về mặt giao diện, cácthao tác đối với models, và cuối cùng là chọn một hiển thị (view) thích hợp

để hiển thị ra màn hình

Trang 21

• Model (Tầng dữ liệu): Là một đối tượng hoặc một tập hợp các đối tượng biểudiễn cho phần dữ liệu của chương trình Nó được giao nhiệm vụ cung cấp dữliệu cho cơ sở dữ liệu và lưu dữ liệu vào các kho chứa dữ liệu Tất cả cácnghiệp vụ logic được thực thi ở Model Dữ liệu vào từ người dùng sẽ thôngqua View đến Controller và được kiểm tra ở Model trước khi lưu vào cơ sở

dữ liệu Việc truy xuất, xác nhận, và lưu dữ liệu là một phần của Model

• View (Tầng giao diện): Là phần giao diện với người dùng, bao gồm việchiện dữ liệu ra màn hình, cung cấp các menu, nút bấm, hộp đối thoại, chọnlựa…, để người dùng có thể thêm, xóa sửa, tìm kiếm và làm các thao táckhác đối với dữ liệu trong hệ thống Thông thường, các thông tin cần hiển thịđược lấy từ thành phần models

Hình 2 2: Mô hình MVC trong Zend Framework

Tóm lại, chu trình hoạt động tổng quát của mô hình MVC như sau: Controllertiếp nhận yêu cầu từ phía người dùng, sau đó phân tích các yêu cầu đó để lấy dữliệu từ các Model, dữ liệu được trả về Controller để chuyển tới phần View để hiểnthị hồi đáp cho yêu cầu của người dùng

2.6.3 Cơ bản về các thành phần trong Zend Framework

Có thể chia các thành phần trong Zend Framework thành 6 nhóm chính:

 Thành phần MVC: cung cấp đầy đủ các tính năng để xây dựng ứng dụngtheo mô hình MVC, tách phần hiển thị ra khỏi phần xử lý Bao gồm các lớpsau:

Trang 22

• Zend_Layout, Zend_View, Zend_View_Helper, …

 Thành phần xác nhận và truy cập: hỗ trợ người xây dựng web đảm bảo tính

an toàn, bảo mật, quản lý và phân quyền cho người dùng một cách nhanhchóng và đơn giản Bao gồm các lớp sau:

• Zend_Service

• Zend_Service_Amazon

• Zend_Service_Yahoo, …

Trang 23

 Thành phần cốt lỗi: giúp tăng tốc website một cách đáng kể

về, nó sẽ chuyển các dữ liệu ra view để hiển thị ra màn hình

Các controller sẽ nằm trong thư mục controllers, controller mặc định khi vàomột trang web là IndexController

Tên tập tin controller được quy ước đặt tên như sau:

Chữ cái đầu tiên viết hoa + Controller.php

Ví dụ: ta có thành viên là một controller thì có tên file như sau:

ThanhvienController.phpMỗi controller là một lớp, tên lớp là tên controller và lớp này phải kế thừa lớpZend_Controller_Action, mỗi lớp có các Action là các hàm, trong đó có một hàmđặc biệt là hàm init() được tự động gọi khi ta gọi một Action trong controller.Action mặc định khi gọi một controller là indexAction()

Tên action được quy ước đặt tên như sau:

Tên action viết thường + Action()

Ví dụ:

class ThanhvienController extends Zend_Controller_Action {

public function init() {

…}

public function indexAction () {

…}

Trang 24

Với mỗi controller chúng ta phải tạo một thư mục trong thư mục views,trong các thư mục của controller vừa tạo chứa các tệp *.phtml tương ứng với têncủa các action

2.6.4.2 Zend_View

Ứng với mỗi controller chúng ta phải tạo một thư mục trong thư mục views,trong các thư mục của controller vừa tạo chứa các tệp *.phtml tương ứng với têncủa các action

Ví dụ: views/scripts/thanhvien/index.phtml

Khi một action của controller được gọi, Zend sẽ vào thư mục mang têncontroller trong thư mục views và gọi tệp *.phtml mang tên action được gọi Tạiđây các dữ liệu truyền qua từ action sẽ được hiển thị ra màn hình qua tệp *.phtml

Cách thức truyền biến:

Trong action của controller Tại view tương ứng với action đó

$this->view->ten_bien = "giá trị"; echo $this->ten_bien;

echo "[$chiSo] - $giaTri <br>";

Bảng 2 1: Bảng cách thức truyền biến trong Zend Framework

Để gọi các tệp *.css và *.js, ta thêm các dòng lệnh sau trong hàm init():

Trang 26

• Cách 1: thêm vào các mã lệnh sau trong hàm init() ở các controller:public function init() {

$option = array (

"layout" => "layouts", // tên file layout: *.phtml

"layoutPath" => APPLICATION_PATH "/modules/default/layouts/scripts" // đường dẫn chứa layout

Trang 27

require("banner.php"); // chèn trang chứa banner vàorequire("menu.php"); // chèn trang chứa menu vàoecho $this->layout()->content;

require("footer.php"); // chèn trang chứa footer vào

Trước tiên ta phải thực hiện kết nối cơ sở dữ liệu bằng một trong hai cách sau:

• Cách 1: khai báo trong tệp application.ini

• Cách 2: bổ sung hàm sau vào tệp Bootstrap.php

protected function _initDB(){

$db = Zend_Db::factory(

'Pdo_Mysql',array(

'host' => 'localhost', 'username' => 'root',

Trang 28

'password' => '', 'dbname' => 'sanpham', 'charset' => 'utf8'

));

• Tên bảng:

protected $_name = "TênBảng";

• Tên khóa chính

 Nếu chỉ có một khóa chính

protected $_primary = "TênKhóaChính";

 Nếu có nhiều hơn một khóa chính

protected $_primary = array('id_abc', 'id_cba');

 Nếu khóa chính có thuộc tính “AUTO_INCREMENT”

protected $_sequence = true;

Ví dụ: chúng ta có bảng sanpham, với id_ sanpham là khóa chính, ta sẽ tạotệp sanpham.php với nội dung sau

Trang 29

Khi làm việc với các framework, chúng ta sẽ làm quen với khái niệm “activerecord”, đó là các hàm dựng sẵn giúp ta dễ dàng thực hiện các câu truy vấn bằngviệc truyền vào các dữ liệu cần thiết mà không cần viết câu truy vấn Sau đây là cácactive record cơ bản:

 Câu lệnh select:

Tạo một select: $se = $this->select();

Lệnh này tương đương với câu SQL: “select *”

Sau đó chúng ta sẽ sử dụng $se để thêm các thông số cho truy vấn:

Câu lệnh from: $se->from(tênBảng, array(“trường1”, “trường2”));

Câu lệnh where: $se->where(‘tênTrường biểuThức giáTrị’);

Câu lệnh order: $se->order(‘tênTrường ACS|DESC’);

Câu lệnh limit: $se->limit(‘sốDòngĐượcLấy’, ‘từDòngSố’);

Lấy toàn bộ mảng dữ liệu trả về: $this->fetchAll($se)->toArray();

Lấy dòng đầu tiên của dữ liệu: $this->fetchRow($se)->toArray();

Khởi tạo đối tượng

$all= array(); //mảng dữ liệu cần phân trang

Trang 30

$pa= Zend_Paginator::factory($all);

Các thuộc tính hỗ trợ

Thuộc tính Chức năng

firstPageInRange Trang đầu tiên của nhóm đang hiển thị

curent Trang hiện hành

currentItemCount Số dòng trong trang hiện hành

lastItemNumber Số thứ tự dòng cuối cùng trong trang hiện hành

lastPageInRange Trang cuối cùng trong nhóm

pageCount Tổng số trang

pagesInRange Các trang trong nhóm

previous Trang trước trang hiện hành

totalItemCount Tổng số dòng

Bảng 2 2: Bảng các thuộc tính trong Zend_Paginator

Các thuộc tính này có tác dụng tại tệp tạo hiển thị điều khiển phân trang

Các phương thức hỗ trợ

setCurrentPageNumber($page) Trang hiện hành

setItemCountPerPage Số dòng trong một trang

setPageRange Số trang hiển thị ở phần điều khiển

Bảng 2 3: Bảng các phương thức trong Zend_Paginator

Tạo cache khi phân trang

Một nhược điểm của Zend_Paginator là nó mang theo toàn bộ dữ liệulấy ra để phân trang và mang từ trang này sang trang khác chứ không dùng từkhóa limit trong câu SQL, điều này làm cho website chạy chậm lại Tuynhiên chúng ta có thể cải thiện điều này bằng việc tạo cache cho các trang.Khi ghé thăm mỗi trang, trang đó sẽ được cache lại và mỗi lần ghé thăm sau

sẽ không phải tải lại trang đó

Sau đây là các hàm thông dụng trong việc cache:

setCacheEnable(false) enable hoặc disable cache

getCurrentItems() đưa trang hiện hành vào cache

getItemsByPage($page) cache một trang chỉ định

Trang 31

clearPageItemCache($page) xóa cache cho một trang.

getPageItemCache() lấy dữ liệu cache ra

setItemCountPerPage($count

Bảng 2 4: Bảng các hàm hỗ trợ cache trong Zend_Paginator

2.6.4.6 Zend_Form

Để tạo ra một form, cách đơn giản nhất vẫn là tự gõ các thẻ HTML như thôngthường Tuy nhiên hầu hết các framework đều dựng sẵn các lớp hỗ trợ việc tạoform Về hình thức, các lớp tạo một form của các framework khá rườm rà Mặc dùvậy chúng có những lợi điểm riêng và những tính năng hỗ trợ thêm ngoài khả năngtạo form

Tạo Zend_Form:

Cú pháp: $form = new Zend_Form;

Đặt các thuộc tính cho form:

• Action: $form->setAction(“action của form”);

• Method: $form->setMethod(“POST|GET”);

• Attribute: $form->setAttrib(“tên thuộc tính”, “giá trị”);

Tạo các thẻ trong form:

Cú pháp: $form->CreateElement(“loạiĐốiTượng”, “tênĐốiTượng”, array(danhSáchThuộcTính));

Trong đó loại đối tượng là các giá trị: text, password, select, radio, checkbox, textarea, hidden, reset, image, button, submit,

Lợi ích khi dùng Zend_Form:

• Đổ dữ liệu tự động (populate): nếu người dùng đã có sẵn dữ liệu trong cơ

sở dữ liệu và có nhu cầu đổ vào form để chỉnh sửa, như thông thườngchúng ta phải tự động làm các thao tác này, sẽ khá vất vã nếu đối tượng

có nhiều thuộc tính Zend_Form cho hỗ trợ đổ dữ liệu vào các đối tượngtrong form tự động với điều kiện tên các đối tượng HTML phải trùng têncác trường tương ứng trong cơ sở dữ liệu

Trang 32

• Kiểm tra dữ liệu (validate): zend cho phép kiểm tra dữ liệu đầu vào cóphù hợp với điều kiện đặt ra hay không Nếu không phù hợp sẽ hiệnthông báo lỗi.

• Lọc dữ liệu (filter): zend lọc dữ liệu đầu vào so với điều kiện trước khilưu vào cơ sở dữ liệu, nếu không phù hợp sẽ hiện thông báo lỗi

2.6.4.7 Zend_Validate

Zend_Validate cho phép kiểm tra dữ liệu đầu vào phổ biến cần thiết Nó có thểđược áp dụng cho nhiều đối tượng, và mỗi đối tượng có thể có nhiều validate Sauđây là các validate phổ biến:

$val= Zend_Validate_NotEmpty; Không được rỗng

$val= new Zend_Validate_Alnum; Chuỗi chỉ gồm chữ và số

Không có khoảng trắng trong chuỗi

$val= new Zend_Validate_Alnum(

array(“allowWhiteSpace”=>true));

Chuỗi chỉ gồm chữ và số

Ký tự khoảng trắng là hợp lệ

$val= new Zend_Validate_Alpha; Chuỗi chỉ gồm ký tự chữ

Không có khoảng trắng trong chuỗi

$val= new Zend_Validate_Alpha(

$val= new Zend_Validate_Digits; Giá trị là các số

$val= new Zend_Validate_EmailAddress; Email hợp lệ

Trang 33

Bảng 2 5: Bảng chức năng của các validate

2.6.4.8 Zend_Filter

Zend_Filter cho phép lọc lại dữ liệu trước khi lưu vào cơ sở dữ liệu Cũnggiống như Zend_Validate, nó có thể được áp dụng cho nhiều đối tượng, và mỗi đốitượng có thể có nhiều filter Sau đây là các filter phổ biến:

$fil=new Zend_Filter_Alnum(); Chỉ lấy chữ và số

Không lấy khoảng trắng và ký tự đặc biệt

$fil=new Zend_Filter_Alnum(

array("allowWhiteSpace"=>true));

Chỉ lấy chữ và số, không lấy ký tự đặc biệtcho phép lấy khoảng trắng

$fil=new Zend_Filter_Alpha(); Chỉ lấy chữ

không lấy khoảng trắng và ký tự đặc biệt

$fil=new Zend_Filter_StringTrim; Lấy chuỗi và bỏ khoảng trống đầu cuối

$fil=new Zend_Filter_Digits(); Chỉ lấy số

$fil=new Zend_Filter_Int; Chỉ lấy số đầu tiên của chuỗi

$fil=new Zend_Filter_StripTags(); Bỏ toàn bộ thẻ XML và HTML

$fil=new Zend_Filter_StripTags(

array("allowTags"=>"a"));

Bỏ toàn bộ thẻ XML và HTML Ngoại trừ các thẻ liệt kê

$fil=new Zend_Filter_StripTags(array( Bỏ toàn bộ thẻ XML và HTML

Trang 34

lý tập trung và dễ dàng hơn.

Như trong PHP thuần, trước khi thao tác với session chúng ta phải khởi độngsession Trong Zend Framework chúng ta làm việc này bằng cách thêm dòng sauvào file bootstrap ở ngoài cùng:

Zend_Session::start();

Tạo một đối tượng session:

$tên_session= new Zend_Session_Namespace(“namespace”);

Namespace có thể bỏ trống, khi đó namespace có giá trị là “default”

Ví dụ: $user= new Zend_Session_Namespace(“user”);

Dòng code trên tương đương với khai báo: $_SESSION[“user”];

Trang 35

2.6.4.10 Zend_Auth

Zend Framework hỗ trợ việc chứng thực thông qua đối tượng Zend_Auth, đối tượng này nhận thông tin từ người dùng và kiểm tra với dữ liệu được chỉ định trong

cơ sở dữ liệu để kiểm tra tính hợp lệ

Sau đây là các khái niệm trong Zend_Auth:

tableName tên bảng chứa thông tin chứng thực

identityColumn tên cột nhận dạng (thường là username) trong bảng thông tin

chứng thựccredentialColum

n

tên cột nhận dạng bí mật (thường là password) trong bảng thôngtin chức thực

Identity tên text field chứa thông tin so sánh với identityColumn

credential tên password field chứa thông tin so sánh với credentialColumn

Bảng 2 7: Bảng các khái niệm trong Zend_Auth

Sau đây là các bước chứng thực:

• Chỉ ra các bảng chứa thông tin chứng thực:

$authTable= new Zend_Auth_Adapter_Dbtable();

$authTable->setTableName(“tên bảng chứa thông tin chứng thực”);

$authTable->setIdentiny(“tên cột nhận dạng”);

$authTable->setCredentialColumn(“cột chứa thông tin bí mật”);

• Đưa các giá trị tương ứng với identity và credential vào đối tượng

Zend_Auth_Adapter_Dbtable:

$authTable->setIdentity(“dữ liệu của identity đầu vào”);

$authTable->setCredential(“dữ liệu credential đầu vào”);

Trang 36

$kq= $result->isValid();

• Lấy thông tin nếu thành công:

o Bỏ một vài field từ dữ liệu thành công

$info= $authTable->getResultRowObject(null, array(“các trường không nhận”));

o Chỉ nhận một vài field cần thiết

$info= $authTable->getResultRowObject(array(“các trường cần trả về”));

• Ghi dữ liệu đã chứng thực vào session

Trước tiên, ta phải tìm hiểu khái niệm Roll và Resource:

• Role: Cấp độ người dùng bị tác động: user, admin, …

• Resource: phân quyền lên các tài nguyên: module, controller, action,…

Để thực hiện phân quyền, trước tiên ta phải khai báo như sau:

$acl= new Zend_Acl();

Trang 37

Chỉ ra các role và resource cho Zend_Acl biết:

$user= new Zend_Acl_Role(‘user’);

$resindex= new Zend_Acl_Resource(‘index’);

Sau khi chỉ ra, resource và role phải được đưa vào đối tượng Zend_Acl

Ta hiến hành cấp quyền như sau:

• Cho phép: $acl->allow(role, resource, action);

Ví dụ: $acl->allow(“user”,”index”,”index”);

Nghĩa là: cho phép user vào action index của controller index

• Không cho phép: $acl->deny(role, resource, action);

Ví dụ: $acl->deny(“user”,”index”,”delete”);

Nghĩa là: cấm user vào action delete của controller index

Thông thường website có nhiều controller và mỗi controller có nhiều action,đôi khi muốn cấp quyền cho nhiều hay toàn bộ đối tượng giống nhau, không thểthiết lập từng quyền allow hay deny được Cú pháp chung của quyền allow và denynhư sau:

allow/deny(role, resource, action)Nếu như một trong ba tham số là null thì nghĩa là chọn toàn bộ đối tượng củanhóm đó

Ví dụ: $acl->allow(“admin”, null, “index”);

Nghĩa là: cho phép admin vào action index của tất cả các controller

Để kiểm tra với các role được cung cấp có quyền trên action và của resourcehay không ta dùng câu lệnh sau:

$acl->isAllowed($role, $resource, $action);

Trang 38

2.6.4.12 Zend_Captcha

Trong một website, việc thêm, xóa, sửa các bảng dữ liệu đa phần nằm trongphần quản trị Tuy nhiên ở một vài chức năng của người dùng có cho phép thao tácvới cơ sở dữ liệu Việc cho người dùng thao tác trên cơ sở dữ liệu chứa nhiều rủi ro,

có thể các đoạn mã độc được chèn vào, làm ngập lụt cơ sở dữ liệu hay các tấn côngSQL injection Một trong các giải pháp hạn chế rủi ro là dùng captcha Captcha là

mã xác nhận dưới dạng hình ảnh, chúng làm cho hacker khó khăn hơn trong việcđọc dữ liệu xác nhận Zend hỗ trợ lớp Zend_Captcha giúp chúng ta tạo captchanhanh chóng và các phương thức giúp quản lý captcha một cách đơn giản

Bản chất captcha là một ảnh và các ký tự xác nhận được vẽ lên ảnh đó Theotrình tự thực hiện, một ảnh nền sẽ được tạo, tiếp đó phát sinh chuỗi xác nhận, vẽchuỗi xác nhận lên ảnh và tạo một session chứa kí tự đã vẽ lên ảnh

Để thực hiện captcha, ta làm như sau:

 Khởi tạo đối tượng: $captcha= new Zend_Captcha_Image();

 Thiết lập các thông số của captcha:

• setWordLen(‘6’): số kí tự xuất hiện trên captcha

• setHeight(‘80’): chiều cao của ảnh chứa kí tự xác nhận

• setWidth(‘200’): độ rộng của ảnh captcha

Trang 39

• setImgDir(‘đường dẫn’): đường dẫn tuyệt đối tới thư mục chứa captcha phát sinh.

• setImgUrl(‘đường dẫn’): đường dẫn tương đối tới thư mục chứa captcha

• setFont(‘đường dẫn’): đường dẫn tới thư mục chứa font chữ

• Khởi tạo đối tượng:

$zfile= new Zend_File_Transfer_Adapter_Http;

• Lấy thông tin các filefield:

$info= $zfile->getFileInfo();

• Lấy tên tệp được tải lên:

$filename= $info[‘tên filefield’][‘name’];

• Chỉ đường dẫn đến thư mục chứa các tệp được tải lên:

$zfile->setDestination(“đường dẫn”);

• Số lượng tệp được tải lên:

$zfile->setValidators(array(‘count’=>array(

‘min’=>‘số tệp tối thiểu’,

’max’=>‘số tệp tối đa’)));

Trang 40

• Giới hạn dung lượng tệp (tính theo byte:

Một thao tác khá quen thuộc trong các website chính là gửi mail, Zend

Framework tạo ra đối tượng Zend_Mail hỗ trợ việc gửi mail dễ dàng hơn và có thể tùy biến nhiều yếu tố giúp cho việc gửi mail trở nên đơn giản

• Cài đặt thông số mail server

$tr= new Zend_Mail_Transport_Smtp(“ip hoặc link mail server”);Zend_Mail::setDefaultTransport($tr);

• Khởi tạo đối tượng Zend_Mail và các thông số của một mail

$mail= new Zend_Mail(); //khởi tạo đối tượng

$mail->setBodyText(“nội dung mail”);

$mail->setFrom(email người gửi, tên người gửi);

$mail->addTo(email người nhận, tên người nhận);

$mail->setSubject(tiêu đề mail);

$mail->send($tr); // gửi mail

• Gửi mail qua nhiều connection

$gate1= new Zend_Mail_Transport_Smtp(ip hoặc link mail server);

$gate2= new Zend_Mail_Transport_Smtp(ip hoặc link mail server);

$mail->send($gate1);

$mail->send($gate2);

• Người nhận trong Zend_Mail

Ngày đăng: 20/10/2014, 18:27

HÌNH ẢNH LIÊN QUAN

Hình 2. 1: Mô hình kiến trúc MVC - xây dựng website chùa thạnh lâm trên nền zend framework
Hình 2. 1: Mô hình kiến trúc MVC (Trang 20)
Bảng 2. 2: Bảng các thuộc tính trong Zend_Paginator - xây dựng website chùa thạnh lâm trên nền zend framework
Bảng 2. 2: Bảng các thuộc tính trong Zend_Paginator (Trang 30)
Bảng 3. 1: Bảng loại thành viên. - xây dựng website chùa thạnh lâm trên nền zend framework
Bảng 3. 1: Bảng loại thành viên (Trang 50)
Bảng 3. 5: Bảng câu hỏi. - xây dựng website chùa thạnh lâm trên nền zend framework
Bảng 3. 5: Bảng câu hỏi (Trang 51)
HinhDaiDien VARCHAR(100) Hình đại diện của tin - xây dựng website chùa thạnh lâm trên nền zend framework
inh DaiDien VARCHAR(100) Hình đại diện của tin (Trang 52)
Bảng 3. 15: Bảng loại sách. - xây dựng website chùa thạnh lâm trên nền zend framework
Bảng 3. 15: Bảng loại sách (Trang 54)
3.3.2.2. Sơ đồ quan hệ các bảng cơ sở dữ liệu - xây dựng website chùa thạnh lâm trên nền zend framework
3.3.2.2. Sơ đồ quan hệ các bảng cơ sở dữ liệu (Trang 57)
3.3.3. Sơ đồ trang web - xây dựng website chùa thạnh lâm trên nền zend framework
3.3.3. Sơ đồ trang web (Trang 59)
Hình 3. 3: hình sơ đồ trang web ở trang quản lý - xây dựng website chùa thạnh lâm trên nền zend framework
Hình 3. 3: hình sơ đồ trang web ở trang quản lý (Trang 60)
Hình 3. 4: hình sơ đồ trang web ở trang quản lý - xây dựng website chùa thạnh lâm trên nền zend framework
Hình 3. 4: hình sơ đồ trang web ở trang quản lý (Trang 61)
Hình 4. 2: hình trang quản lý - xây dựng website chùa thạnh lâm trên nền zend framework
Hình 4. 2: hình trang quản lý (Trang 63)
Hình 4. 4: hình trang chủ (trang mặc định) website - xây dựng website chùa thạnh lâm trên nền zend framework
Hình 4. 4: hình trang chủ (trang mặc định) website (Trang 65)
Hình 4. 5: hình chức năng tìm kiếm nhanh. - xây dựng website chùa thạnh lâm trên nền zend framework
Hình 4. 5: hình chức năng tìm kiếm nhanh (Trang 66)
Hình 4. 7: hình danh sách tin tức - xây dựng website chùa thạnh lâm trên nền zend framework
Hình 4. 7: hình danh sách tin tức (Trang 67)
Hình 4. 8: hình chi tiết tin tức - xây dựng website chùa thạnh lâm trên nền zend framework
Hình 4. 8: hình chi tiết tin tức (Trang 68)

🧩 Sản phẩm bạn có thể quan tâm

w