
Ebook: L
ập tr
ình Joomla!
1.5
Zendvn Group
Chương 5: Xây d
ựng các chức năng tại Front
-
End
http://www.
zend
.vn
Gi
ảng vi
ên: Ph
ạm Vũ Khánh
1
Email: vukhanh2212@gmail.com
Joomla! Programming
Book shopping component
Chương 5: Xây dựng các chức năng tại Front-End
1. Xây dựng chức năng hiển thị tất cả các category
2. Xây dựng chức năng hiển thị một category
3. Xây dựng chức năng hiển thị tất cả các cuốn sách
4. Xây dựng chức năng hiển thị một cuốn sách
5. Xây dựng chức năng hiển thị giỏ hàng
6. Xây dựng chức năng đưa sách vào giỏ hàng
7. Xây dựng chức năng cập nhật giỏ hàng
8. Xây dựng chức năng đặt hàng mua hàng
Giáo trình: Joomla! Programming
Chuyên đề: Book shopping component
Biên soạn: Phạm Vũ Khánh
Email: vukhanh2212@gmail.com
Điện thoại: 0908.893326
Website: www.zend.vn
Tháng 08-2010

Ebook: L
ập tr
ình Joomla!
1.5
Zendvn Group
Chương 5: Xây d
ựng các chức năng tại Front
-
End
http://www.
zend
.vn
Gi
ảng vi
ên: Ph
ạm Vũ Khánh
2
Email: vukhanh2212@gmail.com
1. Xây dựng chức năng hiển thị tất cả các category
Để xây dựng chức năng này chúng ta cần thực hiện những công việc sau:
- Xây dựng hàm lấy dữ liệu từ Database (models)
- Xây dựng View lấy giá trị từ model truyền ra layout (views)
- Xây dựng Layout hiển thị các giá trị nhận được từ View (tmpl)
- Phân trang tại Front-End
a. Xây dựng hàm lấy dữ liệu từ Database (models)
Tạo tập tin categories.php trong thư mục /joomla/com_book/models đưa vào nội dung
sau:
class BookModelCategories extends JModel {
var $_data = null;
function __construct() {
parent::__construct();
global $mainframe;
}
function getAllCategories() {
if (empty($this->_data)) {
$query = "SELECT * FROM #__book_category WHERE published=1";
$this->_data = $this->_getList($query);
}
return $this->_data;
}
}
b. Xây dựng View lấy giá trị từ model truyền ra layout (views)
Tạo tập tin view.html.php trong thư mục /joomla/com_book/views/categories sửa hàm
display() thành:
function display($tpl = null)
{
global $mainframe;
// Goi lop BookModelCategories
$model = $this->getModel();
// Goi ham getAllCategories() trong lop BookModelCategories
$lists = $model->getAllCategories();
//Gan và truyen gia trị ra ngoai layout
$this->assignRef('rows', $lists);
parent::display($tpl);
}
c. Xây dựng Layout hiển thị các giá trị nhận được từ View (tmpl)

Ebook: L
ập tr
ình Joomla!
1.5
Zendvn Group
Chương 5: Xây d
ựng các chức năng tại Front
-
End
http://www.
zend
.vn
Gi
ảng vi
ên: Ph
ạm Vũ Khánh
3
Email: vukhanh2212@gmail.com
Tạo tập tin default.php trong thư mục /joomla/com_book/views/categories/tmpl sửa hàm
display() thành:
<style>
.book-category{
float: left;
width: 50%;
font-size: 14px;
font-weight: bold;
text-align: center !important;
line-height: 16px;
padding: 5px 0px;
}
.div-clear{
clear: both;
}
</style>
<?php
foreach ($this->rows as $key => $info){
$link = "index.php?option=com_book&view=category&id=" . $info->id;
echo '<div class="book-category"><a href="' . $link . '">' . $info->category .
'</a></div>';
}
?>
<div class="div-clear"></div>
d. Phân trang tại Front-End
Tạo tập tin categories.php trong thư mục /joomla/com_book/models thay đổi một số nội
dung:
Thay đổi nội dung hàm __contruct() để lấy các giá trị phân trang và đưa vào biến toàn
cục của Model
class BookModelCategories extends JModel {
var $_data = null;
function __construct() {
parent::__construct();
global $mainframe;
$limit = JRequest::getVar('limit', $mainframe->getCfg('list_limit'));
$this->setState('limit', $limit);
$limitstart = JRequest::getVar('limitstart', 0);
$this->setState('limitstart', $limitstart);
}
Thay đổi nội dung hàm getAllCategories() để đưa giá trị $limit và $limitstart vào câu truy
vấn hiển thị các category
function getAllCategories() {
if (empty($this->_data)) {
$query = "SELECT *
FROM #__book_category
WHERE published=1 ";

Ebook: L
ập tr
ình Joomla!
1.5
Zendvn Group
Chương 5: Xây d
ựng các chức năng tại Front
-
End
http://www.
zend
.vn
Gi
ảng vi
ên: Ph
ạm Vũ Khánh
4
Email: vukhanh2212@gmail.com
$this->_data = $this->_getList($query, $this->getState('limitstart'), $this-
>getState('limit'));
}
return $this->_data;
}
Tạo hàm getTotal() đếm số record có trong database để thực hiện phân trang
class BookModelCategories extends JModel {
var $_data = null;
var $_total = null;
function __construct() {
//Code cũ
}
function getAllCategories() {
//Code cũ
}
function getTotal() {
$query = "SELECT *
FROM #__book_category
WHERE published=1 ";
$this->_total = $this->_getListCount($query);
return $this->_total;
}
Tạo hàm phân trang getPagination()
class BookModelCategories extends JModel {
var $_data = null;
var $_total = null;
var $_pagination = null;
function __construct() {
//Code cũ
}
function getAllCategories() {
//Code cũ
}
function getTotal() {
//Code cũ
}
function getPagination() {
// Lets load the content if it doesn't already exist
if (empty($this->_pagination)) {
jimport('joomla.html.pagination');
$this->_pagination = new JPagination($this->getTotal(), $this-
>getState('limitstart'), $this->getState('limit'));
}
return $this->_pagination;
}
}

Ebook: L
ập tr
ình Joomla!
1.5
Zendvn Group
Chương 5: Xây d
ựng các chức năng tại Front
-
End
http://www.
zend
.vn
Gi
ảng vi
ên: Ph
ạm Vũ Khánh
5
Email: vukhanh2212@gmail.com
Gọi hàm phân trang trong Model vào View. Mở tập tin view.html.php trong thư mục
/joomla/com_book/views/categories sửa hàm display() thành:
<?php
//Code cũ
class BookViewCategories extends JView {
var $_total;
function display($tpl = null) {
global $mainframe;
$tmp = JRequest::getVar("Itemid");
$model = $this->getModel();
$lists = $model->getAllCategories();
$this->assignRef('rows', $lists);
$pagining = $model->getPagination();
$linkPage = $pagining->getPagesLinks();
$this->assignRef('pagining', $linkPage);
parent::display($tpl);
}
}
Hiển thị phân trang trong layout. Mở tập tin default.php trong thư mục
/joomla/com_book/views/categories/tmpl sửa thành:
//Code cũ
<?php
foreach ($this->rows as $key => $info){
$link = "index.php?option=com_book&view=category&id=" . $info->id;
echo '<div class="book-category"><a href="' . $link . '">' . $info->category .
'</a></div>';
}
?>
<div class="div-clear"></div>
<div style="text-align: center; padding: 4px;"><?php echo $this->pagining; ?></div>
2. Xây dựng chức năng hiển thị một category
Để xây dựng chức năng này chúng ta cần thực hiện những công việc sau:
- Hiển thị các cuốn sách trong một category khi nhấn vào link từ phần hiển thị tất
cả các category
- Hiển thị các cuốn sách khi nhấn vào link menu

