

a



 !"#$
% &'






1
aua !a"#
Joomla! Programming
Book shopping component
Chng 3: Xây dng Book controller
1. Xác nh các chc nng (task) trong Category
2. Xây dng h thng hàm x lý các chc nng ca Category
3. Xây dng chc nng hin th category (task: show)
4. ng ký các chc nng x lý trong Controller
5. Xây dng chc nng publish & unpublish category (task: publish – unpublish)
6. Xây dng chc nng delete (task: remove)
7. Xây dng chc nng thêm mt category (task: add – save)
8. Xây dng chc nng hy nhim v (task: cancel)
9. Xây dng chc nng chnh sa mt category (task: edit – save - apply )
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


a



 !"#$
% &'






2
aua !a"#
1. Xác nh task trong BookControllerCategory class
Task Vn  x
show Hin th các book category. Trong quá trình hin th s có nhiu cách
hin th khác nhau như:
- Hin th theo chiu ca các ct (t A-Z và ngưc li)
- Hin th theo t khóa tìm kim
- Hin th theo s lưng Category trên mt trang
- Hin th theo trng thái publish hoc unpublish
add To Form  nhp category mi
edit To Form cha thông tin ca category mun chnh sa
save Lưu d liu vào database
apply Lưu d liu vào database và quay li Form
unpublish Không cho category hin th ngoài Front-End
publish Cho phép category hin th ngoài Front-End
cancel Tm hoãn mt task nào ó
remove Xóa b mt hoc nhiu Category trong database
2. Xây dng h thng function cho BookControllerCategory class
<?php
// Chong truy cap truc tiep
defined( '_JEXEC' ) or die( 'Restricted access' );
//2. Goi lop ho tro controller
jimport( 'joomla.application.component.controller' );
class BookControllerBook extends JController{
function __construct( $default = array() ) {
parent::__construct( $default );
$this->registerDefaultTask('show');
}
function show(){
echo __FUNCTION__ . ' in ' . __CLASS__;
}
function add(){
echo __FUNCTION__ . ' in ' . __CLASS__;
}
function edit(){
echo __FUNCTION__ . ' in ' . __CLASS__;
}
function save(){
echo __FUNCTION__ . ' in ' . __CLASS__;
}
function changStatus(){
echo __FUNCTION__ . ' in ' . __CLASS__;
}
function cancel(){
echo __FUNCTION__ . ' in ' . __CLASS__;
}


a



 !"#$
% &'






3
aua !a"#
function remove(){
echo __FUNCTION__ . ' in ' . __CLASS__;
}
}
?>
3. Xây dng nng hin th sách (task: show)
 xây dng chc nng này chúng ta cn thc hin nhng công vic sau:
- Xây dng VIEW cho chc nng show
- Xây dng h thng nút nhn cho chc nng show
- Ly d liu t database hin th theo các kiu:
o Hin th theo t khóa tìm kim
o Hin th danh sách theo giá tr ca các ct trong câu truy vn
o Hin th theo trng thái publish hoc unpublish
o Hin th theo Book category
- H thng phân trang cho danh sách các cun sách.
a. Xây dng VIEW cho chc nng show()
To tp tin book.php trong thư mc /com_book/views. Tp tin này tưng ng vi
category controller ca component. Tp tin có ni dung như sau:
class BookViewBook{
function show(){
echo '<br>' . __FUNCTION__ . ' in ' . __CLASS__;
}
}
To mt tp tin template có tên show.php tưng ng vi hàm show() trong lp
BookViewBook trong thư mc /com_book/views/templates/book vi ni dung:
echo '<br> template of show() in VIEW';
Nhúng tp tin VIEW và tp tin CONTROLLER. M tp tin book.php trong thư mc
/administrator/components/com_book/controllers thêm vào ni dung sau:
<?php
// Chong truy cap truc tiep
defined( '_JEXEC' ) or die( 'Restricted access' );
//2. Goi lop ho tro controller
jimport( 'joomla.application.component.controller' );
require_once( JPATH_COMPONENT.DS.'views'. DS .'book.php' );
class BookControllerCategory extends JController{
//Code goes here
}
G i hàm show() trong VIEW vào hàm show() CONTROLLER. M tp tin
category.php trong thư mc /com_book/controllers thêm vào ni dung sau:


a



 !"#$
% &'






4
aua !a"#
function show(){
echo __FUNCTION__ . ' in ' . __CLASS__;
BookViewCategory::show();
}
b. Xây dng h thng nút nhn cho chc nng show
(H003-b1)
M tp tin book.php trong thư mc /administrator/components/com_book/views.
Thêm vào hàm setBookManagerToolBar() vi ni dung như sau:
function setBookManagerToolBar(){
JToolBarHelper::title( JText::_('Book manager'), 'generic.png' );
JToolBarHelper::publishList();
JToolBarHelper::unpublishList();
JToolBarHelper::deleteList();
JToolBarHelper::editListX();
JToolBarHelper::addNewX();
}
Sau ó sa hàm show() trên tp tin này thành:
function show(){
BookViewBook:: setBookManagerToolBar();
}
Vào chy th chúng ta s có giao din như hình H003-b1
 h thng nút va to ra có th hot ng ưc chúng ta cn xây dng mt tp tin
show.php trong thư mc /com_book/views/templates/book có ni dung như sau:
<form action="" method="post" name="adminForm">
<input type="hidden" name="option" value="com_book" />
<input type="hidden" name="c" value="book" />
<input type="hidden" name="task" value="" />
<input type="hidden" name="boxchecked" value="0">
</form>
Chú ý: Cách t tên Form và 4 tp tin input n
Nhúng template vào VIEW.  nhúng tp tin show.php va to vào hàm show() ca lp
BookViewBook chúng ta cn sa li tp tin book.php trong thư mc /com_book/views/
như sau:


a



 !"#$
% &'






5
aua !a"#
define('TEMPLATE_VIEW',JPATH_COMPONENT.DS.'views'.DS.'templates'.DS.'book');
class BookViewBook{
function show(){
BookViewBook::setBookManagerToolBar();
require_once( TEMPLATE_VIEW.DS.'show.php');
}
}
Sau ó nhn nút New  th xem các nút ã hot ng chưa.
c. Hin th danh sách category
To lưi hin th d liu danh sách các Category.
c.1: To dòng tiêu  cho lưi
M tp tin show.php trong thư mc /com_book/views/templates/book thêm vào ni
dung như sau:
<?php defined('_JEXEC') or die('Restricted access'); ?>
<form action="" method="post" name="adminForm">
<table class="adminlist" cellspacing="1" width="100%">
<thead>
<tr>
<th width="5">#</th>
<th width="5"><input type="checkbox" name="toggle" value=""></th>
<th class="title">Title</th>
<th width="1%" nowrap="nowrap" class="title">Published</th>
<th width="8%" nowrap="nowrap" class="title">Public date</th>
<th width="8%" nowrap="nowrap" class="title">Created Date</th>
<th width="8%" nowrap="nowrap" class="title">Created by</th>
<th width="8%" nowrap="nowrap" class="title">Modified Date</th>
<th width="8%" nowrap="nowrap" class="title">Modified by</th>
<th width="8%" nowrap="nowrap" class="title">Hits</th>
<th width="1%" nowrap="nowrap" class="title">ID</th>
</tr>
</thead>
</table>
<input type="hidden" name="option" value="com_book" />
<input type="hidden" name="c" value="book" />
<input type="hidden" name="task" value="" />
<input type="hidden" name="boxchecked" value="0">
</form>