Ebook: L
ập tr
ình Joomla!
1.5
Zendvn Group
Chương 5: Xây d
-
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 dng các chc năng ti Front-End
1. Xây dng chc năng hin th tt c các category
2. Xây dng chc năng hin th mt category
3. Xây dng chc năng hin th tt c các cun sách
4. Xây dng chc năng hin th mt cun sách
5. Xây dng chc năng hin th gi hàng
6. Xây dng chc năng đưa sách vào gi hàng
7. Xây dng chc năng cp nht ging
8. Xây dng chc năng đặt hàng mua hàng
Giáo trình: Joomla! Programming
Chuyên đề: Book shopping component
Biên son: Phm Vũ Khánh
Email: vukhanh2212@gmail.com
Đin thoi: 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
-
End
http://www.
zend
.vn
Gi
ảng vi
ên: Ph
ạm Vũ Khánh
2
Email: vukhanh2212@gmail.com
1. Xây dng chc năng hin th tt c các category
Để xây dng chc năng này chúng ta cn thc hin nhng công vic sau:
- Xây dng hàm ly d liu t Database (models)
- Xây dng View ly giá tr t model truyn ra layout (views)
- Xây dng Layout hin th các giá tr nhn được t View (tmpl)
- Phân trang ti Front-End
a. Xây dng hàm ly d liu t Database (models)
To tp tin categories.php trong thư mc /joomla/com_book/models đưa vào ni 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 dng View ly giá tr t model truyn ra layout (views)
To tp tin view.html.php trong thư mc /joomla/com_book/views/categories sa 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 dng Layout hin th các giá tr nhn được t View (tmpl)
Ebook: L
ập tr
ình Joomla!
1.5
Zendvn Group
Chương 5: Xây d
-
End
http://www.
zend
.vn
Gi
ảng vi
ên: Ph
ạm Vũ Khánh
3
Email: vukhanh2212@gmail.com
To tp tin default.php trong thư mc /joomla/com_book/views/categories/tmpl sa 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 ti Front-End
To tp tin categories.php trong thư mc /joomla/com_book/models thay đổi mt s ni
dung:
Thay đổi ni dung hàm __contruct() để ly các giá tr phân trang và đưa vào biến toàn
cc ca 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 ni dung hàm getAllCategories() để đưa giá tr $limit và $limitstart vào câu truy
vn hin 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
-
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;
}
To hàm getTotal() đếm s record có trong database để thc hin 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;
}
To 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
-
End
http://www.
zend
.vn
Gi
ảng vi
ên: Ph
ạm Vũ Khánh
5
Email: vukhanh2212@gmail.com
Gi hàm phân trang trong Model vào View. M tp tin view.html.php trong thư mc
/joomla/com_book/views/categories sa 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);
}
}
Hin th phân trang trong layout. M tp tin default.php trong thư mc
/joomla/com_book/views/categories/tmpl sa 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 dng chc năng hin th mt category
Để xây dng chc năng này chúng ta cn thc hin nhng công vic sau:
- Hin th các cun sách trong mt category khi nhn vào link t phn hin th tt
c các category
- Hin th các cun sách khi nhn vào link menu