i
LỜI MỞ ĐẦU
Trong thời đại công nghệ thông tin phát triển như hiện nay thì các website tin
tức trở nên vô cùng quan trọng, không chỉ những website điện tử lớn mà các tổ
chức, công ty lớn nhỏ và cá nhân cũng có nhu cầu sử dụng website tin tức để quảng
bá các thông tin lên mạng internet. Mọi người ngày càng sử dụng internet nhiều hơn
để phục vụ cho nhu cầu tìm kiếm, nhờ có các công cụ tìm kiếm phát triển như hiện
nay mà việc tìm kiếm thông tin trở nên rất dễ dàng.
Nhu cầu cần có website tin tức là rất lớn, bên cạnh đó một trang web tin tức
cũng phải đảm bảo an toàn thông tin, dễ sử dụng, an toàn bảo mật tốt, quảng bá
thông tin một cách hiệu quả trước các công cụ tìm kiếm và chi phí là rẻ nhất. Để
đáp ứng những nhu cầu trên thì các CMS (Content Management System) mã nguồn
mở là một giải pháp tốt được sử dụng trong thiết kế web.
Các CMS mã nguồn mở được sử dụng để phát triển các trang web miễn phí
hoặc có phí rất thấp, người dùng có thể nhanh chóng xuất bản những thông tin của
họ lên internet với những tuỳ biến cao. Các trang web miễn phí sử dụng CMS
thường được cập nhật thường xuyên. ii
LỜI CẢM ƠN
Tôi xin chân thành cảm ơn quý thầy cô trong khoa Công nghệ thông tin cũng
như quý thầy cô giảng dạy trong trường Đại học Nha Trang đã truyền đạt những
kiến thức quý báu cho tôi trong những năm học vừa qua.
Đặc biệt, tôi xin chân thành cảm ơn ThS Nguyễn Đình Hoàng Sơn, Thầy
đã trực tiếp hướng dẫn và giúp đỡ tận tình tôi trong suốt thời gian làm đồ án tốt
nghiệp.
Khái niệm Joomla 1
1.2.2.
Ứng dụng của Joomla 1
1.2.3.
Kiến trúc của Joomla 2
1.3.
Một số khái niệm trong Joomla 3
1.3.1.
Front-end 3
1.3.2.
Back-end 3
1.3.3.
Template 3
1.3.4.
Component 3
2.2.1.3.
Ứng dụng tạo mới plugin lastnewsarticle 7
iv
2.2.2.
Module 7
2.2.2.1.
Giới thiệu module 7
2.2.2.2.
Thiết kế module 9
2.2.2.3.
Ứng dụng tạo mới module mod_showtopnews 9
2.2.2.4.
Ứng dụng tạo mới module mod_showarticlesection 10
2.2.2.5.
Ứng dụng tạo mới module mod_showarticlelist 11
3.2.1.
Đăng nhập trang quản trị 34
3.2.2.
Thanh Menu 35
3.2.3.
Thanh công cụ 36
3.2.4.
Chủ đề (Section) 37
3.2.5.
Chủ đề con (Category) 38
3.2.6.
Bài viết (Article) 38
3.2.7.
Các thành phần mở rộng 39
3.2.8.
Component com_advertising 46
3.2.2.
Component com_comment 48
3.2.3.
Module mod_showtopnews 50
3.2.4.
Module mod_showarticlesection 52
3.2.5.
Module mod_articlelist 55
3.2.6.
Module mod_advertising 60
3.2.7.
Plugin lastnewsarticle 60
3.2.8.
Plugin comment 61
Tra cứu hình ảnh 65
1
PHẦN 1: CƠ SỞ LÝ THUYẾT
1.1. Tổng quan về hệ quản trị nội dung (CMS)
CMS (Content Management System) là hệ thống dùng để quản lý nội dung
chương trình bao gồm: văn bản, hình ảnh, video được tổ chức một cách khoa học
và được cấp quyền truy cập với từng cá nhân. Ngoài ra nó còn bao gồm các công cụ
giúp cho việc tìm kiếm, quản lý phiên bản, phát hành và định dạng thông tin một
cách nhanh chóng và dễ dàng.
Trên thế giới, các CMS mã nguồn mở được sử dụng phổ biến để xây dựng
các Website, trong đó Drupal, Joomla, Wordpress,… đều phát hành miễn phí.
Phần mềm mã nguồn mở đang trở thành một xu hướng lớn trên thế giới. Nhờ
dỡ bỏ dần các rào cản về bản quyền, dễ dàng can thiệp, được cung cấp miễn phí
hoặc với giá rẻ, nó được kỳ vọng làm thay đổi diện mạo của ngành công nghệ thông
tin. Điều này đặc biệt có ý nghĩa với các nước nghèo bởi vì có thể tiếp cận được
công nghệ mới với chi phí rất thấp.
1.2. Giới thiều về Joomla
1.2.1. Khái niệm Joomla
Joomla là một hệ quản trị nội dung mã nguồn mở (Content Management
System) viết tắt là CMS. Joomla được viết bằng ngôn ngữ PHP và kết nối tới cơ sở
dữ liệu MySQL, cho phép người sử dụng có thể dễ dàng xuất bản các nội dung của
họ lên Internet hoặc Intranet.
Joomla rất linh hoạt, đơn giản, thanh nhã, tính tuỳ biến rất cao và cực kỳ
mạnh mẽ. Được sử dụng ở trên toàn thế giới từ những trang web đơn giản cho đến
những ứng dụng phức tạp. Việc cài đặt Joomla rất dễ dàng, đơn giản trong việc
quản lý và đáng tin cậy.
1.2.2. Ứng dụng của Joomla
1.3.2. Back-end
Phần quản trị dành cho các thành viên có quyền quản trị hệ thống Joomla.
1.3.3. Template
Template là một gói bao gồm các tập tin PHP, HTML, CSS, JS (Javascript)
và các tấm hình, biểu tượng, video, flash kèm theo tạo nên giao diện (bố cục và hình
hài) của website Joomla.
1.3.4. Component
Component là một trong các thành phần mở rộng của Joomla, thực chất nó
là một ứng dụng trong hệ thống Joomla. Component được sử dụng để thực hiện một
chức năng lớn nào đó, chẳng hạn như: Cung cấp tin tức, quảng cáo, rao vặt, đặt
phòng khách sạn, bất động sản, download
1.3.5. Module
Module là một trong các thành phần mở rộng của Joomla, nó là một ứng
dụng nhỏ được sử dụng chủ yếu để lấy dữ liệu và hiển thị thông tin. Module thường
được dùng kết hợp kèm với các component nhằm mở rộng và thể hiện rõ ràng hơn
các chức năng của component. Module có thể được đặt ở bất kỳ vị trí nào trên
template. Ngoài ra một module có thể được nhân bản, nghĩa là cùng lúc có thể xuất
hiện tại một hoặc các vị trí khác nhau.
1.3.6. Plugin
Plugin là một trong các thành phần mở rộng của Joomla nhằm giúp thực hiện
một cách tự động công việc cụ thể.
4
PHẦN 2: XÂY DỰNG WEBSITE TIN ĐIỆN TỬ BẰNG JOOMLA CMS
2.1. Giới thiệu website tin tức Joomla
Website tin tức là giải pháp cho các tổ chức, doanh nghiệp, cá nhân có một
trang tin tức mang đến cho mọi người những thông tin nhanh nhất, tiện ích nhất và
khả năng tìm kiếm thông tin hiệu quả mang đến cho độc giả những thông tin cần thiết.
Tất cả mọi người có nhu cầu về thông tin đều có thể sử dụng website tin tức.
Trong Joomla phân cấp thành nhiều nhóm người sử dụng, với mỗi nhóm người khác
đăng tin, nhưng trong component này chỉ có các chức năng cơ bản. Để hiển thị
những tin tức có liên quan với bài viết đang được xem thì chúng ta cần phải có một
plugin để thực hiện chức năng này. Chúng ta có thể tìm các plugin miễn phí được
cung cấp trên internet, những trong đề tài này chúng ta sẽ xây dựng một plugin
lastnewarticle để hiển thị những liên kết tới những bài viết có liên quan.
2.2.1.2. Thiết kế Plugin
Trong một plugin thường có hai tập tin: tập tin php chứa mã lệnh thực hiện
công việc chính của plugin và tập tin xml để cấu hình cho plugin.
Tập tin <tên plugin>.php thực hiện những chức năng mà người lập trình muốn.
defined('_JEXEC') or die ('Restricted access'): Đặt ở đầu tập tin php
để tránh trường hợp truy cập trái phép vào tập tin php.
jimport('joomla.plugin.plugin'): Thêm thư viện plugin của Joomla.
Lớp class plgContent<tên plugin> extends Jplugin {} được đặt tên theo quy
định của Joomla, mỗi nhóm có các sự kiện đặc trưng riêng.
Những sự kiên trong nhóm content:
• onAfterDisplay
• onAfterContentSave
• onAfterDisplayTitle
6
• onAfterDisplayContent
• onPrepareContent
• onBeforeDisplay
• onBeforeContentSave
• onBeforeDisplayContent
• onContentPrepareForm
• onContentPrepareData
Tương ứng với mỗi sự kiện thì plugin sẽ được thực thi tại một thời điểm nhất
định, mỗi sự kiện sẽ có vị trí hiển thị nhất định trên template.
Một tập tin <tên plugin>.xml để phục vụ cho việc cài đặt plugin khi chúng ta
liên quan tới bài viết đang xem. Plugin này sẽ giúp cho người xem dễ dàng tiếp cận
các thông tin có liên quan tới các vấn đề mà người dùng đang quan tâm.
Plugin lastnewsarticle gồm tập tin lastnewsarticle.php và lastnewsarticle.xml.
Tập tin lastnewsarticle.php trong tập tin này chúng ta sẽ tạo ra một lớp kế
thừa từ lớp Jplugin và đăng kí sự kiện onAfterDisplayContent tương ứng với hàm
onAfterDisplayContent(&$article) trong lớp class plgContentLastNewsArticle
extends JPlugin, sau khi bài viết được hiển thị hoàn tất thì sự kiện sẽ được kích hoạt.
onAfterDisplayContent(&$article): Hàm sẽ trả về một kết quả được
hiển thị tại vị trí của sự kiện onAfterDisplayContent.
$article: Tham số chứa thông tin một bài viết đang được hiển thị chi tiết.
2.2.2. Module
2.2.2.1. Giới thiệu module
Module là một trong các thành phần mở rộng của Joomla. Nó là một đoạn
mã nhỏ thường được dùng để truy vấn các thông tin từ cơ sở dữ liệu và
hiển thị các kếtquả tìm được.
Vị trí của module (module position) là nơi mà module có thể được đặt vào
đó. Mỗi vị trí đều được xác định thông qua một định danh duy nhất (một cái tên),
chẳng hạn như: left, right, top, bottom, user1, user2 Tên và số lượng các vị trí này
được quy định bởi template. Các template khác nhau thì số lượng vị trí module cũng
8
như tên của chúng có thể khác nhau. Ngoài ra, trong quá trình sử dụng người dùng
cũng có thể tự định nghĩa các vị trí mới sao cho phù hợp với yêu cầu của mình.
Chúng ta có thể xem các vị trí của website bằng cách thêm đoạn mã sau vào liên kết
của trang chủ: ?tp=1.
Các module mặc định của Joomla:
- mod_archive: Module hiển thị các bài viết đã được đánh dấu "lưu
trữ".
- mod_banners: Module hiển thị quảng cáo.
- mod_breadcrumbs: Module hiển thị thanh điều hướng.
dữ liệu và thực thi giao diện của module.
• Helper.php : Chứa các hàm xử lý dữ liệu cho module.
• Thư mục tmpl, trong thư mục này chưa tập tin _<tên module>.php tập
tin này sẽ hiển thị giao diện của module.
• Mod_<tên module>.xml: Tập tin cấu hình của module. Tập tin này
chứa các thông số để thực hiện việc cài đặt module vào Joomla. Trong
tập tin cài đặt của module cũng tương tự như tập tin cài đặt của plugin
nhưng khác ở đây là thẻ <install type="module" version="1.5.0">.
2.2.2.3. Ứng dụng tạo mới module mod_showtopnews
Module hiển thị những tin tức mới nhất giúp người xem dễ dàng tiếp cận đến
tin tức mới đăng, module thường được hiển thị ngay phần đầu của trang chủ,
module sẽ hiển thị một tin tức mới nhất của trang web phía bên trái của module, tin
tức này sẽ được hiển thị nổi bật lên trang chủ, những tin cũ hơn sẽ hiện thị dưới
dạng liên kết nằm về phần bên phải của module. Người dùng có thể tuỳ chỉnh kích
thước hình ảnh, kiểu chữ, cỡ chữ, kích thước chữ.
Tập tin mod_showtopnews.php.
require_once (dirname(__FILE__).DS.'helper.php'): Hằng số DS
trong Joomla có ý nghĩa là dấu “/”. Đăng kí sử dụng các hàm xử lý dữ
liệu trong tập tin helper.php.
10
modshowtopnewsHelper::getArticle($params->get('articles')): Lấy
danh sách bài viết mới nhất từ cơ sở dữ liệu.
$params->get('articles'): Tham số giới hạn số tin tức được hiển thị
trên module. Tham số này đã được thiết lập khi tạo ra module.
require(JModuleHelper::getLayoutPath('mod_showtopnews','_showto
pnews')): Yêu cầu hiển thị dữ liệu lên giao diện của module, câu lệnh
này sẽ sử dụng tập tin _showtopnews.php, tập tin này chứa các đoạn
mã để trình bày giao diện của module.
Tập tin helper.php:
2.2.3.1. Giới thiệu component
Joomla component là một trong các thành phần mở rộng của Joomla.
Component thường được tạo ra để thực hiện một chức năng lớn nào đó trong hệ
thống website Joomla.
Các component mặc định của Joomla:
- com_banners: Quản lý bảng quảng cáo (banner).
- com_contact: Quản lý các đầu mối liên hệ (contact).
- com_content: Quản lý và hiển thị bài viết.
- com_mailto: Quản lý chức năng gửi/nhận email.
- com_media: Quản lý các tệp đa phương tiện (video, flash, mp3, hình).
- com_newsfeeds: Quản lý việc lấy tin từ website khác theo dạng RSS.
- com_poll: Cung cấp chức năng bình chọn.
- com_search: Cung cấp chức năng tìm kiếm.
- com_user: Quản lý thành viên.
- com_weblinks: Quản lý và hiển thị danh mục các website liên kết.
- com_wrapper: Cho phép nhúng một website khác vào trong cửa sổ
của website Joomla.
12
Component com_content không có chức năng cho người dùng bình luận về
bài viết mà họ đang xem, để thêm chức năng bình luận về bài viết thì trong đề tài
này có tạo thêm component com_comment, nó giúp người xem gửi nhận xét của họ
cho người quản trị và giúp người quản lý website có thể tiếp nhận ý kiến của mọi người.
Joomla đã hỗ trợ component quảng cáo (banner) nhưng để quản lý một
quảng cáo là khá phức tạp, khi quảng cáo là một đoạn flash không hỗ trợ liên kết
bên ngoài, bắt buộc đoạn flash phải có chứa liên kết. Vì thế component advertising
được thiết kế để giúp người dùng quản lý quảng cáo dễ dàng hơn.
2.2.3.2. Thiết kế component
Cách đặt tên component được bắt đầu bằng com_<tên component>
tạo ra thanh công cụ.
Một số phương thức chính:
JToolBarHelper::title( JText::_( 'Quảng cáo' ),'generic.png' ): Đặt tên
và ảnh đại diện cho thanh công cụ.
JToolBarHelper::save(): Tạo nút Lưu.
JToolBarHelper::apply(): Tạo nút Áp dụng.
JToolBarHelper::cancel(): Tạo nút Huỷ.
JToolBarHelper::publishList(): Tạo nút Bật.
14
JToolBarHelper::unpublishList(): Tạo nút Tắt.
JToolBarHelper::editList(): Tạo nút Sửa.
JToolBarHelper::deleteList(): Tạo nút Xoá.
JToolBarHelper::addNew(): Tạo nút Thêm mới.
Tập tin toolbar.advertising.html.php thực hiện hiển thị giao diện toolbar thao
các sự kiện của component.
_NEW() {}: Chứa các công cụ trong sự kiện thêm mới.
Hình 3: Thanh công cụ thêm mới của com_advertising
_DEFAULT(){}: Chứa các công cụ mặc định của component.
Hình 4: Thanh công cụ mặc định của com_advertising
Tập tin toolbar.advertising.php hiển thị giao diện thanh công cụ cho đúng với
từng sự kiện bằng cách phân tích biến $task.
require_once(JApplicationHelper::getPath( 'toolbar_html' )): Đăng kí
sử dụng các phương thức trong tập tin toolbar.advertising.html.php.
TOOLBAR_advertising::_NEW(): Gọi hàm _NEW().
TOOLBAR_advertising::_DEFAULT(): Gọi hàm _DEFAULT().
Cơ sở dữ liệu của com_advertising:
Mô hình quan niệm dữ liệu hình 5.
jos_users
image varchar 255 Đường dẫn tới tập
tin ảnh hoặc flash
created datetime Ngày tạo
modified datetime Ngày sửa đổi
position smallint Vị trí quảng cáo
expiration date Ngày hết hạn
published tinyint 1 Bật hoặc tắt
Bảng Jos_advertising:
Tên thuộc
tính
Kiểu dữ
liệu
Kích
thước
Ràng buộc toàn vẹn
idadv int 11 Lookup(jos_menu)
idmenu int 11 Lookup(jos_advertising)
Tạo cơ sở dữ liệu:
Tập tin install.mysql.sql để tạo ra các bảng trong cơ sở dữ liệu. Trong tập tin
này sử dụng các câu lệnh mysql để tạo ra bảng jos_advertising và
jos_advertising_menu. Tập tin này sẽ được sử dụng khi cài đặt component nhằm
mục đích tạo ra các bảng trong cơ sở dữ liệu.
17
Tập tin uninstall.mysql.sql chứa các câu lệnh mysql để xoá bỏ các bảng trong
cơ sở dữ liệu đã được tạo ra khi cài đặt component. Tập tin sẽ được thực thi khi
người dùng gỡ bỏ component.
nhập trên giao diện vào đối tượng TableAdvertising.
setQuery($query): Gán câu truy vấn dữ liệu vào đối tương
JFactory.
loadObjectList(): Phương thức thực hiện câu truy vấn của lớp
JFactory và trả về một danh sách các đối tượng thoả mãn.
JRequest::getVar('cid', array(0),'','array'): Phương thức lấy giá trị
của một biến với kiểu dữ liệu xác định.
store(): Hàm lưu thông tin vào cơ sở dữ liệu.
saveAdvertising($option,$task){}: Lưu một quảng cáo vào cơ sở dữ liệu.
JTable::getInstance('advertising','Table'): Khởi tạo đối tượng bảng.
bind(JRequest::get('post')): Gán giá trị người dùng đã nhập trên
giao diện vào cho đối tượng bảng.
JFactory::getUser(): Lấy thông của người dùng hiện tại.
changeAdvertising($state=0){}: Thực hiện bật và tắt một quảng cáo.
JRequest::getVar( 'cid' , array() , '' , 'array' ): Lấy khoá của những
quảng cáo được chọn để bật hay tắt. Nếu tham số $state là 1 thì
thực hiện bật một quảng cáo ngược lại thì thực hiện tắt một quảng cáo.
implode( ',', $cid ): Chuyển đổi mảng $cid thành một chuỗi các
phần tử cách nhau bởi dấu “,”.
showAdvertising($option){}: Lấy thông tin tất cả quảng cáo có trong
cơ sở dữ liệu để hiện thị lên component.
removeAdvertising($option){}: Hàm xoá một quảng cáo trong cơ sở
dữ liệu, hàm này sẽ lấy danh sách khoá của những quảng cáo mà
người dùng chọn để xoá khỏi cơ sở dữ liệu.
JRequest::getVar('cid', array(),'','array'): Trả về những khoá của
những bản ghi cần xoá.
Tạo tập tin admin.advertising.html.php
19
editAdvertising($option,$row,$menus,$advertising_menu){}: Hiển thị
Hình 7: Giao diện quản lý danh sách quảng cáo
Sau khi component đã hoàn thành chúng ta nén thư mục com_advertising với
đuôi mở rộng là com_advertising.zip. Người dùng muốn sử dụng chỉ cần thực hiện
việc cài đặt phần mở rộng.
Để hiển thị quảng cáo tại nhưng vị trí khác nhau trên trang web chúng ta cần
có module mod_advertising.
Cấu trúc:
• mod_advertising.php: Tập tin thực hiện module.