Creare componenti per Joomla! 1.5 - Gestire il back end - parte 1

Creare estensioni per Joomla! 1.5 - Gestire il back end - parte 1 visualizzare i records

Scrivere estensioni con Joomla! Component Builder è abbastanza agevole dato che è il programma che si preoccupa di scrivere lo scheletro per models, views e per i templates destinati all'editing. Resta da definire la business logic con cui elaborare i dati, ma questo è vostro compito.

 

Attenzione: questa pagina non è aggiornata!
I contenuti qui presenti si riferiscono alla versione per J1.5 di  Joomla! component builder, i contenuti aggiornati sono disponibili in lingua inglese: Create Joomla! 3.x extensions - Manage the Back End- Part 1Create Joomla! extensions - Manage the Back End- Part 2 .

State cercando uno sviluppatore per realizzare un componente?

Questa pagina spiega come usare il nostro programma per generare componenti, ma, se siete alla ricerca di qualcuno che possa convertire in codice una vostra idea, contattateci, creeremo per voi il componente desiderato. È uno dei nostri servizi professionali

 

 Funzionamento dei componenti per Joomla! 1.5

Ogni componente di Joomla! ha, sia che si parli di front end, sia che si parli di back end, un entry point. Questi è un file php, con nome equale al nome del componente, cui sono inviate tutte le richieste che debbono essere gestite dal componente. Questo file si occuperà poi di definire quale view e quale controller caricare.

Lato Back - End

A lato back end il lavoro base dell'entry point è un filo più difficoltoso che a lato front-end; infatti, dato che l'accesso non avviene tramite una voce di menù, è necessario definire il controller/view di default.

Il file generato da Joomla Component builder contiene un die() per ricordarci ove intervenire

...  [ccat.php]
die('Insert the default view in ' . __FILE__ . ' after line n. ' . __LINE__);
// define default controller & view...
if(!JRequest::getWord('controller')){
JRequest::setVar( 'controller', '***' ); // insert here!!
JRequest::setVar( 'view', JRequest::getWord('controller') );
}else{
JRequest::setVar( 'view', JRequest::getWord('controller') );
}

Al posto dei tre asterischi dovremo inserire il mome del controller di default, ma qual è il controller di default?
Ovviamente la risposta varia da progetto a progetto, di base è l'informazone che modificate più di frequente, nel nostro caso le marche (ccatbrands). Ricordatevi di eliminare o commentare la linea con die().

Notate che il controller di base fa sempre riferimento al record set, mai al singolo record (ovvero fa apparire la lista).

Il file ccat.php, come si vede dal codice, carica poi il controller specificato, il quale contiene il codice necessario all'esecuzione dei seguenti compiti ($task):

  • edit(): richiama il controllorer del singolo recor per l'editing
  • save(): salva le informazioni del singolo record [da eliminare nella prossima release]
  • remove(): cancella i singoli records [da eliminare nella prossima release]
  • publish(): pubblica i singoli records
  • unpublish(): nasconde i singoli records
  • orderup(): muove il record verso l'alto (richiede il model ccatbrand, per agire sul singolo record)
  • orderdown(): muove il record verso il basso (richiede il model ccatbrand, per agire sul singolo record)
  • saveorder(): salva l'ordine di visualizzazione dei records (richiede il model ccatbrand, per agire sul singolo record)

Il con l'inclusione del controller viene richiamato il costruttore ed il metodo display() della classe base JController; il framework di Joomla! caricherà i seguenti files:

  • /administrator/components/com_ccat/views/ccatbrands/view.html.php
  • /administrator/components/com_ccat/views/ccatbrands/tmpl/default.php
  • /administrator/components/com_ccat/models/ccatbrands.php
  • /administrator/components/com_ccat/tables/ccatbrand.php

Un passo indietro:

  1. quando viene eseguita l'istruzione $controller->execute( JRequest::getVar('task')) nel file /administrator/components/com_ccat/ccat.php
  2. viene richiamato il medoto display() del file /administrator/components/com_ccat/controllers/ccatbrands.php
  3. questi a sua volta richiama il metodo display() della classe CcatViewCcatbrands in /administrator/components/com_ccat/views/ccatbrands/view.html.php

All'interno di quest'ultimo file abbiamo, in mezzo ad altre, le seguenti linee di codice:

function display($tpl = null){
...
JToolBarHelper::[...]
...
$data = $this->get( 'Data' );
$this->assignRef( 'rows',$data );
...
parent::display($tpl);
}

L'intestazione del metodo display prevede il parametro opzionale $tpl, Attenzione! non è il nome del template da caricare, ma il nome del subtemplate!

  1. Le istruzioni JToolBarHelper::[...] servono a generare la bottoniera per le funzioni di ordinamento, di editing e di creazione di nuovi records.
  2. L'istruzione $data = $this->get( 'Data' ) richiama il metodo getData() all'interno del file /components/com_ccat/models/ccatbrands.php (classe CcatModelCcatbrands), il quale metodo effettua la query sul db e restitusce un recordset come array di oggetti in standard Joomla!.
  3. L'istruzione $this->assignRef( 'rows',$data ) crea la proprietà $this->data all'interno della classe CcatViewCcatbrands in modo che questi dati siano facilmente accessibili dal template.
  4. L'istruzione parent::display($tpl) richiama ed esegue il file /components/com_ccat/views/ccatbrands/tmpl/default.php che visualizza il contenuto del recordset.

All'interno del file /components/com_ccat/views/ccatbrands/tmpl/default.php troverete due aree marcate dai delimitatori "<!-- Joomla! Component Builder - begin code -->" e "<!-- Joomla! Component Builder - end code -->"; queste sono posizionate nell'header della tabella ed all'interno della stessa. In queste aree Joomla Component Builder inserisce i campi recuperati dalla tabella del db (#__ccat_brands) perchè siano visualizzati: rimuovete quelli che non sono di interesse in questa View.

Sempre all'interno del file /components/com_ccat/views/ccatbrands/tmpl/default.php troverete un codice simile a questo:

 
<?php
$k = 0;
for ($i=0, $n=count( $this->rows ); $i < $n; $i++){
$row = &$this->rows[$i];
$checked = JHTML::_('grid.id', $i, $row->id );
$published= JHTML::_('grid.published', $row, $i );
$link = JRoute::_( 'index.php?option=com_mac&controller=ccatbrands&task=edit&cid[]='. $row->id );
?>
[... codice html per la visualizzazione della adminList, ovvero tutti i record della tabella]
<?php
$k = 1 - $k;
}
?>

Il loop for itera tutti i record recuperati dal metodo getData(), presente nel model, ed assegnati alla proprietà $this->rows dalla view con assignRef(), le righe seguenti di codice servono a creare gli oggetti standard della adminList di Joomla (checkbox, icona pubblicazione, et cetera)

L'istruzione $link = JRoute::_( "..." ) crea l'url per editare il singolo record, nel prossimo articolo vedremo come fare ciò.

 

Commenti   

0 #4 ospite 2011-09-27 12:27
Mi dispiace insistere, confermo laversione installa 1.5.2 econfermo ilfatto che generato il componente, installato correttamente, linkandolo dal menu di joomla 1.7 componenti mi restituisce l'errore: 500 - Si è verificato un errore.
View non trovato [name, type, prefix]: emxjbibliolist, html, mcmView, ed il link nel menù componenti scompare. Ti ringrasin d'ora se potraifornirmi qualche soluzione al fine di poter testare meglio iltuo applicativo. Ciao
Citazione
0 #3 ospite 2011-09-25 11:25
Innanzitutto complimenti peri lavoro svolto. ti scrivo in quanto non riesco a capire cosa dovrei inserire al posto dei '***' per visulaizzare le view. ho installato la versione 1.5.2 per generare componenti anche per versione joomla 1.6. Ti ringrazio per i suggerimenti
Citazione
-1 #2 Guest 2010-02-11 09:16
A scusami ... me la sono dimenticata :lol:
Citazione
+1 #1 Guest 2010-02-10 14:33
Ciao

Sono abbastanza nuovo nel campo dello sviluppo di moduli per joomla.

Ho provato con il tuo software a sviluppare un semplice componente che mostra un messaggio sulla home page.

Quando però metto il nome del controller di defaulth nel file administrator/[ safename].php e poi ricarico la pagina, mi viene dato il seguente errore:

500 - An error has occurred.

View not found [name, type, prefix]: PortalMessages,html,portalmsgView

Potresti darmi un consiglio su come risolverlo?

Grazie Mille per tutto lo splendido lavoro!!!

==== edited
ma se non metti la mail come faccio?
Citazione

Aggiungi commento

Please note: URL in text are not linked and user's site address is only for internal use and is not published.

Comments are human checked. All spam will be removed, so don't waste your time and, especially, mine!

Codice di sicurezza
Aggiorna