{"id":200,"date":"2014-06-19T23:09:30","date_gmt":"2014-06-19T21:09:30","guid":{"rendered":"http:\/\/www.valeriofinazzo.it\/wordpress\/?p=200"},"modified":"2014-06-19T23:09:30","modified_gmt":"2014-06-19T21:09:30","slug":"joomla-tutorial-creare-un-component-backend","status":"publish","type":"post","link":"http:\/\/www.valeriofinazzo.it\/wordpress\/2014\/06\/joomla-tutorial-creare-un-component-backend\/","title":{"rendered":"JOOMLA &#8211; TUTORIAL &#8211; CREARE UN COMPONENT &#8211; BACKEND"},"content":{"rendered":"<p style=\"color: rgb(13, 41, 63); text-align: justify;\">Nell&#8217;articolo di oggi realizzeremo il backend del nostro componente, usando il pattern\u00a0<a style=\"color: #2675b5;\" href=\"http:\/\/it.wikipedia.org\/wiki\/Model-View-Controller\">MVC<\/a>\u00a0(Model View Controller). Per chi non lo conoscesse si tratta di uno dei pattern pi\u00f9 usati nello sviluppo software, che prevede la separazione della logica di business dal modello di rappresentazione dei dati.<\/p>\n<p style=\"color: rgb(13, 41, 63); text-align: justify;\">Nel pattern MVC sono presenti le seguenti 3 componenti software:<\/p>\n<ul style=\"color: rgb(20, 60, 93); text-align: justify;\">\n<li>model &#8211;&gt; responsabile della gestione del dato (offre i metodi di accesso\/modifica al dato)<\/li>\n<li>view \u00a0 \u00a0&#8211;&gt; responsabile della rappresentazione del dato<\/li>\n<li>controller \u00a0&#8211;&gt; gestisce le richieste degli utenti invocando gli oggetti adatti di volta in volta.<\/li>\n<\/ul>\n<div style=\"color: rgb(13, 41, 63); text-align: justify;\">In Joomla le classi che implementano il pattern MVC sono:<\/div>\n<div style=\"color: rgb(13, 41, 63); text-align: justify;\">\n<ul style=\"color: #143c5d;\">\n<li>JModel<\/li>\n<li>JView<\/li>\n<li>JController<\/li>\n<\/ul>\n<\/div>\n<p style=\"color: rgb(13, 41, 63); text-align: justify;\">Nel nostro caso il compito del componente di back-end sar\u00e0 quello di gestire i parametri di configurazione del servizio chat, pertanto realizzeremo i seguenti moduli software:<\/p>\n<ul style=\"color: rgb(20, 60, 93); text-align: justify;\">\n<li>un componente Model che offre i servizi di lettura e scrittura sulla tabella descritta nel precedente articolo<\/li>\n<li>un componente View che presenta il dato all&#8217;utente<\/li>\n<li>un componente Controller responsabile di gestire il modello di navigazione e le operazioni richieste dall&#8217;utente<\/li>\n<\/ul>\n<p style=\"color: rgb(13, 41, 63); text-align: justify;\">Per ogni componente Joomla definisce due entrypoint, uno per la parte pubblica del sito e uno per la parte di amministrazione. Per il componente di amministrazione Joomla definisce entry point un file chiamato componentname.php, disponibile nel path administrator\/components\/com_componentname\/componentname.php.<\/p>\n<p style=\"color: rgb(13, 41, 63); text-align: justify;\">Nel nostro progetto l&#8217;entry point \u00e8 il file administrator\/components\/com_liveassistant\/liveassistant.php.<\/p>\n<p style=\"color: rgb(13, 41, 63); text-align: justify;\">All&#8217;interno di tale file \u00e8 presente la regola di definizione del controller<\/p>\n<pre class=\"lang:default decode:true\">&lt;?php\r\ndefined('_JEXEC') or die('Restricted access');\r\njimport('joomla.application.component.controller');\r\n$controller = JController::getInstance('LiveAssistant');\r\n$controller-&gt;execute( JRequest::getCmd('task') );\r\n$controller-&gt;redirect();<\/pre>\n<p>La prima chiamata impedisce l&#8217;accesso diretto al file, le chiamate successive definiscono il controller e la regola di redirect in base al parametro task. Joomla cerch\u00e0 la definizione del controller in un file controller.php presente nella stessa directory dell&#8217;entry point. In tale directory viene definita la classe LiveAssistantController che estende JController<\/p>\n<pre class=\"lang:default decode:true \">&lt;?php\r\ndefined('_JEXEC') or die('Restricted access');\r\njimport('joomla.application.component.controller');\r\nclass LiveAssistantController extends JController { \u00a0 \u00a0}<\/pre>\n<p>In assenza di un task specifico il controller invocher\u00e0 il metodo display, in modo da invocare la view responsabile della visualizzazione del dato. Joomla cerca le view disponibili nel path\u00a0component\/com_[component_name]\/views\/[name of view]\/, nel nostro caso component\/com_liveassistant\/views\/liveassistant\/. Le view sono definite in file\u00a0view.[view_mode].php, dove il view_mode indica il formato della view, nel nostro caso html.<\/p>\n<p style=\"color: rgb(13, 41, 63); text-align: justify;\">La nostra view contiene il seguente testo<\/p>\n<pre class=\"lang:default decode:true \">&lt;?php\r\ndefined('_JEXEC') or die('Restricted access');\r\njimport( 'joomla.application.component.view');\r\nclass LiveAssistantViewLiveAssistant extends JView\r\n{\r\nfunction display($tpl = null)\r\n{\r\n$this-&gt;addToolBar();\r\n$this-&gt;setDocument();\r\n$jinput = JFactory::getApplication()-&gt;input;\r\n$task = $jinput-&gt;get('task', '', '');\r\nif ($task == 'save') {\r\n$model = $this-&gt;getModel();\r\n$model-&gt;saveItem($jinput);\r\n}\r\n$this-&gt;item = $this-&gt;get('Item');\r\nparent::display($tpl);\r\n}\r\nprotected function addToolBar()\r\n{\r\nJToolBarHelper::title(JText::_('COM_LIVEASSISTANT_MANAGER'), \r\n'liveassistant');\r\n}\r\nprotected function setDocument()\r\n{\r\n$document = JFactory::getDocument();\r\n$document-&gt;setTitle(JText::_('COM_LIVEASSISTANT_ADMINISTRATION'));\r\n}\r\n}<\/pre>\n<p>La View \u00e8 responsabile di costruire la pagina, in particolare essa aggiunge il titolo alla pagina e alla toolbar e gestisce l&#8217;aggiornamento dei parametri della chat. Essa invoca il file tmpl\/default.php responsabile di mostrare i dati e i pulsanti per aggiornare i dati. Inoltre nella view sono visibili le chiamata al model. Come si pu\u00f2 vedere il model non \u00e8 espressamente indicato, ma \u00e8 una classe vhe viene inizializzata cercano la classe LiveAssistantModelLiveAssistant che estende la classe JModel. Tale classe fornisce i metodi di lettura e scrittura al db, come si pu\u00f2 vedere nell&#8217;estratto<\/p>\n<pre class=\"lang:default decode:true \">&lt;?php\r\ndefined('_JEXEC') or die;\r\njimport('joomla.application.component.model');\r\nclass LiveAssistantModelLiveAssistant extends JModel\r\n{\r\nfunction __construct()\r\n{\r\nparent::__construct();\r\n}\r\nfunction getItem()\r\n{\r\nif (empty( $this-&gt;_data )) {\r\n$query = ' SELECT * FROM #__liveassistant_params ';\r\n$this-&gt;_db-&gt;setQuery( $query );\r\n$this-&gt;_data = $this-&gt;_db-&gt;loadObject();\r\n}\r\nreturn $this-&gt;_data;\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<p style=\"color: rgb(13, 41, 63); text-align: justify;\">Nel prossimo articolo realizzeremo la componente di front-end.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nell&#8217;articolo di oggi realizzeremo il backend del nostro componente, usando il pattern\u00a0MVC\u00a0(Model View Controller). Per chi non lo conoscesse si tratta di uno dei pattern pi\u00f9 usati nello sviluppo software, che prevede la separazione della logica di business dal modello di rappresentazione dei dati. Nel pattern MVC sono presenti le seguenti 3 componenti software: model &hellip; <a href=\"http:\/\/www.valeriofinazzo.it\/wordpress\/2014\/06\/joomla-tutorial-creare-un-component-backend\/\" class=\"more-link\">Continua la lettura di <span class=\"screen-reader-text\">JOOMLA &#8211; TUTORIAL &#8211; CREARE UN COMPONENT &#8211; BACKEND<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[30],"tags":[31],"_links":{"self":[{"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/posts\/200"}],"collection":[{"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/comments?post=200"}],"version-history":[{"count":1,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/posts\/200\/revisions"}],"predecessor-version":[{"id":201,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/posts\/200\/revisions\/201"}],"wp:attachment":[{"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/media?parent=200"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/categories?post=200"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/tags?post=200"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}