intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Lập trình Joomla! 1.5-Chương 2: Xây dng Category controller

Chia sẻ: Pham Long | Ngày: | Loại File: PDF | Số trang:22

62
lượt xem
7
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

1. Xác nh các chc nang (task) trong Category 2. Xây dng h thng hàm x lý các chc nang c a Category 3. Xây dng chc nang hi n th category (task: show) 4. ang ký các chc nang x lý trong Controller 5. Xây dng chc nang publish & unpublish category (task: publish – unpublish) 6. Xây dng chc nang delete (task: remove) 7. Xây dng chc nang thêm m t category (task: add – save) 8. Xây dng chc nang h y nhim v (task: cancel) 9. Xây dng chc nang chnh sa m t category (task: edit – save - apply )...

Chủ đề:
Lưu

Nội dung Text: Lập trình Joomla! 1.5-Chương 2: Xây dng Category controller

  1. Ebook: L p trình Joomla! 1.5 Zendvn Group Chương 2: Xây d ng Category controller http://www.zend.vn Joomla! Programming Book shopping component Chương 2: Xây d ng Category controller Xác nh các ch c năng (task) trong Category 1. Xây d ng h th ng hàm x lý các ch c năng c a Category 2. Xây d ng ch c năng hi n th category (task: show) 3. ăng ký các ch c năng x lý trong Controller 4. Xây d ng ch c năng publish & unpublish category (task: publish – unpublish) 5. Xây d ng ch c năng delete (task: remove) 6. Xây d ng ch c năng thêm m t category (task: add – save) 7. Xây d ng ch c năng h y nhi m v (task: cancel) 8. Xây d ng ch c năng ch nh s a m t category (task: edit – save - apply ) 9. 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 1 Gi ng viên: Ph m Vũ Khánh Email: vukhanh2212@gmail.com
  2. Ebook: L p trình Joomla! 1.5 Zendvn Group Chương 2: Xây d ng Category controller http://www.zend.vn 1. Xác nh task trong BookControllerCategory class Task V n x lý show Hi n th các book category. Trong quá trình hi n th s có nhi u cách hi n th khác nhau như: - Hi n th theo chi u c a các c t (t A-Z và ngư c l i) - Hi n th theo t khóa tìm ki m - Hi n th theo s lư ng Category trên m t trang - Hi n th theo tr ng thái publish ho c unpublish add T o Form nh p category m i edit T o Form ch a thông tin c a category mu n ch nh s a Lưu d li u vào database save Lưu d li u vào database và quay l i Form apply unpublish Không cho category hi n th ngoài Front-End publish Cho phép category hi n th ngoài Front-End cancel T m hoãn m t task nào ó remove Xóa b m t ho c nhi u Category trong database 2. Xây d ng h th ng function cho BookControllerCategory class
  3. Ebook: L p trình Joomla! 1.5 Zendvn Group Chương 2: Xây d ng Category controller http://www.zend.vn function cancel(){ echo __FUNCTION__ . ' in ' . __CLASS__; } function remove(){ echo __FUNCTION__ . ' in ' . __CLASS__; } function dump($val){ echo ''; print_r($val); echo ''; } } ?> 3. Xây d ng năng hi n th các category (task: show) 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 VIEW cho ch c năng show - Xây d ng h th ng nút nh n cho ch c năng show - L y d li u t database hi n th theo các ki u: o Hi n th theo t khóa tìm ki m o Hi n th danh sách theo giá tr c a các c t trong câu truy v n o Hi n th theo tr ng thái publish ho c unpublish - H th ng phân trang cho danh sách các category. (Lu ng x lý trong ch c năng show) a. Xây d ng VIEW cho ch c năng show() 3 Gi ng viên: Ph m Vũ Khánh Email: vukhanh2212@gmail.com
  4. Ebook: L p trình Joomla! 1.5 Zendvn Group Chương 2: Xây d ng Category controller http://www.zend.vn T o t p tin category.php trong thư m c /com_book/views. T p tin này tương ng v i category controller c a component. T p tin có n i dung như sau: class BookViewCategory{ function show(){ echo '' . __FUNCTION__ . ' in ' . __CLASS__; } } T o m t t p tin template có tên show.php tương ng v i hàm show() trong l p BookViewCategory trong thư m c /com_book/views/templates/category v i n i dung: echo ' template of show() in VIEW'; Nhúng t p tin VIEW và t p tin CONTROLLER. M t p tin category.php trong thư m c /administrator/components/com_book/controllers thêm vào n i dung sau:
  5. Ebook: L p trình Joomla! 1.5 Zendvn Group Chương 2: Xây d ng Category controller http://www.zend.vn JToolBarHelper::publishList(); JToolBarHelper::unpublishList(); JToolBarHelper::deleteList(); JToolBarHelper::editListX(); JToolBarHelper::addNewX(); } Sau ó s a hàm show() trên t p tin này thành: function show(){ BookViewCategory::setBookCategoryToolBar(); } Vào ch y th chúng ta s có giao di n như hình H003-b1 h th ng nút v a t o ra có th ho t ng ư c chúng ta c n xây d ng m t t p tin show.php trong thư m c /com_book/views/templates/category có n i dung như sau: Chú ý: Cách t tên Form và 3 t p tin input n Nhúng template vào VIEW. nhúng t p tin show.php v a t o vào hàm show() c a l p BookViewCategory chúng ta c n s a l i t p tin category.php trong thư m c /com_book/views/ như sau: define('TEMPLATE_VIEW',JPATH_COMPONENT.DS.'views'.DS.'templates'.DS.'category'); class BookViewCategory{ function show(){ BookViewCategory::setBookCategoryToolBar(); require_once( TEMPLATE_VIEW.DS.'show.php'); } } ng chưa. Sau ó nh n nút New th xem các nút ã ho t c. Hi n th danh sách category T o lư i hi n th d li u danh sách các Category. cho lư i c.1: T o dòng tiêu 5 Gi ng viên: Ph m Vũ Khánh Email: vukhanh2212@gmail.com
  6. Ebook: L p trình Joomla! 1.5 Zendvn Group Chương 2: Xây d ng Category controller http://www.zend.vn M t p tin show.php trong thư m c /com_book/views/templates/category thêm vào n i dung như sau: # Title Published Order Created Date Created by Modified Date Modified by Hits ID c.2: L y t t c các category trong database M t p tin category.php trong thư m c /com_book/controllers s a hàm show() thành: function show(){ global $mainframe; $db =& JFactory::getDBO(); $query = 'SELECT c.*, u1.name as postName, u2.name as modifyName FROM #__book_category as c LEFT JOIN #__users as u1 ON c.created_by = u1.id LEFT JOIN #__users as u2 ON c.modified_by = u2.id'; $db->setQuery($query); $rows = $db->loadObjectList(); BookViewCategory::show(); } c.3: Truy n giá tr c a câu truy v n ra ngoài VIEW và Template 6 Gi ng viên: Ph m Vũ Khánh Email: vukhanh2212@gmail.com
  7. Ebook: L p trình Joomla! 1.5 Zendvn Group Chương 2: Xây d ng Category controller http://www.zend.vn M t p tin category.php trong thư m c /com_book views s a hàm show() thành: function show($rows){ BookViewCategory::setBookCategoryToolBar(); require_once( TEMPLATE_VIEW.DS.'show.php'); } M t p tin Category.php trong thư m c /com_book/controllers s a hàm show() thành: function show(){ //Code cũ ... BookViewCategory::show($rows); } Hi n th giá tr ngoài t p tin template. M t p tin show.php trong thư m c /com_book/views/templates/category thêm vào n i dung như sau: //Code cũ … #
  8. Ebook: L p trình Joomla! 1.5 Zendvn Group Chương 2: Xây d ng Category controller http://www.zend.vn //Code cũ … c.4: Hi n th danh sách theo t khóa tìm ki m Hi n th giá tr ngoài t p tin template. M t p tin show.php trong thư m c /com_book/views/templates/category thêm vào n i dung như sau:
  9. Ebook: L p trình Joomla! 1.5 Zendvn Group Chương 2: Xây d ng Category controller http://www.zend.vn $db->setQuery($query); $rows = $db->loadObjectList(); //T o m ng giá tr truy n ra l i VIEW $lists = array(); $lists['search'] = $search; BookViewCategory::show($rows,$lists); } M t p tin category.php trong thư m c /com_book/ views s a hàm show() thành: function show($rows,$lists){ BookViewCategory::setBookCategoryToolBar(); require_once( TEMPLATE_VIEW.DS.'show.php'); } c.5: Hi n th danh sách theo giá tr c a các c t trong câu truy v n M t p tin category.php trong thư m c /com_book /views s a hàm show() thành: function show($rows,$lists){ BookViewCategory::setBookCategoryToolBar(); //Tao cac link sap xep theo cac cot $sortTitle = JHTML::_('grid.sort', JText::_('Title'), 'c.category', @$lists['order_Dir'],@$lists['order'] ); $sortPublished = JHTML::_('grid.sort', JText::_('Published'), 'c.published', @$lists['order_Dir'],@$lists['order'] ); $sortOrder = JHTML::_('grid.sort', JText::_('Order'), 'c.ordering', @$lists['order_Dir'],@$lists['order'] ); $sortCreatedDate = JHTML::_('grid.sort', JText::_('Created Date'), 'c.created_date', @$lists['order_Dir'],@$lists['order'] ); $sortCreatedBy = JHTML::_('grid.sort', JText::_('Created by'), 'postName', @$lists['order_Dir'],@$lists['order'] ); $sortModifiedDate = JHTML::_('grid.sort', JText::_('Modified Date'), 'c.modified_date', @$lists['order_Dir'],@$lists['order'] ); $sortModifiedBy = JHTML::_('grid.sort', JText::_('Modified By'), 'modifyName', @$lists['order_Dir'],@$lists['order'] ); $sortHits = JHTML::_('grid.sort', JText::_('Hits'), 'c.hits', @$lists['order_Dir'],@$lists['order'] ); $sortID = JHTML::_('grid.sort', JText::_('ID'), 'c.id', @$lists['order_Dir'],@$lists['order'] ); require_once( TEMPLATE_VIEW.DS.'show.php'); } Hi n th giá tr ngoài t p tin template. M t p tin show.php trong thư m c /com_book/views/templates/category s a thành: 9 Gi ng viên: Ph m Vũ Khánh Email: vukhanh2212@gmail.com
  10. Ebook: L p trình Joomla! 1.5 Zendvn Group Chương 2: Xây d ng Category controller http://www.zend.vn //Code cũ .. . #
  11. Ebook: L p trình Joomla! 1.5 Zendvn Group Chương 2: Xây d ng Category controller http://www.zend.vn M t p tin Category.php trong thư m c /com_book/controllers s a hàm show() thành: function show(){ global $mainframe; //Code cũ . . . //Tao cau truy van cho tao phan trang $limit = JRequest::getVar('limit',$mainframe->getCfg('list_limit')); $limitstart = JRequest::getVar('limitstart',0); $limitSQL = ' LIMIT ' . $limitstart . ',' . $limit; $db =& JFactory::getDBO(); $query = 'SELECT c.*, u1.name as postName, u2.name as modifyName FROM #__book_category as c LEFT JOIN #__users as u1 ON c.created_by = u1.id LEFT JOIN #__users as u2 ON c.modified_by = u2.id' . $where . $order . $limitSQL; //Code cũ . . . //Tinh tong so record co trong bang $sql_1 = 'SELECT COUNT(*) FROM #__book_category as c ' . $where; $db->setQuery( $sql_1 ); $total = $db->loadResult(); //Goi class phan trang jimport('joomla.html.pagination'); $pageNav = new JPagination( $total, $limitstart, $limit); //Code cũ … BookViewCategory::show($rows,$lists,$pageNav); } M t p tin category.php trong thư m c /com_book/ views s a hàm show() thành: function show($rows,$lists,$pageNav){ BookViewCategory::setBookCategoryToolBar(); //Code cũ ... require_once( TEMPLATE_VIEW.DS.'show.php'); } Hi n th giá tr ngoài t p tin template. M t p tin show.php trong thư m c /com_book/views/templates/category s a thành: //Code cũ … 11 Gi ng viên: Ph m Vũ Khánh Email: vukhanh2212@gmail.com
  12. Ebook: L p trình Joomla! 1.5 Zendvn Group Chương 2: Xây d ng Category controller http://www.zend.vn //Code cũ … c.7: Hi n th theo tr ng thái publish ho c unpublish M t p tin Category.php trong thư m c /com_book/controllers s a hàm show() thành: function show() { global $mainframe; //Tao cau truy van cho phan search $search = JRequest::getVar('search', ''); if (trim($search) != '') { $where[] = " where LOWER(c.category) LIKE '%" . strtolower($search) . "%'"; } $filter_state = JRequest::getVar('filter_state', ''); if ($filter_state) { if ($filter_state == 'P') { $where[] = 'c.published = 1'; } else if ($filter_state == 'U') { $where[] = 'c.published = 0'; } } $where = count($where) ? ' WHERE ' . implode(' AND ', $where) : ''; //Code cũ … $lists['order'] = $filter_order; $lists['state'] = JHTML::_('grid.state', $filter_state); BookViewCategory::show($rows, $lists, $pageNav); } Hi n th giá tr ngoài t p tin template. M t p tin show.php trong thư m c /com_book/views/templates/category s a thành:
  13. Ebook: L p trình Joomla! 1.5 Zendvn Group Chương 2: Xây d ng Category controller http://www.zend.vn Select: 4. ăng ký các ch c năng x lý trong Controller M t p tin Category.php trong thư m c /com_book/controllers s a hàm __construct () thành: function __construct( $default = array() ) { parent::__construct( $default ); $this->registerDefaultTask('show'); $this->registerTask('add', 'add'); $this->registerTask('edit', 'edit'); $this->registerTask('save', 'save'); $this->registerTask('apply', 'save'); $this->registerTask('publish', 'changStatus'); $this->registerTask('unpublish', 'changStatus'); $this->registerTask('cancel', 'cancel'); $this->registerTask('remove', 'remove'); } 5. Xây d ng ch c năng publish & unpublish category (task: publish – unpublish) M t p tin Category.php trong thư m c /com_book/controllers s a hàm changeStatus() thành: function changStatus() { global $mainframe; $task = $this->getTask(); if ($task == 'unpublish') { $state = 0; } else { 13 Gi ng viên: Ph m Vũ Khánh Email: vukhanh2212@gmail.com
  14. Ebook: L p trình Joomla! 1.5 Zendvn Group Chương 2: Xây d ng Category controller http://www.zend.vn $state = 1; } //Goi DBO de tuong tac voi CSDL $db = & JFactory::getDBO(); //Lay gia tri id cua cac Item can thay trang thai $cid = JRequest::getVar('cid',array()); if (count($cid) > 0) { //Chuyen mang ID thanh mot chuoi $cids = implode(',', $cid); // Tao cau SQL de cap nhat trang cho Item $query = 'UPDATE #__book_category' . ' SET published = ' . (int) $state . ' WHERE id IN ( ' . $cids . ' )'; $db->setQuery($query); if (!$db->query()) { JError::raiseError(500, $db->getErrorMsg()); } } $mainframe->redirect('index.php?option=com_book'); } 6. Xây d ng ch c năng delete (task: remove) M t p tin Category.php trong thư m c /com_book/controllers s a hàm remove() thành: function remove() { global $mainframe; $cid = JRequest::getVar('cid'); $db = & JFactory::getDBO(); if (count($cid) > 0) { $cids = implode(',', $cid); $query = 'DELETE FROM #__book_category WHERE id IN ( ' . $cids . ' )'; $db->setQuery($query); if (!$db->query()) { JError::raiseError(500, $db->getErrorMsg()); } } $mainframe->redirect('index.php?option=com_book'); } 7. Xây d ng ch c năng thêm m t category (task: add – save) 14 Gi ng viên: Ph m Vũ Khánh Email: vukhanh2212@gmail.com
  15. Ebook: L p trình Joomla! 1.5 Zendvn Group Chương 2: Xây d ng Category controller http://www.zend.vn 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 th ng nút nh n - Xây d ng FORM nh p li u - Ki m tra d li u trong FORM này b ng javascript - Lưu d li u vào database a. Xây d ng h th ng nút nh n M t p tin category.php trong thư m c /com_book/ views thêm vào hàm setBookToolBar() v i n i dung sau: function setBookToolBar() { $task = JRequest::getVar('task', '', 'method', 'string'); if ($task == 'add') { JToolBarHelper::title(JText::_('Book Category manager') . ': [ ' . JText::_('New') . ' ]', 'generic.png'); } else { JToolBarHelper::title(JText::_('Book Category manager') . ': [ ' . JText::_('Edit') . ' ]', 'generic.png'); } JToolBarHelper::save('save'); JToolBarHelper::apply('apply'); JToolBarHelper::cancel('cancel'); } M t p tin category.php trong thư m c /com_book/ views thêm vào hàm add() v i n i dung sau: function add(){ BookViewCategory::setBookToolBar(); } M t p tin Category.php trong thư m c /com_book/controllers s a hàm add() thành: function add() { JRequest::setVar( 'hidemainmenu', 1 ); BookViewCategory::add(); } b. Xây d ng FORM nh p li u 15 Gi ng viên: Ph m Vũ Khánh Email: vukhanh2212@gmail.com
  16. Ebook: L p trình Joomla! 1.5 Zendvn Group Chương 2: Xây d ng Category controller http://www.zend.vn M t p tin category.php trong thư m c /com_book/ views thêm vào hàm add() v i n i dung sau: function add(){ BookViewCategory::setBookToolBar(); $lists = JHTML::_('select.booleanlist', 'published' ,'class="inputbox"',0, 'Publish','Unpublish'); require_once( TEMPLATE_VIEW . DS . 'add.php'); } T o t p tin add.php trong thư m c /com_book/views/templates/category/ v i n i dung: Category * Ordering Published? c. Ki m tra d li u FORM nh p li u Trong h th ng Joomla, a s các form nh p li u s d ng Javascript ki m tra d li u u vào. Vì v y chúng ta nên chu n b m t t p tin Javascript ch a các hàm ki m tra d l i u. 16 Gi ng viên: Ph m Vũ Khánh Email: vukhanh2212@gmail.com
  17. Ebook: L p trình Joomla! 1.5 Zendvn Group Chương 2: Xây d ng Category controller http://www.zend.vn T o t p tin my_validate.js trong thư m c /com_book/js v i n i dung sau: // Ham kiem tra du lieu la rong function myNotEmpty(elem){ if(elem.value.length == 0){ return false; } return true; } // Ham kiem tra du lieu la so function myIsNumeric(elem){ var numericExpression = /^[0-9]+$/; if(elem.value.match(numericExpression)){ return true; }else{ return false; } } //Ham kiem tra du lieu la chu function myIsAlphabet(elem){ var alphaExp = /^[a-zA-Z]+$/; if(elem.value.match(alphaExp)){ return true; }else{ return false; } } //Ham kiem tra du lieu la so va chu function myIsAlphanumeric(elem){ var alphaExp = /^[0-9a-zA-Z]+$/; if(elem.value.match(alphaExp)){ return true; }else{ return false; } } //Ham kiem tra chieu dai min & max c a du lieu function myLengthRestriction(elem, min, max){ var uInput = elem.value; if(uInput.length >= min && uInput.length
  18. Ebook: L p trình Joomla! 1.5 Zendvn Group Chương 2: Xây d ng Category controller http://www.zend.vn if(elem.value == val){ return false; }else{ return true; } } //Ham kiem tra du lieu la email function myEmailValidator(elem){ var emailExp = /^[\w\-\.\+]+\@[a-zA-Z0-9\.\-]+\.[a-zA-z0-9]{2,4}$/; if(elem.value.match(emailExp)){ return true; }else{ return false; } } ưa m t t p tin my_validate.js vào Joomla. M t p tin category.php trong thư m c /com_book/views thêm vào hàm add() v i n i dung sau : function add() { BookViewCategory::setBookToolBar(); $filename = 'my_validate.js'; $path = JURI::base() . '/components/com_book/js/'; echo JHTML::script($filename, $path); $lists = JHTML::_('select.booleanlist', 'published', 'class="inputbox"', 0, 'Publish', 'Unpublish'); require_once( TEMPLATE_VIEW . DS . 'add.php'); } Ki m tra d li u nh p vào Form. M t p tin add.php trong thư m c /com_book/views/templates/category/ s a thành: //Code cũ … d. Lưu d li u vào database 18 Gi ng viên: Ph m Vũ Khánh Email: vukhanh2212@gmail.com
  19. Ebook: L p trình Joomla! 1.5 Zendvn Group Chương 2: Xây d ng Category controller http://www.zend.vn Thêm ư ng d n n thư m c ch a c u trúc b ng. M t p tin admin.book..php trong thư m c /com_book thêm vào n i dung sau : defined( '_JEXEC' ) or die( 'Restricted access' ); JTable::addIncludePath(JPATH_ADMINISTRATOR.DS.'components'.DS.'com_book'.DS.'tables'); //Code cũ ... Lưu d li u vào Database. M t p tin category.php trong thư m c /com_book/controllers s a hàm save() thành: function save() { global $mainframe; $task = $this->getTask(); //Lay thong tin cua User hien tai $user = & JFactory::getUser(); //Khoi tao doi tuong TableCategory $row = & JTable::getInstance('Category', 'Table'); //Gan cac gia tri duoc POST qua vao doi tuong $row->category = JRequest::getVar('category', '', 'POST', 'STRING'); $row->created_by = $user->id; $row->created = date("Y-m-d h:i:s", time()); $row->ordering = JRequest::getVar('ordering', 10, 'POST', 'INT'); $row->published = JRequest::getVar('published', 0, 'POST', 'INT'); //Luu vao database if (!$row->store()) { $error = $row->getErrorMsg(); $mainframe->redirect('index.php?option=com_book', $error); } else { if ($task == 'save') { $mainframe->redirect('index.php?option=com_book', 'Message Saved'); } else { $mainframe->redirect('index.php?option=com_book&task=edit&cid[]=' . $row- >id, 'Message Saved'); } } } 8. Xây d ng ch c năng h y nhi m v (task: cancel) M t p tin category.php trong thư m c /com_book/controllers s a hàm cancel() thành: function cancel() { 19 Gi ng viên: Ph m Vũ Khánh Email: vukhanh2212@gmail.com
  20. Ebook: L p trình Joomla! 1.5 Zendvn Group Chương 2: Xây d ng Category controller http://www.zend.vn global $mainframe; $mainframe->redirect('index.php?option=com_book'); } 9. Xây d ng ch c năng ch nh s a m t category (task: edit – save - apply ) 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 th ng nút nh n - L y d li u t database ra - Xây d ng FORM nh p li u - Ki m tra d li u trong FORM này b ng javascript - Lưu d li u vào database a. Xây d ng h th ng nút nh n Trong ch c năng này chúng ta không c n xây d ng l i h th ng nút nh n mà chúng ta s dùng l i hàm setBookToolBar() có s n c a t p tin category.php trong thư m c /com_book/ views M t p tin category.php trong thư m c /com_book/ views thêm vào hàm edit() v i n i dung sau: function edit($row){ BookViewCategory::setBookToolBar(); } M t p tin Category.php trong thư m c /com_book/controllers s a hàm edit() thành: function edit() { JRequest::setVar( 'hidemainmenu', 1 ); BookViewCategory::edit($row); } b. L y d li u t Database ra M t p tin Category.php trong thư m c /com_book/controllers s a hàm edit() thành: function edit() { JRequest::setVar('hidemainmenu', 1); $cid = JRequest::getVar('cid'); $id = $cid[0]; $row = & JTable::getInstance('Category', 'Table'); $row->load($id); BookViewCategory::edit($row); } c. Xây d ng FORM nh p li u + Ki m tra d li u trong FORM này b ng javascript 20 Gi ng viên: Ph m Vũ Khánh Email: vukhanh2212@gmail.com
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2