Huong Dan Xay Dung Component

download Huong Dan Xay Dung Component

of 41

Transcript of Huong Dan Xay Dung Component

  • Ti liu hng dn xy dng component trong Joomla! 1.5

    Copyleft by on Thanh Tm Trang 1/41 Email: [email protected]

    TI LIU HNG DN XY DNG COMPONENT TRONG JOOMLA! 1.5

    Thc hin bi on Thanh Tm (email: [email protected])

    [Ngi dch] Ti liu ny bao gm 4 phn hng dn bn tng bc xy dng mt component trong joomla 1.5. Phn sau s b sung thm cc c im mi vo phn trc hon thin dn component ca bn. Khi kt thc mi phn bn u c th ci t ngay cc v d thy c cc kt qu ca phn . Ti liu hng dn ny c dch ch yu t trang web: http://dev.joomla.org/component/option,com_jd-wiki/Itemid,/id,tutorials:components/ Tuy nhin, y khng phi l bn dch hon thin, c mt s on ch dch theo , c mt s on dch hi chui do ti liu ny ch mang tnh cht tham kho. Nu bn mun c thm thng tin chi tit v chnh xc xin vui lng xem bn gc ting Anh trn cc trang web tng ng) [Ngi dch]

    M U Mt component l mt trong nhng thnh phn m rng ln nht v phc tp nht.

    Cc component c th xem nh cc ng dng mini. Mt cch trc quan chng ta c th hnh dung joomla l mt h iu hnh v tt c cc component l cc ng dng desktop. Mi trang (page) trong joomla s gi n mt component ti v cc ni dung chnh (page body) ca trang . V d component ni dung (com_content) l mt ng dng mini x l tt c cc vn v ni dung c tr li, tng t nh th component ng k l mt ng dng mini nhm x l vic ng k ca ngi dng. Mt componet c hai phn chnh: phn qun tr v phn trn site. Phn trn site l phn c s dng ti v cc trang khi c triu gi trong qu trnh vn hnh site thng thng. Phn qun tr cung cp giao din cu hnh, qun l cc kha cnh khc nhau ca component v c truy cp thng qua ng dng qun tr ca joomla.

    Phn hng dn di y s cung cp cho cc bn mt vi v d hu ch gip bn lm th no to ra mt component.

    While we have gone to great lengths to make Joomla easy for content providers to use, we have equally spent a lot of time developing a flexible framework for developers to extend the capabilities of Joomla without having to touch the Core code.

    How-To's (phn bn dch ca MVC 1-4 pha di)

    Hello World MVC 1 Component - The frame Hello World MVC 2 Component - The model Hello World MVC 3 Component - The table Hello World MVC 4 Component - The admin interface

  • Ti liu hng dn xy dng component trong Joomla! 1.5

    Copyleft by on Thanh Tm Trang 2/41 Email: [email protected]

    PHN 1. PHT TRIN MT COMPONENT MVC.

    (Phn hng dn ny c dch t trang web: http://dev.joomla.org/component/option,com_jd-wiki/Itemid,/id,components:hello_world_mvc1/).

    1. Gii thiu Frameword mi trong joomla 1.5 mang li nhng thun li rt ln cho cc nh

    pht trin. Cc on code hon ton c kim tra v kh r rng. Bi hng dn ny s gip bn i qua cc bc trong qu trnh pht trin nhm to ra mt component c th s dng frameword mi ny.

    Phm vi ca bi ny l pht trin mt component Hello World n gin. Trong cc bi hng dn tip theo, frameword n gin ny s c b sung, th hin mt cch y kh nng v tnh linh hot ca mu thit k MVC trong joomla.

    2. Yu cu Bn cn c joomla 1.5 hoc cc phin bn mi hn thc hnh bi hng dn ny.

    3. Gii thiu v MVC (Model-View-Controler) Trong khi tng pha sau mt component dng nh l kh n gin th, cc on

    code c th nhanh chng tr ln rt phc tp khi cc c im b sung c thm vo hoc giao din c ty bin.

    Model-View-Controler (gi tt l MVC) l mt mu thit k phn mm c dng t chc cc on m theo cch m vic x l d liu (business logic) v vic biu din d liu l tch ri nhau. Tin nm sau hng tip cn ny l nu bussiness logic c nhm vo trong mt section th giao din v tng tc ngi dng bao quanh d liu c th nh dng v ty bin li m khng c nh hng n vic phi lp trnh li bussiness logic. (ngha l hnh thc v ni dung l tch ri nhau, do khi thay i hnh thc th hin th khng nh hng n ni dung).

    C ba phn chnh trong mt MVC component (ba phn ny bao gm Model, View v Controler). Chng c m t mt cch vn tt di y. Nu bn cn nhiu thng tin y hn xin vui lng tham kho thm trong cc ng dn c cung cp cui bi hng dn ny.

    3.1. Model Mt model l thnh phn ca component ng gi d liu ca ng dng. N thng

    cung cp cc th tc qun l v thao tc d liu ny theo mt cch no , trong c b sung thm cc th tc ly d liu t model. Trong trng hp ca chng ta model s cha cc phng thc nh b sung, loi b v cp nht thng tin v nhng li cho mng trong c s d liu. N cn cha phng thc ly danh sch cc li cho trong CSDL. Ni mt cch tng qut, vic truy cp vo CSDL lp di s c ng gi trong model. Theo cch ny, nu mt ng dng chuyn i sang vic s dng mt file bnh thng lu tr thng tin ca n thay v s dng CSDL, th ch c thnh phn model l thay i, cc thnh phn view v controler l khng i.

    3.2. View

  • Ti liu hng dn xy dng component trong Joomla! 1.5

    Copyleft by on Thanh Tm Trang 3/41 Email: [email protected]

    View l mt thnh phn ca component c s dng tr li d liu t model theo cch ph hp vi tng tc. i vi cc ng dng web, view thng thng l cc trang HTML tr li d liu. View ly d liu t model (d liu ny c chuyn qua n ti controler). V a d liu vo trong template (d liu s hin th vi ngi dng). View khng lm thay i d liu. N ch hin th d liu ly t model.

    3.3. Controler Controler chu trch nhim phn hi cc hnh ng ca ngi dng. Trong cc ng

    dng web, mt hnh ng ca ngi dng thng thng l mt yu cu ti trang. Controler s xc nh yu cu g c a ra bi ngi s dng v phn hi thch hp bng vic yu cu model tnh ton d liu ph hp v chuyn t model vo view. Controler khng th hin d liu t model, n kch hot cc phng thc trong model hiu chnh d liu v sau chuyn t model sang view hin th d liu.

    4. Ci t Joomla! MVC Trong joomla mu MVC c thc hin s dng 3 lp:

    JModel, JView v JController. Thng tin chi tit v cc lp ny vui lng xem trong ti liu hng dn API ((WIP).

    5. To mt component i vi component c s ca chng ta, chng ta ch cn 5 file:

    hello.php - y l im vo cho component ca chng ta (this is the entry point to our component)

    controller.php file ny c cha controler c bn (this file contains our base controller)

    views/hello/view.html.php file ny nhn cc d liu cn thit v t n ln template (this file retrieves the necessary data and pushes it into the template)

    views/hello/tmpl/default.php file ny l temple cho u ra (this is the template for our output)

    hello.xml y l mt file XML ni cho joomla bit cch ci t component ca chng ta nh th no (this is an XML file that tells Joomla! how to install our component).

    5.1. To entry point Joomla lun lun c truy cp thng qua mt im vo n: index.php cho cc ng

    dng site v administrator/index.php cho ng dng qun tr. Sau ng dng s ti cc component cn thit da trn gi tr chn la trong URL hoc trong d liu POST. i vi component ca chng ta URL s nh sau: index.php?option=com_hello&view=hello. Vic ny s ti file chnh ca chng ta v c th c xem nh mt im vo n cho component ca chng ta: components/com_hello/hello.php. on m ny thc s l c th ty theo cc component.

  • Ti liu hng dn xy dng component trong Joomla! 1.5

    Copyleft by on Thanh Tm Trang 4/41 Email: [email protected]

    /** * @package Joomla.Tutorials

    * @subpackage Components * components/com_hello/hello.php * @link http://dev.joomla.org/component/option,com_jd-wiki/Itemid,31/id,tutorials:modules/ * @license GNU/GPL */ // no direct access defined( '_JEXEC' ) or die( 'Restricted access' ); // Require the base controller require_once( JPATH_COMPONENT.DS.'controller.php' ); // Require specific controller if requested if($controller = JRequest::getWord('controller')) { $path = JPATH_COMPONENT.DS.'controllers'.DS.$controller.'.php'; if (file_exists($path)) { require_once $path; } else { $controller = ''; } } // Create the controller $classname = 'HelloController'.$controller; $controller = new $classname( ); // Perform the Request task $controller->execute( JRequest::getVar( 'task' ) ); // Redirect if set by the controller $controller->redirect(); ?>

    Cu lnh u tin l cu lnh kim tra bo mt. JPATH_COMPONENT l ng dn tuyt i ti component hin ti, trong trng

    hp ca chng ta l components/com_hello. Nu bn cn xc nh site component hoc admin component th bn c th s dng JPATH_COMPONENT v JPATH_COMPONENT_ADMINISTRATOR.

    DS l du phn cch th mc trong h thng ca bn: c th l \ hoc /. iu ny c thit lp t ng bi frameword, v th developer khng phi quan tm n vic pht trin cc phin bn khc nhau cho cc h iu hnh khc nhau. DS s lun c s dng khi tham chiu n cc file trn my ch cc b.

  • Ti liu hng dn xy dng component trong Joomla! 1.5

    Copyleft by on Thanh Tm Trang 5/41 Email: [email protected]

    Sau khi ti controler c bn, chng ta s kim tra mt controler c th cn n. Trong component ny, controler c bn ch l mt controler nhng chng ta cp n iu ny cho cc cng vic trong tng lai.

    JRequest:getVar() tm mt bin trong URL hoc POST d liu. Bi vy nu URL ca chng ta l:

    index.php?option=com_hello>controller=controller_name th chng ta c th nhn c tn controler ca chng ta trong component bng s

    dng cu lnh sau: echo JRequest::getVar(controller); By gi chng ta c controler c s HelloController

    trong com_hello/controller.php, v nu cn thit b sung thm cc controler dng nh: HelloControllerController1 trong com_hello/controllers/controller1.php. S sp xp theo h thng ny s to ra thun li v sau: {Componentname}{Controller}{Controllername}.

    Sau khi controler c to ra, chng ta cho controler chy nhim v nh c ch ra trong URL: index.php?option=com_hello&task=sometask. Nu khng c nhim v no c thit lp th nhim v mc nh display s c gi nh. Khi display c s dng, bin view s quyt nh ci g s c hin th. Cc nhim v khc nh save, edit, new,

    Controler c th quyt nh redirect the page (thc hin ti li mt trang), thng thng l sau khi mt nhim v nh save c hon thnh. Cu lnh cui cng thc hin vic ny.

    im vo chnh (hello.php) v bn cht thng qua vic iu khin controler thc hin cc nhim v c t ra trong request.

    5.2. To controler Component ca chng ta ch c mt nhim v - greet the world (th hin li cho).

    Bi vy controler s rt n gin. Khng cn n vic tnh ton trn d liu. Tt c nhng g cn thit phi lm l ti view thch hp. Chng ta s ch c mt phng thc trong controler l display(). Hu ht cc hm cn thit c xy dng trong lp JControler, bi vy tt c nhng g chng ta cn l gi phng thc JControler::display(); Code ca controler c s nh sau:

  • Ti liu hng dn xy dng component trong Joomla! 1.5

    Copyleft by on Thanh Tm Trang 6/41 Email: [email protected]

    * Hello World Component Controller *

    * @package Joomla.Tutorials

    * @subpackage Components

    */ class HelloController extends JController { /** * Method to display the view *

    * @access public */ function display() { parent::display(); } } ?>

    Vic khi to ca JController s lun lun ng k mt nhim v display() khi khng c nhim v c th no c ch ra (bng vic s dng phng thc registerDefaultTask()), n s c thit lp nh mt nhim v mc nh.

    Phng thc display() ny tht s khng cn thit bi v tt c nhng g n lm l gi hm khi to ca cha n. Tuy nhin, l mt c s kh tt ch ra iu g cn phi lm trong controler.

    Phng thc JController::display() s xc nh view v layout t request, ti view v thit lp layout. Khi bn to ra mt menu item cho component ca bn, menu manager s cho php admin la chn view m h thch th hin v trn layout c th. Mt view thng thng c xem nh mt cch hin th ca mt tp cc d liu no (v d, danh sch cc car, danh sch cc event, mt car n, mt event n, ). Mt layout l mt cch t chc view.

    Trong component ca chng ta chng ta s c mt view n c gi l hello, v mt layout n (default).

    5.3. To view Nhim v ca view l rt n gin: n nhn d liu c th hin v t n ln

    template. D liu c t ln template s dng phng thc JView::assignRef. on m ca view nh sau:

  • Ti liu hng dn xy dng component trong Joomla! 1.5

    Copyleft by on Thanh Tm Trang 7/41 Email: [email protected]

    * @package Joomla.Tutorials * @subpackage Components * @link http://dev.joomla.org/component/option,com_jd-wiki/Itemid,31/id,tutorials:modules/

    * @license GNU/GPL

    */ // no direct access defined( '_JEXEC' ) or die( 'Restricted access' ); jimport( 'joomla.application.component.view'); /** * HTML View class for the HelloWorld Component *

    * @package HelloWorld */ class HelloViewHello extends JView { function display($tpl = null) { $greeting = "Hello World!"; $this->assignRef( 'greeting', $greeting );

    parent::display($tpl); } } ?>

    5.4. To template Joomla template/ layout l cc file PHP thng thng, c s dng b tr, xp

    t d liu t view theo mt cch c th no . Cc bin c gn bi phng thc JView::assignRef c th c truy cp t template s dng $this{propertyname} (xem m template bn di nh mt v d).

    Template ca chng ta rt n gin, chng ta ch mun th hin mt li cho hp quy cch t view.

    5.5. ng gi tt c - To ra file hello.xml

  • Ti liu hng dn xy dng component trong Joomla! 1.5

    Copyleft by on Thanh Tm Trang 8/41 Email: [email protected]

    C th ci t th cng mt component bng cch copy tt c cc file bng FPT client v hiu chnh CSDL. Nhng s hiu qu hn nu to ra mt file c ng gi Joomla! Installer thc hin iu ny cho bn. File ng gi ny s cha nhiu dng thng tin khc nhau nh:

    Cc miu t chi tit c bn v component ca bn (v d nh tn), v ty mt s m t thng tin v bn quyn .

    Mt danh sch cc file cn copy. Mt file PHP thc hin b sung cc thao tc ci t v g b (file ny l

    khng bt buc). Mt file SQL c cha cc cu truy vn d liu m s c thc hin vo lc

    ci t hoc g b (file ny l khng bt buc). nh dng ca file XML nh di y:

    Hello 2007 02 22 John Doe [email protected] http://www.example.org Copyright Info License Info Component Version String Description of the component ...

    index.html hello.php controller.php views/index.html views/hello/index.html

  • Ti liu hng dn xy dng component trong Joomla! 1.5

    Copyleft by on Thanh Tm Trang 9/41 Email: [email protected]

    views/hello/view.html.php views/hello/tmpl/index.html views/hello/tmpl/default.php

    Hello World!

    index.html admin.hello.php

    Nu bn xem xt file ny mt cch cn thn bn s nhn thy rng c mt vi file s c copy m chng ta cha cp trn. Chng l cc file index.html. Mt file index.html c t trong mi th mc ngn cn nhng ngi dng t m trong vic lit k mt danh sch th mc. Nu khng c file index.html mt vi my ch web s lit k danh sch ni dung ca th mc. iu ny thng gy rc ri. Cc file ny c mt dng n nh sau: (N n gin l th hin mt trang trng)

    File khc l admin.hello.php, y l im vo cho section qun tr trong component ca chng ta. Bi v chng ta cha c section qun tr trong component vo thi im ny nn n s c ni dung tng t nh file index.html.

    6. Nhng ngi vit v a ch download v d Nhng ngi tham gia vit bi hng dn ny:

    mjaz staalanden

    Component c th c download ti: http://dev.joomla.org/components/com_jd-wiki/data/media/components/com_hello1.zip

  • Ti liu hng dn xy dng component trong Joomla! 1.5

    Copyleft by on Thanh Tm Trang 10/41 Email: [email protected]

    PHN 2. B SUNG MODEL VO COMPONENT MVC.

    (Phn hng dn ny c dch t trang web: http://dev.joomla.org/component/option,com_jd-wiki/Itemid,/id,components:hello_world_mvc2/).

    1. Gii thiu Trong bi hng dn u tin ( phn 1), chng ta m t vic to thnh mt

    component view-controler n gin s dng Joomla! Frameword. Trong bi u tin, li cho mng c code c nh vo trong view. iu ny

    khng tun theo mu MVC mt cch chnh xc bi v view ch c hin th d liu ch khng cha n.

    Trong phn th hai ny, chng ta s m t lm th no chuyn d liu ra khi view v a n vo mt model. Trong cc bi hng dn tip theo chng ta s m t kh nng v s mm do m mu thit k cung cp.

    2. To ra mt model Khi nim model c gi tn nh th bi v lp ny c mong i s m hnh ha

    cho mt vi thc th no . Trong trng hp ca chng ta, model u tin s a ra mt li cho mng. iu ny ph hp vi thit k hin ti, bi v chng ta c mt view hello, view th hin mt cu cho mng ti ngi dng.

    Cch thng thng t tn cho cc model trong Joomla! Frameword l tn lp bt u bng tn ca component (trong trng hp ca chng ta l hello), tip theo l model, v cui cng l l tn ca model. Bi th lp model ca chng ta c gi l HelloModelHello.

    thi im ny chng ta ch m hnh ha cch x l ca model hello, v n s tr li mt li cho. Chng ta s c mt phng thc c gi l getGreeting(). Phng thc ny n gin l tr li chui Hello, World. Di y l code cho model ca chng ta:

  • Ti liu hng dn xy dng component trong Joomla! 1.5

    Copyleft by on Thanh Tm Trang 11/41 Email: [email protected]

    *

    * @package Joomla.Tutorials * @subpackage Components */ class HelloModelHello extends JModel { /** * Gets the greeting * @return string The greeting to be displayed to the user */ function getGreeting() { return 'Hello, World!'; } }

    Trong on code trn, ch dng bt u l lnh jimport. Hm jimport c s dng ti cc file t Joomla! frameword cn thit cho component ca chng ta. C th cu lnh trn s ti file /libraries/joomla/application/component/model.php. Cc du chm . c s dng nh cc du phn cch th mc, v phn cui cng l tn file cn ti. Tt c cc file c ti t th mc libraries. File trong trng hp trn c cha nh ngha ca lp JModel, iu ny l cn thit v lp ca chng ta c k tha t lp ny.

    By gi chng ta to ra model ca mnh. Tip theo chng ta s phi hiu chnh view n c th ly c li cho.

    3. S dng model Joomla! Frameword c thit lp theo cch controler s t ng ti model c tn

    trng vi view v t n vo trong view. V view ca chng ta c t l hello, nn model hello ca chng ta s t ng c ti v c t vo trong view. Bi vy chng ta s d dng nhn c mt tham chiu n model ca chng ta s dng phng thc JView::getModel(). on m cho view trc ca chng ta c cha dng:

    $greeting = "Hello World!";

    s dng model, chng ta chuyn i dng trn thnh:

    $model =& $this->getModel(); $greeting = $model->getGreeting();

    By gi, code ca view s nh sau:

  • Ti liu hng dn xy dng component trong Joomla! 1.5

    Copyleft by on Thanh Tm Trang 12/41 Email: [email protected]

    4. B sung file vo package Tt c nhng g cn li cn phi lm l b sung mt entry vo file XML model

    mi ca chng ta c copy. Joomla! Frameword s tm kim model ca chng ta trong th mc models. Bi vy entry cho file ny trng nh sau:

    models/hello.php

    File hello.xml mi ca chng ta s nh sau:

  • Ti liu hng dn xy dng component trong Joomla! 1.5

    Copyleft by on Thanh Tm Trang 13/41 Email: [email protected]

    Hello 2007 02 22 John Doe [email protected] http://www.example.org Copyright Info License Info Component Version String Description of the component ...

    index.html hello.php controller.php views/index.html views/hello/index.html views/hello/view.html.php views/hello/tmpl/index.html views/hello/tmpl/default.php models/index.html models/hello.php

    Hello World!

  • Ti liu hng dn xy dng component trong Joomla! 1.5

    Copyleft by on Thanh Tm Trang 14/41 Email: [email protected]

    to copy FROM in the package to install therefore files copied in this section are copied from /admin/ in the package --> index.html admin.hello.php

    5. Kt lun Chng ta c mt component MVC n gin. Mi phn t l rt n gin vo thi

    im ny, nhng n cung cp mt kh nng v s linh hot rt ln.

    6. Nhng ngi vit v a ch download v d Nhng ngi tham gia vit bi hng dn ny:

    staalanden

    Component c th c download ti: http://dev.joomla.org/components/com_jd-wiki/data/media/components/com_hello2.zip

  • Ti liu hng dn xy dng component trong Joomla! 1.5

    Copyleft by on Thanh Tm Trang 15/41 Email: [email protected]

    PHN 3. S DNG CSDL TRONG COMPONENT MVC.

    (Phn hng dn ny c dch t trang web: http://dev.joomla.org/component/option,com_jd-wiki/Itemid,/id,components:hello_world_mvc3/).

    1. Gii thiu Trong hai bi hng dn u tin (phn 1 v phn 2) chng ti hng dn cc bn

    lm th no xy dng mt component MVC n gin. Chng ta c mt view ly d liu t model (trong bi hng dn th 2). Trong bi ny chng ta s lm vic vi model. Thay v vic d liu c code trc tip trong model, th model s ly d liu t mt bng trong CSDL.

    2. Ly d liu Model hin ti ca chng ta c mt phng thc getGreeting(). Phng thc ny rt

    n gin, tt c nhng g n lm l tr v mt cu cho c code c nh. lm nhng iu ny th v hn, chng ta s ly cu cho t bng c s d liu.

    Trong phn sau, chng ta s m t lm cch no to ra mt file SQL v b sung cc on m ph hp vo file XML to ra bng v b sung d liu mu vo bng khi component c ci t. By gi, chng ta ch n gin thay th cu lnh tr v trong hm getGreeting bng on code ly li cho mng t CSDL v tr li li cho mng .

    u tin, chng ta cn ly c mt tham chiu n i tng CSDL. V joomla s dng CSDL cho cc thao tc thng thng ca n, nn n c mt kt ni ti CSDL tn ti, bi th khng cn thit phi to ra mt kt ni CSDL ring. C th ly c mt tham chiu ti kt ni bng cch s dng cu lnh:

    $db =& JFactory::getDBO();

    JFactory l mt lp static c s dng nhn tham chiu n nhiu i tng h thng khc nhau. Cc thng tin thm v lp ny c th tham kho trong ti liu v API.

    Tn hm getDBO l vit tt cho get DataBase Object, c th nh mt cch d dng v rt quan trng.

    By gi chng ta c mt tham chiu n i tng CSDL, Chng ta c th ly d liu. iu ny c thc qua hai bc:

    Lu tr cu truy vn ca vo i tng CSDL Ti kt qu v

    Code ca phng thc getGreeting() by gi s nh sau:

    function getGreeting() { $db =& JFactory::getDBO();

    $query = 'SELECT greeting FROM #__hello'; $db->setQuery( $query );

  • Ti liu hng dn xy dng component trong Joomla! 1.5

    Copyleft by on Thanh Tm Trang 16/41 Email: [email protected]

    $greeting = $db->loadResult();

    return $greeting; }

    Trong on m trn hello l tn ca bng trong CSDL m chng ta s to ra trong phn sau. V greeting l tn ca trng lu tr cu cho mng. Nu bn cha quen vi SQL, s rt hu ch nu bn ly mt bi hng dn xem xt li. Nhng bi hng dn nh th bn c th tm thy w3schools.

    Phng thc $dbloadResult() s chy cu lnh truy vn CSDL c lu tr v tr v trng u tin ca dng u tin trong kt qu. Xem JDatabase API reference c cc thng tin nhiu hn v cc phng thc khc trong lp JDatabase.

    3. To ra file SQL trong qu trnh ci t v g b component Joomla! installer c xy dng sn vic h tr i vi vic chy cc cu truy vn trong

    qu trnh ci t component. Tt c cc cu truy vn ny c lu tr trong mt file text chun.

    Chng ta s c 3 cu truy vn trong file ci t: vic u tin s thc hin xa bng trong trng hp n tn ti, tip theo thc hin vic to ra bng vi cc trng ph hp, v cui cng l chn d liu vo bng va to.

    Di y l cc cu truy vn ca chng ta:

    DROP TABLE IF EXISTS `#__hello`;

    CREATE TABLE `#__hello` ( `id` int(11) NOT NULL auto_increment, `greeting` varchar(25) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT DEFAULT CHARSET=utf8;

    INSERT INTO `#__hello` (`greeting`) VALUES ('Hello, World!'), ('Bonjour, Monde!'), ('Ciao, Mondo!');

    Bn c th thy tin t trong cc tn bng hi k cc. Tuy nhin, Joomla! s thay th cc tin t ny bi tin t c xc nh trong qu trnh ci t. i vi hu ht cc bn ci t, bng ny s tr thnh jos_hello. iu ny cho php nhiu bn ci t joomla c th s dng chung CSDL, v ngn chn cc xung t vi cc ng dng khc s dng cng tn bng (v d, hai ng dng c th chia s chung mt CSDL, nhng c hai u cn mt bng user, vi cch ny vn s c gii quyt).

    Chng ta xc nh hai trng trong CSDL. Trng u tin l id ng vai tr l kha chnh. Kha chnh trong mt bng ca CSDL l trng dng xc nh duy nht

  • Ti liu hng dn xy dng component trong Joomla! 1.5

    Copyleft by on Thanh Tm Trang 17/41 Email: [email protected]

    mt bn ghi trong bng. N thng c s dng tm kim cc hng trong CSDL. Trng cn li l greeting. y l trng lu cu cho mng c tr li bi truy vn m chng ta s dng trn. Cc cu truy vn ca chng ta s c lu trong file install.utf.sql.

    To ra file SQL g b ci t Mc d chng ta lun mong mun ngi dng s khng bao gi mun g b

    component ca chng ta, tuy nhin c mt iu quan trng l nu h thc hin vic chng ta khng c li bt c th g sau khi g b. Joomla! s qun l vic xa cc file v cc th mc c to ra trong qu trnh ci t, nhng bn phi b sung th cng cc cu truy vn s loi b cc bng c thm vo CSDL. Trong v d, chng ta ch to mt bng, nn chng ta ch cn mt cu truy vn xa n.

    DROP TABLE IF EXISTS `#__hello`;

    Cu truy vn ny s c lu tr trong file uninstall.utf.sql.

    4. Cp nht file ci t Chng ta cn phi thay i mt vi th trong file ci t XML. u tin, chng ta cn

    b sung hai file mi vo danh sch cc file. File ci t SQL s phi a vo trong th mc admin. Th hai, chng ta cn phi bo cho trnh ci t chy cc cu truy vn trong cc file ca chng ta trong qu trnh ci t v qu trnh g b.

    File XML mi ca chng ta s nh sau:

    Hello 2007 02 22 John Doe [email protected] http://www.example.org Copyright Info License Info Component Version String Description of the component ...

  • Ti liu hng dn xy dng component trong Joomla! 1.5

    Copyleft by on Thanh Tm Trang 18/41 Email: [email protected]

    index.html hello.php controller.php views/index.html views/hello/index.html views/hello/view.html.php views/hello/tmpl/index.html views/hello/tmpl/default.php models/hello.php install.sql uninstall.sql Hello World!

    index.html admin.hello.php install.sql uninstall.sql

  • Ti liu hng dn xy dng component trong Joomla! 1.5

    Copyleft by on Thanh Tm Trang 19/41 Email: [email protected]

    Ch n hai thuc tnh xut hin trong cc th nm trong cc phn v : charset v driver. Charset l kiu charset c s dng. Ch c charset hp l l utf8. Nu bn mun to ra cc file ci t cho CSDL khng phi l utf8 bn s b qua thuc tnh ny. Thuc tnh driver xc nh CSDL no cc cu truy vn c vit cho. Hin ti, thuc tnh ny ch c th l mysql, nhng cc phin bn joomla trong tng lai c th c nhiu dng CSDL hn.

    5. Kt lun Cho n by gi chng ta c mt component tn dng c cc thun li ca c cc

    lp Joomla! MVC framework v lp JDatabase. By gi bn c kh nng vit cc component MVC tng tc vi CSDL v c th s dng Joomla! Installer to v thao tc trn cc bng CSDL.

    6. Nhng ngi vit v a ch download v d Nhng ngi tham gia vit bi hng dn ny:

    staalanden

    Component c th c download ti: http://dev.joomla.org/components/com_jd-wiki/data/media/components/com_hello3.zip

  • Ti liu hng dn xy dng component trong Joomla! 1.5

    Copyleft by on Thanh Tm Trang 20/41 Email: [email protected]

    PHN 4. TO GIAO DIN QUN TR TRONG MVC.

    (Phn hng dn ny c dch t trang web: http://dev.joomla.org/component/option,com_jd-wiki/Itemid,/id,components:hello_world_mvc4/).

    1. Gii thiu Trong ba bi hng dn trc (phn 1, 2 v 3) chng ta pht trin mt component

    MVC ly d liu t mt bng trong CSDL. Cho n thi im hin ti component ca chng ta cha c cch no b sung thm d liu ti CSDL, ngoi tr vic thc hin iu ny mt cch th cng bng mt cng c khc. Trong phn ny chng ta s pht trin mt section qun tr cho component, c kh nng qun l cc entry trong CSDL.

    2. To ra frameword c s Frameword c s ca panel qun tr cng tng t nh phn site. im vo chnh cho

    phn qun tr l file admin.hello.php. File ny ging y ht file hello.php c s dng trong phn site ngoi tr tn ca controler m n ti s c thay i thnh HellosController. Ngoi ra, controler mc nh c gi l controller.php v file ny ging y ht controler mc nh trong phn site, ngoi tr tn ca controler c gi l HellosController thay v HelloController. S thay i ny JControler theo mc nh s ti hellos view, view ny s hin th mt danh sch cc cu cho mng.

    Di y l code ca admin.hello.php

  • Ti liu hng dn xy dng component trong Joomla! 1.5

    Copyleft by on Thanh Tm Trang 21/41 Email: [email protected]

    } // Create the controller

    $classname = 'HellosController'.$controller; $controller = new $classname( ); // Perform the Request task $controller->execute( JRequest::getVar( 'task' ) ); // Redirect if set by the controller $controller->redirect(); ?>

    Chng s bt u vi view hellos v model hellos. u tin l model hellos.

    2.1. Model Hellos Model Hellos s rt n gin. Hin ti, cng vic m chng ta cn ch l truy vn

    nhn c mt danh sch ca cc cu cho mng t CSDL. Cng vic ny s c thc hin bng cch gi phng thc getData().

    Lp JModel c mt phng thc protected c xy dng sn _getList(). Phng thc ny c th c s dng n gin ha tc v truy vn nhn c mt danh sch cc bn ghi t CSDL. n gin l chng ta cn truyn cho n cu truy vn v n s tr li danh sch cc bn ghi.

    Trong tng lai, c th chng ta li mun s dng cu truy vn trong mt phng thc khc. V vy, y chng ta s to ra mt phng thc private _buildQuery() s tr li cu truy vn s c truyn vo phng thc _getList(). iu ny s to ra kh nng thay i cu truy vn khi n c t trong mt tnh hung khc.

    Do trong lp ca chng ta s c hai phng thc: getData() v _buildQuery(). Phng thc _buidQuery n gin l tr v cu truy vn. Code ca n nh sau:

    /** * Returns the query * @return string The query to be used to retrieve the rows from the database */ function _buildQuery() { $query = ' SELECT * ' . ' FROM #__hello ' ;

    return $query; }

  • Ti liu hng dn xy dng component trong Joomla! 1.5

    Copyleft by on Thanh Tm Trang 22/41 Email: [email protected]

    Phng thc getData() nhn cu truy vn v tr li danh sch cc bn ghi t CSDL. By gi c th xy ra tnh hung l chng ta cn nhn c danh sch ny 2 ln trong vic ti mt trang. Tht l lng ph khi truy vn CSDL 2 ln. Bi vy chng ta s phi lm cho phng thc ny lu tr d liu trong mt thuc tnh protected trong cc yu cu tip theo, n ch n gin l tr v d liu m n ly c. Thuc tnh ny s c gi l _data.

    Di y l code ca phng thc getData()

    /** * Retrieves the hello data * @return array Array of objects containing the data from the database */ function getData() { // Lets load the data if it doesn't already exist if (empty( $this->_data )) { $query = $this->_buildQuery(); $this->_data = $this->_getList( $query ); } return $this->_data; }

    Code y ca model sau khi hon thnh nh sau:

  • Ti liu hng dn xy dng component trong Joomla! 1.5

    Copyleft by on Thanh Tm Trang 23/41 Email: [email protected]

    * @package Joomla.Tutorials * @subpackage Components

    */ class HellosModelHellos extends JModel { /** * Hellos data array *

    * @var array */ var $_data;

    /** * Returns the query * @return string The query to be used to retrieve the rows from the database */ function _buildQuery() { $query = ' SELECT * ' . ' FROM #__hello ' ;

    return $query; } /** * Retrieves the hello data * @return array Array of objects containing the data from the database */ function getData() { // Lets load the data if it doesn't already exist if (empty( $this->_data )) { $query = $this->_buildQuery(); $this->_data = $this->_getList( $query ); } return $this->_data; }

  • Ti liu hng dn xy dng component trong Joomla! 1.5

    Copyleft by on Thanh Tm Trang 24/41 Email: [email protected]

    }

    File ny c lu li thnh models/hellos.php.

    2.2. View hellos By gi chng ta c mt model nhn d liu, chng ta cn hin th n. View

    hellos ny s kh ging vi view trong phn site. Model ca chng ta c t ng ci t trn site, bi vy n nm trong phn qun tr. Cc phng thc bt u bng get trong model c th c truy cp bng vic s dng phng thc get() ca lp JView. Bi vy view ca chng ta s c 3 dng. Mt ly d liu t model, mt y d liu ln template, v mt gi phng thc display hin th. Bi vy chng ta c code nh sau:

  • Ti liu hng dn xy dng component trong Joomla! 1.5

    Copyleft by on Thanh Tm Trang 25/41 Email: [email protected]

    JToolBarHelper::title( JText::_( 'Hello Manager' ), 'generic.png' ); JToolBarHelper::deleteList(); JToolBarHelper::editListX();

    JToolBarHelper::addNewX();

    // Get data from the model $items =& $this->get( 'Data'); $this->assignRef( 'items', $items ); parent::display($tpl); } }

    File ny c lu thnh views/hellos/view.html.php.

    2.3. Template hellos Template s ly d liu c a n t view v a d liu ra u ra hin th.

    Chng ta s hin th kt qu u ra trong mt bng n gin. Trong khi template phn site l rt n gin, th trong trang qun tr chng ta s cn m rng mt cht x l vng lp thng qua d liu.

    Di y l code trong template ca chng ta:

  • Ti liu hng dn xy dng component trong Joomla! 1.5

    Copyleft by on Thanh Tm Trang 26/41 Email: [email protected]

    $row =& $this->items[$i]; ?>

  • Ti liu hng dn xy dng component trong Joomla! 1.5

    Copyleft by on Thanh Tm Trang 27/41 Email: [email protected]

    ta c trong CSDL. lm n hu dng hn chng ta cn b sung thm cc button v cc ng link.

    3.1. Toolbar Chng ta c th thy toolbar xut hin pha trn cc panel khc trong component

    qun tr ca joomla. Component ca chng ta cng cn mt th tng t nh th. Chng ta s b sung thm cc nt xa bn ghi, hiu chnh bn ghi, thm bn ghi mi. Ngoi ra chng ta s cn b sung thm mt title th hin trn toolbar.

    iu ny c thc hin bng cch b sung thm code vo view. b sung thm cc button chng ta s dng cc phng thc tnh t lp JToolbarHepper trong joomla. Code s trng nh sau:

    JToolBarHelper::title( JText::_( 'Hello Manager' ), 'generic.png' ); JToolBarHelper::deleteList(); JToolBarHelper::editListX(); JToolBarHelper::addNewX();

    Ba phng thc ny s to ra cc button ph hp. Phng thc deleteList() c th ty chn ly ba tham s: Tham s u tin l mt chui hin th n ngi dng yu cu h xc nhn vic xa bn ghi. Tham s th hai l nhim v s c gi vi cu truy vn (mc nh l remove). V tham s th 3 l on text s c th hin di button. Cc phng thc editLisstX() v addNewX() c th ty chn hai tham s: Tham s u tin l nhim v (theo mc nh ln lt l edit v add), v tham s th 2 l on text s c th hin di button.

    Ch rng cch s dng phng thc JText::_ trong template trc y v y l tng t nhau. y l chc nng gip cho component c th chuyn i mt cch rt d dng. Phng thc JText::_ s tm kim xu trong file ngn ng ca component v tr li chui c chuyn i. Nu khng c s chuyn i no c tm thy n s tr li chnh chui truyn vo cho n. Nu chng ta mun chuyn i component sang mt ngn ng khc, tt c nhng g phi lm l to ra mt file ngn ng nh x xu trong du trch dn vi xu c chuyn i tng ng. [V d: nu trong file ngn ng chng ta c mt cp Greeting Hello world th phng thc JText::_(Greeting) s tr li chui Hello World. Khi chng ta cn chuyn qua ting Vit, trong file ngn ng chng ta ch cn c mt cp Greeting Xin cho! lc ny phng thc JText::_(Greeting) s tr li chui Xin cho!.]

    3.2. Checkbox v link By gi chng ta c hai button. Hai button ny thao tc trn cc bn ghi tn ti.

    Nhng lm th no chng ta bit chng ta ang thao tc trn bn ghi no? Chng ta phi yu cu ngi dng ni cho chng ta bit iu . lm iu ny chng ta cn b sung thm cc checkbox vo bng hin th trn template ngi dng c th la chn cc bn ghi thc s.

    b sung thm cc chekbox chng ta cn b sung thm mt ct vo bng. Chng ta s b sung ct ny vo gia hai ct c trn.

  • Ti liu hng dn xy dng component trong Joomla! 1.5

    Copyleft by on Thanh Tm Trang 28/41 Email: [email protected]

    Trong phn u ca ct, chng ta s thm mt checkbox c th la chn tt c cc checkbox di n thnh on hoc off.

  • Ti liu hng dn xy dng component trong Joomla! 1.5

    Copyleft by on Thanh Tm Trang 29/41 Email: [email protected]

  • Ti liu hng dn xy dng component trong Joomla! 1.5

    Copyleft by on Thanh Tm Trang 30/41 Email: [email protected]

    View hellos ca chng ta hon thnh. Bn c th th cc kt qu ca component ny ngay by gi. Component c th download ti:

    http://dev.joomla.org/components/com_jd-wiki/data/media/components/com_hello4a.zip

    4. Getting Down and Dirty: Doing the Real Work Cho n by gi view hellos lm vic tt. Chng ta s chuyn sang model v view

    hello. y l ni thao tc thc s nh add, edit, s c thc hin.

    4.1. Hello Controler Our default controller just isnt going to cut it when it comes to doing work - all it is

    capable of doing is displaying views [tm dch Controler mc nh s khng ngt gia chng khi n khi n ang lm vic- tt c ch l kh nng lm hin th cc view]. Chng ta cn x l cc nhim v m chng ta c view hellos: add, edit v remove.

    Add v edit v bn cht l hai tc v tng t nhau. C hai u th hin mt form n ngi dng cho php hiu chnh mt cu cho mng. Ch c s khc nhau l add s hin th mt form trng, cn edit s hin th mt form c d liu ca n trong . Bi v cc tc v ging nhau nn chng ta s nh x tc v add vo trong tc v edit. iu ny c thc hin trong hm khi to:

    /** * constructor (registers additional tasks to methods) * @return void

  • Ti liu hng dn xy dng component trong Joomla! 1.5

    Copyleft by on Thanh Tm Trang 31/41 Email: [email protected]

    */ function __construct() { parent::__construct(); // Register Extra tasks $this->registerTask( 'add' , 'edit' ); }

    Tham s u tin ca JControler::registerTask l tc v cn nh x v tham s th hai l phng thc m n s nh x n.

    Chng ta s bt u x l tc v edit. Cng vic ca controler l kh n gin i vi tc v edit. Tt c nhng g m n phi lm l xc nh view v form layout cn ti (hello view v form layout). Ngoi ra, chng ta s ni vi joomla disable main menu trong khi chng ta hiu chnh cu cho mng. iu ny s ngn ngi dng khi vic thot m qun khng lu cc bn ghi ang m.

    Code cho tc v edit ca chng ta s nh sau:

    /** * display the edit form * @return void */ function edit() { JRequest::setVar( 'view', 'hello' ); JRequest::setVar( 'layout', 'form' ); JRequest::setVar('hidemainmenu', 1); parent::display(); }

    4.2. Hello View Hello view s hin th mt form cho php ngi dng hiu chnh cu cho mng.

    Phng thc display ca view phi thc hin mt s tc v n gin sau: Nhn d liu t model (retrieve the data from the model) To toolbar (create the toolbar) Chuyn d liu vo template (pass the data into the template) Gi phng thc display tr li template (invoke the display() method

    to render the template) Vic thc hin cc tc v trn c mt cht phc tp, v mt view s x l c hai

    nhim v edit v task. Trong toolbar chng ta mun ngi dng bit h ang add hay edit, bi th chng ta cn phi xc nh tc v no c to ra.

  • Ti liu hng dn xy dng component trong Joomla! 1.5

    Copyleft by on Thanh Tm Trang 32/41 Email: [email protected]

    V chng ta nhn li cc bn ghi mun hin th t model, nn chng ta c th s dng d liu ny xc nh tc v no c a ra. Nu tc v l edit th trng id s c thit lp, nu nhim v l add th n s khng c thit lp. iu ny c th c s dng xc nh xem chng ta c mt bn ghi mi hay mt bn ghi tn ti.

    Chng ta s b sung thm 2 button vo toolbar: save v cancel. Tuy cc chc nng l ging nhau, nhng chng ta mun vic hin th ca cc nt phi khc nhau, ph thuc vo n l mt bn ghi mi hay mt bn ghi tn ti. Nu n l bn ghi mi, chng ta s th hin nt cacel, nu n l bn ghi tn ti, chng ta s th hin nt close.

    V vy phng thc ca chng ta s nh sau:

    /** * display method of Hello view * @return void **/ function display($tpl = null) { //get the hello $hello =& $this->get('Data'); $isNew = ($hello->id < 1);

    $text = $isNew ? JText::_( 'New' ) : JText::_( 'Edit' ); JToolBarHelper::title( JText::_( 'Hello' ).': [ ' . $text.' ]' ); JToolBarHelper::save(); if ($isNew) { JToolBarHelper::cancel(); } else { // for existing items the button is renamed `close` JToolBarHelper::cancel( 'cancel', 'Close' ); } $this->assignRef('hello', $hello); parent::display($tpl); }

    4.3. Hello Model View ca chng ta cn phi c d liu. V vy chng ta phi to ra mt model to

    ra mt cu cho mng. Model ca chng ta s c 2 thuc tnh: _id v _data. _id s gi id ca cu cho

    mng v _data s cha d liu. Chng ta s bt u vi mt hm khi to hng ti vic nhn id t truy vn:

  • Ti liu hng dn xy dng component trong Joomla! 1.5

    Copyleft by on Thanh Tm Trang 33/41 Email: [email protected]

    /** * Constructor that retrieves the ID from the request *

    * @access public * @return void */ function __construct() { parent::__construct();

    $array = JRequest::getVar('cid', 0, '', 'array'); $this->setId((int)$array[0]); }

    Phng thc JRequest::getVar() c s dng nhn d liu t request. Tham s u tin l tn ca bin form. Tham s th hai l gi tr mc nh s c gn nu khng c gi tr no c tm thy. Tham s th 3 l tn ca hash nhn d liu t (get, post, vv) v gi tr cui cng l kiu d liu ca gi tr.

    Hm khi to ca chng ta s ly gi tr u tin t mng cid v gn n cho id. Phng thc setId() c s dng thit lp id. Vic thay i id m model ca

    chng ta tr ti c ngha l d liu m id tr ti s khng cn ng na. Do , khi chng ta thit lp id chng ta cn clear thuc tnh data.

    /** * Method to set the hello identifier *

    * @access public * @param int Hello identifier * @return void */ function setId($id) { // Set id and wipe data $this->_id = $id; $this->_data = null; }

    Cui cng, chng ta cn mt phng thc nhn d liu: getData().

  • Ti liu hng dn xy dng component trong Joomla! 1.5

    Copyleft by on Thanh Tm Trang 34/41 Email: [email protected]

    Phng thc getData s kim tra xem thuc tnh data c thit lp hay cha. Nu n c thit lp th getData s tr li n, nu khng getData s ti d liu t CSDL.

    **

    * Method to get a hello * @return object with data */

    function &getData() { // Load the data

    if (empty( $this->_data )) {

    $query = ' SELECT * FROM #__hello '. ' WHERE id = '.$this->_id; $this->_db->setQuery( $query ); $this->_data = $this->_db->loadObject(); } if (!$this->_data) { $this->_data = new stdClass(); $this->_data->id = 0; $this->_data->greeting = null; } return $this->_data; }

    4.4. The form By gi, cng vic cn li l to ra form a d liu vo. V chng ta xc nh

    layout ca chng ta nh mt form. Form s c trong mt file trong th mc tmp ca hello view gi l form.php:

  • Ti liu hng dn xy dng component trong Joomla! 1.5

    Copyleft by on Thanh Tm Trang 35/41 Email: [email protected]

    :

  • Ti liu hng dn xy dng component trong Joomla! 1.5

    Copyleft by on Thanh Tm Trang 36/41 Email: [email protected]

    JTable, b sung cc trng d liu nh cc thuc tnh v ghi hm khi to xc nh tn ca bng v kha chnh.

    Di y l lp JTable ca chng ta:

  • Ti liu hng dn xy dng component trong Joomla! 1.5

    Copyleft by on Thanh Tm Trang 37/41 Email: [email protected]

    parent::__construct('#__hello', 'id', $db); } } ?>

    y bn s thy, chng ta nh ngha hai trng: trng id v trng greeting. Sau chng ta nh ngha mt hm khi to, n s gi hm khi to ca lp cha v truyn vo tn ca bng (hello), tn ca trng l kha chnh (id) v i tng kt ni CSDL.

    File ny s c gi hello.php v n s nm trong th mc table trong phn qun tr ca component.

    b) Ci t chc nng trong model By gi chng ta sn sng b sung phng thc vo model n lu li bn ghi.

    Chng ta s gi phng thc ny lu tr. Phng thc store() s thc hin 3 vic: kt khi d liu t form vo i tng TableHello, kim tra chc chn rng bn ghi c nh dng ng, v lu d liu vo CSDL.

    Phng thc ca chng ta nh sau:

    /** * Method to store a record *

    * @access public * @return boolean True on success */ function store() { $row =& $this->getTable();

    $data = JRequest::get( 'post' ); // Bind the form fields to the hello table if (!$row->bind($data)) { $this->setError($this->_db->getErrorMsg()); return false; }

    // Make sure the hello record is valid if (!$row->check()) { $this->setError($this->_db->getErrorMsg()); return false; }

  • Ti liu hng dn xy dng component trong Joomla! 1.5

    Copyleft by on Thanh Tm Trang 38/41 Email: [email protected]

    // Store the web link table to the database if (!$row->store()) { $this->setError($this->_db->getErrorMsg()); return false; } return true;

    }

    Phng thc ny c b sung vo model hello. Phng thc s c mt tham s. N l mt mng lin kt d liu m chng ta mun

    lu tr vo CSDL. iu ny c th c thc hin d dng t cu truy vn s c xem xt trong phn sau

    Chng ta thy rng dng u tin tr li mt tham chiu n i tng JTable. Nu chng ta t tn table chnh xc chng ta s khng phi xc nh tn ca n - lp JModel s bit t tm n u. Nhc li rng lp table ca chng ta c gi l TableHello v t trong file hello.php nm trong th mc tables. Nu bn tun theo quy lut ny lp JModel c th to ra i tng ca bn mt cch t ng.

    Dng th hai s nhn li d liu t form. Lp JRequest s thc hin iu ny rt d dng. Trong trng hp ny chng ta s nhn li tt c cc bin m chng ta submit s dng phng thc POST. iu ny s tr li mt mng lin kt.

    Phn cn li l rt d dng. Chng ta gn d liu, kim tra v lu tr. Phng thc bind() s copy d liu t mng vo thuc tnh tng ng ca i tng table. Trong trng hp ny, phng thc bind() s ly gi tr ca id v greeting sau copy chng vo cc thuc tnh ca i tng table.

    Phng thc store() ly d liu t i tng v lu n vo CSDL. Nu id =0 n s to ra mt bn ghi mi (cu lnh insert), nu khng n s cp nht bn ghi c (cu lnh update).

    c) B sung tc v vo controler By gi chng ta s b sung tc v vo controler. V tc v m chng ta ang thuwcj

    hin l save, nn chng ta phi gi phng thc save:

    /** * save a record (and redirect to main page) * @return void */ function save() { $model = $this->getModel('hello');

    if ($model->store()) {

  • Ti liu hng dn xy dng component trong Joomla! 1.5

    Copyleft by on Thanh Tm Trang 39/41 Email: [email protected]

    $msg = JText::_( 'Greeting Saved!' ); } else { $msg = JText::_( 'Error Saving Greeting' ); }

    // Check the table in so it can be edited.... we are done with it anyway

    $link = 'index.php?option=com_hello'; $this->setRedirect($link, $msg); }

    Tt c nhng g chng ta lm l ly model v gi phng thc store. Sau chng ta s dng phng thc setRedirect() redirect tr li danh sch cc cu cho mng. Ngoi ra chng ta cn truyn cho n mt message, message ny s c hin th pha trn u ca trang.

    4.5.2. Xa mt bn ghi a) Ci t chc nng trong Model Trong model chng ta s nhn li mt danh sch cc id cn xa v gi lp JTable

    xa chng.

    /** * Method to delete record(s) * @access public * @return boolean True on success */ function delete() { $cids = JRequest::getVar( 'cid', array(0), 'post', 'array' ); $row =& $this->getTable();

    foreach($cids as $cid) { if (!$row->delete( $cid )) { $this->setError( $row->getErrorMsg() ); return false; } } return true;

    }

  • Ti liu hng dn xy dng component trong Joomla! 1.5

    Copyleft by on Thanh Tm Trang 40/41 Email: [email protected]

    Chng ta gi phng thc JRequest::getVar() ly d liu t request sau gi phng thc $rowdelete() xa mi dng. Bng vic lu tr cc li trong model chng ta s c th nhn li chng sau nu chng ta mun.

    b) X l tc v remove trong controler Tng t nh phng thc save() trong vic x l tc v lu tr.

    **

    * remove record(s) * @return void */ function remove() { $model = $this->getModel('hello'); if(!$model->delete()) { $msg = JText::_( 'Error: One or More Greetings Could not be Deleted' ); } else { $msg = JText::_( 'Greeting(s) Deleted' ); }

    $this->setRedirect( 'index.php?option=com_hello', $msg ); }

    4.5.3. Hy b qu trnh hiu chnh hy b vic edit, tt c nhng g chng ta cn lm l redirect li main view.

    /** * cancel editing a record * @return void */ function cancel() { $msg = JText::_( 'Operation Cancelled' ); $this->setRedirect( 'index.php?option=com_hello', $msg ); }

    5. Kt lun We have now implemented a basic backend to our component. We are now able to

    edit the entries that are viewed in the frontend. We have demonstrated the interaction

  • Ti liu hng dn xy dng component trong Joomla! 1.5

    Copyleft by on Thanh Tm Trang 41/41 Email: [email protected]

    between models, views and controllers. We have shown how the JTable class can be extended to provide easy access to tables in the database. It can also be seen how the JToolBarHelper class can be used to create button bars in components to present a standardized look between components. .

    6. Nhng ngi vit v a ch download v d Nhng ngi tham gia vit bi hng dn ny:

    staalanden Component c th c download ti: http://dev.joomla.org/components/com_jd-wiki/data/media/components/com_hello4.zip