COM_HELLOWORLD_PART1 Nel manifest la presenza del tag <version> permette di gestire le versioni incrementali di aggiornamento anche grazie all uso del tag <update>. Le installazioni successive del componente quindi non andranno ad eseguire lo script di creazione del db ma soltanto gli eventuali script di aggiornamento della banca dati. Notare che il file.php alla fine può contenere qualsiasi cosa perché Joomla delega la responsabilità della scrittura corretta del codice al programmatore. Questa versione non contiene voci di menu per il frontend. COM_HELLOWORLD_PART2 Modificato il file helloworld.xml cambiando la versione del componente da 0.0.1 a 0.0.2. Questo tipo di modifica viene data per scontata da qui in avanti. Inoltre si introducono i riferimenti folder dedicati al controller e alle views. Creata la classe site/controller.php aggiugendo semplicemente la sua definizione class HelloWorldController extends JController{} Modificata la classe site/helloworld.php aggiungendo i metodi per instanziare il controller, recuperare il task dalla Request e redirigere alla vista relativa In Joomla il plurale ed il singolare hanno la loro rilevanza. E infatti cruciale l utilizzo del singolare e plurale (aggiungendo la s) per far capire al CMS che ci stiamo riferendo a liste di oggetti oppure al dettaglio di uno di questi. COM_HELLOWORLD_PART3 creato il file site/views/helloworld/tmpl/default.xml introducendo le chiamate necessarie alla creazione di una voce di menu, dedicata alla vista specifica del nostro componente. COM_HELLOWORLD_PART4 modificato il file helloworld.xml aggiugendo il riferimento folder dedicato ai models lato site. modificata la classe site/helloworld/view.html.php aggiungendo la parte di codice utile a recuperare il messaggio dal modello, con il comando $this >msg = $this >get('msg'); Se le convenzioni sui nomi vengono rispettate, se si utilizza come nome della
classe Model nomecomponentemodelnomevista utilizzando un file nomecomponente.php, tutto questo è gratuito e non richiede nessuno sviluppo di codice ulteriore. COM_HELLOWORLD_PART5 modificata la classe site/models/helloworld.php aggiugendo un blocco di codice che si occupa di assegnare alla variabile $this >msg un valore oppure un altro a seconda del parametro JRequest::getInt( id ) modificato il file site/views/helloworld/tmpl/default.xml aggiugendo il parametro Id alle opzioni della voce di menu. In questo modo l utente, quando crea la voce di menu, può impostare il valore di Id e condizionare l output così come descritto al punto precedente Questo meccanismo funziona grazie alla classe JFormField i cui possibili attributi sono disponibili al seguente indirizzo (http://docs.joomla.org/form_field). Con un parametro di name= id associato ad un fieldset= request, con questa classe, è possibile passare il parametro selezionato dall utente direttamente nella request (JRequest) Questo è particolarmente utile perché permette di sfruttare tutta la libreria che si preoccupa di validare l input e quindi il controllo dei tipi (es. $id = JRequest::getInt('id');). Inoltre dalla versione 2.5 in poi è possibile leggere in modo dinamico dal db in fase di generazione delle opzioni selezionabili da parte dell utente. Mentre prima si potevano soltanto cablare nel file xml. COM_HELLOWORLD_PART6 (1 DI 2) creati i file admin/sql/install.mysql.utf8.sql e admin/sql/uninstall.mysql.utf8.sql che servono rispettivamente a specificare gli script di creazione e cancellazione delle tabelle MySql necessarie al nostro componente. Da qui in poi infatti il messaggio da mostrare nella vista verrà letto direttamente dal db. creato il file admin/sql/updates/mysql/0.0.6.sql che contiene esattamente ciò che contiene il file di cui al punto precedente. Questo perché per far funzionare il sistema degli aggiornamenti automatici di Joomla è necessario, anche la prima volta, creare un file vuoto che si chiama esattamente come il primo numero di versione dichiarato nel manifest iniziale (es.0.0.1.sql). La prima volta che verranno create delle tabelle esso conterrà gli stessi script del file install.mysql.utf8.sql e nei file di versione successiva verranno aggiunti gli script MySql per l aggiornamento vero e proprio. Di solito tramite alter table
COM_HELLOWORLD_PART6 (2 DI 2) modificato il file helloworld.xml aggiungendo i tag <install> e <uninstall> per la gestione del DB modificato il file site/models/helloworld.php cambiando il sistema con cui si prepara il messaggio da consegnare alla vista, per la successiva visualizzazione. In questo caso con il parametro Id letto dalla Request si effettua una query sul DB e si forniscono gli output disponibili per la vista. $id = JRequest::getInt('id'); // Get a TableHelloWorld instance $table = $this >gettable(); // Load the message $table >load($id); // Assign the message $this >msg = $table >greeting; modificato il file site/views/helloworld/tmpl/default.xml aggiungendo l attributo addfieldpath="/administrator/components/com_helloworld/models/fields" in modo da recuperare dinamicamente, leggendoli dal db, i possibili valori da mostrare in fase di creazione voce di menu COM_HELLOWORLD_PART7 aggiunta la classe admin/controller.php in cui si definiscono le operazioni del controller specifico HelloworldController. In particolare setta la vista di default se essa non viene specificata. modifica della classe admin/helloworld.php che: include il controller nativo dalla libreria Joomla istanzia il controller HelloWorld esegue il task richiesto dal browser effettua la redirect aggiunge la classe admin/models/helloworlds.php che implementa la chiamata al db effettua la query per ottenere la lista dei greeting COM_HELLOWORLD_PART8 Creati i file admin/views/helloworlds/tmpl/default_body.php, default_head.php, default.php che si preoccupano rispettivamente di implementare la parte centrale della vista dei risultati, la parte di intestazione tabella degli stessi ed infine la parte di entry point, in cui vengono aggregate le altre due.
modificato il nome del componente da Hello World! a COM_HELLOWORLD per la predisposizione al multilingua COM_HELLOWORLD_PART9 Aggiunto il file admin/language/en GB/en GB.com_helloworld.ini che conterrà le coppie NOMEMAIUSCOLO= Traduzione in lingua Aggiunto il file admin/models/helloworld.php dove viene inplementata la logica di caricamento del form di editing dell oggetto db helloworld. Modifica al file admin/views/helloworlds/tmpl/default_body.php. Aggiunta la funzione JRoute per attribuire un link al dettaglio del greeting Modifica al file admin/views/helloworlds/tmpl/default.php. Aggiunti parametri hidden task, boxchecked per la gestione della selezione multipla con toolbar button, e form.token per la sicurezza da code injection. Aggiunta alla classe admin/vews/helloworlds/view.html.php la riga $this >addtoolbar(); per far vedere la toolbar con i tasti funzione in alto a destra. COM_HELLOWORLD_PART10 aggiunti nel file admin/helloworld.php i comandi: // Set some global property $document = JFactory::getDocument(); $document >addstyledeclaration('.icon 48 helloworld {background image: url(../media/com_helloworld/images/tux 48x48.png);}'); per l aggiunta dell immagine pinguino al pannello di controllo Ogni dichiarazione aggiunta in questa classe avrà visibilità globale all interno del componente. effettuate modifiche al file admin/views/helloworlds/view.html.php e admin/views/helloworld/view.html.php Aggiunta la riga JToolBarHelper::title($isNew? JText::_('COM_HELLOWORLD_MANAGER_HELLOWORLD_NEW') : JText::_('COM_HELLOWORLD_MANAGER_HELLOWORLD_EDIT'), 'helloworld'); al metodo addtoolbar() in modo da mostrare titolo e icona definita nello stile COM_HELLOWORLD_PART11 aggiunte nel file admin/models/forms/helloworld.xml in corrispondenza della definizione del parametro greeting le righe seguenti:
class="inputbox validate greeting" validate="greeting" required="true" aggiunto inoltre allo stesso file il parametro seguente al tag form <form addrulepath="/administrator/components/com_helloworld/models/rules"> Creato inoltre il file admin/models/forms/helloworld.js con il seguente contenuto window.addevent('domready', function() { document.formvalidator.sethandler('greeting', function (value) { regex=/^[^0 9]+$/; return regex.test(value); }); }); Tutto questo al fine di validare l input del campo greeting creato il admin/views/helloworld/submitbutton.js che si occupa di controllare il submit button e di restituire un errore utilizzando il metodo per la traduzione in multilingua aggiunte le righe necessarie al file admin/views/helloworld/view.html.php per la gestione del javascript Tutto ciò viene realizzato in questo modo per aumentare la leggibilità del codice e anche per migliorare le performance dei browser. Infatti caricare un file javascript all inizio evita problemi di interruzione di rendering a mezza pagina qualora ci fossero degli errori oppure rallentamenti NOTA: VALIDAZIONE DA FARE SIA CLIENT SIDE CHE SERVER SIDE Vengono spesso utilizzate le espressioni regolari per il form validator. Per saperne di più andare su http://regexlib.com Es: /^[^0 9]+$/: testa se la stringa contiene numeri. / = apre e chiude l espressione ^ = inizio stringa $ = fine stringa [ ] = definisce un set 0 9 = da 0 a 9 [^ ] = ^ usato all interno di un set vuol dire negare il valore che segue L uso delle espressioni regolari è comodo poiché la stessa stringa di valutazione può essere utilizzata sia client side che server side. Questo è reso possibile dalla universalità del linguaggio Javascript che è interpretato sia dai browser che dai linguaggi di programmazione più diffusi.
COM_HELLOWORLD_PART12 creato il file admin/access.xml per la gestione dell ACL modificato il file admin/controller.php per la gestione della sotto voce di menu HelloWorldHelper::addSubmenu('messages'); modificato il file admin/helloworld.php per il register della classe HelloWorldHelper attraverso la JLoader::register('HelloWorldHelper', dirname( FILE ). DS. 'helpers'. DS. 'helloworld.php'); modificato il file admin/sql/install.mysql.utf8.sql per l aggiunta del campo catid alla tabella # helloworld creato il file admin/sql/updates/mysql/0.0.12.sql inserendo l ALTER TABLE necessaria all aggiunta di cui al punto precedente modificato il file admin/models/fields/helloworld.php per l aggiunta della left join con la tabella categorie COM_HELLOWORLD_PART13 (1 DI 2) creato il file admin/config.xml in cui vengono inseriti i parametri da mostrare in corrispondenza del bottone Opzioni modificato il file admin/models/forms/helloworld.xml aggiungendo la distinzione tra fieldset di tipo details e fieldset di tipo params in modo da mostrare il form di inserimento dati suddiviso in due colonne verticali affiancate modificato il file admin/models/helloworld.php aggiungendo il metodo getscript() con cui si recupera il file administrator/components/com_helloworld/models/forms/helloworld.js modificati i file admin/sql/install.mysql.utf8.sql e admin/sql/updates/mysql/0.0.13.sql entrambi per la gestione del campo aggiuntivo params modificato il file admin/tables/helloworld.php aggiungendo il metodo bind() che specializza quello della superclasse convertendo tutti i parametri in stringhe. modificato il file admin/views/helloworld/tmpl/edit.php aggiungendo il codice necessario per la gestione dell edit in due colonne. modificato il file admin/views/helloworlds/view.html.php aggiungendo la chiamata a JToolBarHelper::preferences('com_helloworld') attraverso cui si mostra il tasto Opzioni in alto a destra. COM_HELLOWORLD_PART13 (2 DI 2)
Modificato il file site/models/helloworld.php aggiungendo i metodi: populatestate() getitem() necessari per mostrare il livello di dettaglio anche nel lato Frontend. Modificato il file site/views/view.html.php aggiungendo la chiamata all oggetto già preparato dal modello $this >item = $this >get('item'); Modificato il file site/views/tmpl/default.php aggiugendo la stampa dei messaggi così come preparati dalla vista, attraverso questa chiamata <h1><?php echo $this >item >greeting.(($this >item >category and $this >item >params >get('show_category'))? (' ('.$this >item >category.')') : '');?></h1> COM_HELLOWORLD_PART14 (1 DI 2) modificato il file admin/access.xml aggiungendo i campi specializzati per la gestione ACL del componente com_helloworld mediante il pannello Opzioni, così come avviene per tutti gli altri componenti. modificato il file admin/config.xml aggiungendo i campi necessari allo scopo di cui al punto precedente. modificato il file admin/helloworld.php aggiungendo il codice per il controllo dell ACL su funzione specifica. // Access check. if (!JFactory::getUser() >authorise('core.manage', 'com_helloworld')) { return JError::raiseWarning(404, JText::_('JERROR_ALERTNOAUTHOR')); } modificato il file admin/helpers/helloworld.php aggiungendo il metodo getactions() necessario alla lettura dei parametri di configurazione dell ACL modificato il file admin/models/helloworld.php aggiungendo il metodo allowedit() necessario al controllo della sola funzionalità edit se permessa o meno all utente specifico. COM_HELLOWORLD_PART14 (2 DI 2)
modificato il file admin/tables/helloworld.php aggiungendo metodi per il recupero di specifici campi dal record corrente. protected function _getassettitle() { return $this >greeting; } modificato il file admin/views/helloworld/view.html.php aggiungendo nel metodo addtoolbar() di dettaglio il controllo se i task elencati debbano essere o meno abilitati all utente specifico modificato il file admin/views/helloworlds/view.html.php aggiungendo nel metodo addtoolbar() di lista il controllo se i task elencati debbano essere o meno abilitati all utente specifico COM_HELLOWORLD_PART15 creato il file admin/script.php nel quale vengono previste tutte le operazioni da fare in alcuni momenti della fase di installazione/aggiornamento del componente. I metodi in esso contenuti sono: install() da eseguire al momento dell installazione uninstall() da eseguire al momento della disinstallazione update() da eseguire ad ogni aggiornamento preflight() da eseguire prima di ogni (install, update or discover_install) postflight() eseguire dopo ogni (install, update or discover_install) In questo caso ogni metodo stampa semplicemente un testo modificato il file admin/language/en GB/en GB.com_helloworld.sys.ini aggiugendo la traduzione per i messaggi di alert relativi allo script di cui sopra