Joomla! 1.5 generatore di componenti
Creare componenti per Joomla 1.5! è decisamente più complicato che farlo per la versione 1.0 dato che è necessario scrivere parecchio codice per controllers, models, views, tables e per i templates delle view.
Tuttavia buona parte di questo codice è giusto una scrittura meccanica... e allora perchè riscriverlo ogni volta?
Questo è il motivo per cui ho scritto questo generatore di componenti per Joomla! 1.5, per me è stato utile, spero lo sia anche per voi.
Creare componenti per Joomla! 1.5
RILASCIATA LA VERSIONE 1.5.0
CARATTERISTICHE
- genera componenti completamente funzionanti
- recupera i dati necessari direttamente dal database mySql
- auto determina la chiave primaria
- crea controllers, models, views, tables e templates
- crea i files necessari per l'editing dei singoli record e per il listing delle tabelle
- genera componenti installabili
- si basa su template php personalizzabili per generare i files di Joomla
- i template sono basati sul componente com_hello in modo da poter far riferimento alla documentazione ufficiale di Joomla!
REQUISITI
- runtime di .NET 2.0+ o Mono 2.4.3+
- MySql Connector-Net 6.2.3, scaricabile da http://dev.mysql.com/downloads/connector/net/
- un db mySql accessibile via tcp/ip con installate le tabelle contenenti i dati per la gestione dei quali si vuole creare il componente
- un po' di pazienza dato che è ancora in beta...
Versioni precedenti la 1.5.0
- perchè siano creati componenti funzionanti, le tabelle devo avere questi tre campi (default di Joomla!): id (chiave primaria), published e ordering. Se questi campi non esistono dovranno essere editati anche i sorgenti di table e controllers.
Avviso di sicurezza
Il codice di "front end" generato dalle versioni di programma precedenti alla 1.5 può subire attacchi di tipo "lfi" o "sql injection". Difficilmente avrete usato il codice di "front end" così come è, ma nel caso queste sono le modifiche da apportare:
feEntryPoint.php
linea #29 (LFI vunerability) sostituire con
if($controller = JRequest::getWord('controller')) {
feModel.php
linea #40 (SQL Injection vunerability) sostituire con
$id = JRequest::getInt('id', 0);
ISTRUZIONI
1.
scaricate il pacchetto: Joomla! 1.5 generatore di componenti e decompattatelo in una cartella.
2.
modificate JoomlaComponentBuilder.exe.config (marcoComponentMaker.exe.config nelle versioni successive alla 1.1) ed aggiungete il vostro server mySql nella sezione delle connectionStrings
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="testServer" providerName="MySql.Data.MySqlClient" connectionString="Server=192.168.10.76;Database=vmtest1;Uid=root;Pwd=;"/>
</connectionStrings>
</configuration>
dovrete inserire:
- indirizzo ip o mnemonico del server (Server)
- nome del database da usare (Database)
- nome utente (Uid) [deve poter vedere le tabelle necessarie al componente]
- password (Pwd)
Nota on Mysql connector 6.2.2:
Questa versione del connettore presenta un bug: l'inserimento di una chiave senza il corrispettivo valore genera un errore a runtime; pertanto, qualora vogliate accedere al DB senza password, dovrete ometterne,oltre il valore, anche la dichiarazione.
la connection string diviene pertanto, da:
<add name="testServer" providerName="MySql.Data.MySqlClient" connectionString="Server=192.168.10.76;Database=vmtest1;Uid=root;Pwd=;"/>
a:
<add name="testServer" providerName="MySql.Data.MySqlClient" connectionString="Server=192.168.10.76;Database=vmtest1;Uid=root;/>
(i valori per ip e database sono solo esempi)
Driver MySQL Connector più aggiornati: (dalla v 1.5)
Per usare un driver MySQL più recente di quello con cui è stato compilato il programma aprite il file marcoComponentMaker.exe.config ed individuate la linea con
<bindingRedirect oldVersion="6.2.3.0" newVersion="6.2.3.0"/>
inserite la "build version" del driver come parametro newVersion.
3.
lanciate il programma.

compilate i campi:
- il nome del componente (Component Name)
- il nome (senza _ od altri caratteri strani, usando solo lettere minuscole) da usare in models. controllers... (Safe Name)
- il prefisso delle tabelle usato per l'installazione di Joomla (Prefix Table) [la parte del nome da sostituire con '#__', tipicamente 'jos_']
- il tipo di render per i campi di tipo "text" (Render "text" fields as)
- textarea: default html <textarea>
- rte editor: Joomla! rte editor
- il tipo di render per i campi di tipo "datetime" (Render "datetime" fields as)
- calender: Joomla! js calendar
- string: default html <input>
4.
selezionate il database e poi le tabelle per le quali diovranno essere creati models, controllers e views

compilate i campi:
- Select: selezionate le tabelle che faranno parte del componente
- Single record object handlers name: il nome usato per creare gli oggetti necessari alla gestione dei singoli records della tabella
- Recordset object handlers name: il nome usato per creare gli oggetti necessari alla gestione alla lista dei records della tabella
5.
il programma effettua il parsing del DB per creare il componente per Joomla!

6.
e crea il componente per Joomla! in una sottodirectory nella cartella in cui è stato eseguito il programma (com_[Safe Name])

7.
A questo punto dovrete:
- correggere le form di editing dei dati nelle forms di back-end in com_[Safe Name]/admin/views/[Table Class]/tmpl/default.php
- correggere il javascript di controllo
- rimuove i campi non necessari dalle form di visualizzazione dei record set in com_[Safe Name]/admin/views/[Table Class List]/tmpl/default.php
- disegnare il layout delle views di front end in in com_[Safe Name]/site/views/[Table Class]/tmpl/default.php
- ovviamente aggiungere la logica del componente nel controller ;)
versioni precedenti la 1.5.0:
- aggiungere il routing per indicare la view di default nel back-end (decommentate il codice ed aggiungete il nome del controller e view) in com_[Safe Name]/admin/[Safe Name].php
- in com_[Safe Name]/admin/views/[Table Class]/tmpl/default.php creare le textarea se necessario l'editing di HTML; attualmente sono creati solo input di tipo text che non possono gestire codice HTML; in tale caso deve essere modificata anche la funzione 'store()' nel corrispettivo model per permettere tale tipo di contenuto.
compattate il componente, oppure caricatelo nella directory /tmp, ed installatelo.
8.
fatemi sapere che cosa ne pensate: siate buoni, è ancora in beta ;)
OS supportati
Il programma richiede Microsoft .NET 2.0+ o Mono 2.4.3+ pertanto può essere utilizzato su qualsiasi sistema operativo che supporti uno dei due frameworks:
- windows: XP, Vista, Windows 7, Windows 2003
- linux
- Mac OS X Tiger (10.4), Leopard (10.5), and Snow Leopard (10.6)
Il pacchetto di installazione contiene la libreria Mysql.Data.dll 6.1.2.0 per windows (dalla versione 1.1 la libreria deve essere scaricata a parte), per utilizzare il programma in un altro OS cancellate la libreria ed installate il pacchetto 'Connector-Net 6.2.2' o successivo versione '.Net & Mono (Architecture Independent)' , o successivo, da mysql.com.
Per maggiori dettagli, o per la risoluzione dei problemi di installazione di Mono fate riferimento al supporto di Mono e del vostro sistema operativo.
Lavorare su Ubuntu
istruzioni brevi: Per usare il software su Ubuntu (testato con Ubuntu 10.4) installate i pacchetti 'monodevelop' e 'monodevelop-database'. Dopo di che scaricate il pacchetto 'Connector-Net 6.2.2' o successivo versione '.Net & Mono (Architecture Independent)' da mysql.com. Decomprimete il pacchetto ed installate la libreria nel GAC, da root, con
gacutil -i [pathToLib/]mysql.data.dll
dopo di che copiate mysql.data.dll in /usr/lib/mono/2.0/
Bigham, che ringrazio, mi segnala anche che a volte è necessario rinominare il file mysq.data.dll in MySql.Data.dll (http://forums.mysql.com/read.php?47,367529,367529).
Nota importante: per maggiori dettagli, o per la risoluzione dei problemi di installazione di Mono fate riferimento al supporto di Mono e del vostro sistema operativo.
History:
Pianificazione per le future versioni (nel futuro, ...ma seriamente)
- fine supporto a php4 (class constructor e access modifiers per php5)
- nessun uso di global vars ($mainframe, $option): per iniziare a pensare a Joomla! 1.6
- xml metadata per le voci di menu
- funzioni di editing di base da front end
- creazione dei files ini di traduzione
12 Giugno 2010 - v 1.5.0.0
- Non vi sono più campi obbligatori nella tabella (id, ordering, published)
- Il riconoscimento automatico della chiave primaria (non è necessario che ci sia `id`, ma deve essere numerico)
- Generazione di menu per la navigazione tra i controller, non è più necessario aggiungere manualmente la navigazione
- Listing delle tabelle con l'elenco campi ordinabile & con filtro (back end)
- Rendering automatico in base al tipo di campo DB (input / textarea / RTE / calendario)
- Convalida dell'input, in base al tipo di campo DB, prima di salvare i dati
- Gestione del file di configurazione per il componente generato
- Maggiori controlli di sicurezza
13 Aprile 2010
- adeguamento a mysql connector 6.2.3
5 Aprile 2010
- aggiunti controlli sui nomi degli oggetti e sulla struttura del db
- aggiunta verifica dei campi obbligatori
- aggiunto ordinamento e ricerca nell'amministrazione
- miglioramenti nel codice php
13 Febbraio 2010
- nessuna nuova release; ma testato il funzionamento su Linux e Mac OS X!
17 dicembre 2009
- fe: aggiunto esempio di uso della variabile $link per gli href
- be: reso java script funzionante anche senza editing, viene visualizzato un alert per ricordare di modificarlo
- be: inserita indicazione sulla posizione in cui specificare la view di default (ricordarsi di commentare il die() ;)
- be: aggiunto esempio di uso della variabile $link per gli href
- corretto bug nell'interazione con mysql 5.1 per windows che non [ermetteva di recuperare la struttura della tabella per install.sql
- aggiunta la possibilità di specificare i nomi anche per la gestione dei record set (evita plurali quali categoriess o categorys;)
- aggiunto il controllo della sequenza di attivazione delle tab
10 dicembre 2009
- be: spostato textbox ordinamento prima dei cursori
- be: spostato inclusione della paginazione fuori dal loop
- be: corretto bug che eliminava i campi ordering e published
- be: aggiunta indentazione in template view
- be: table, corretto il commento con le barre \\
- be: model,corretto l'inizializzazione del nuovo oggetto recuperando i valori da table
- be: view.html.php, corretto controllo nuova item $hello anzichè $data
- be: view template, aggiuntoscheletro javascript per check
- be: model, inseriti i metodi per ordinare i records
- be: controllers, inserita la specifica del controller in tutti i redirect all'entry point
20 novembre 2009
- release iniziale
Errori Noti
- 1.5.0 manca php dopo <? nel rendering del calendario
- Errore nel prefisso delle tabelle in install.sql. Verrà corretto nella prossima versione.
CREATE TABLE IF NOT EXISTS `jos_mytab`
deve essere corretto in
CREATE TABLE IF NOT EXISTS `#__mytab
Un ringraziamento a ZnakZorro
DOWLOAD:
****
Add to your favorite Bookmarking / Aggiungi ai tuoi segnalibri prferiti
Ultimo aggiornamento (Giovedì 08 Luglio 2010 05:34)