PhpCodeWizard ver. 2.0 Manuale di PhpCodeWizard di Antonio LAMORGESE www.phpcodewizard.it [email protected] pubblicato il 08-11-2015 PhpCodeWizard è un open source framework usato per creare applicazioni web di gestione dati. Basato su ADODB ed è rilasciato sotto Apache License. 1/14 PhpCodeWizard ver. 2.0 Installazione: PhpCodeWizard in Bundle: Alla pagina “Download” della home page cliccate sul link ”InstantRails (Server Web) + PhpCodeWizard in Bundle”. Decomprimere in c:\InstantRails. Eseguire in c:\InstantRails il file InstantRails.exe ed apri il browser al seguente indirizzo: http://localhost:8001/phpcodewizard. Procedura manuale di installazione: Alla pagina “Download” della home page troverete 4 file: 1. phpcodewizard.zip 2. gestione_del_personale.zip 3. admin.zip 4. manuale_phpcodewizard.pdf Una volta scaricati tutti e quattro, installate easyphp come spiegato alla pagina ”provalo in locale”, a tale pagina troverete inoltre il link per scaricare easyphp, per configurarlo e per lanciarlo, tutto questo richiederà solo alcuni minuti. A questo punto, con l’installazione di easyphp, abbiamo tutto il necessario per poter eseguire phpcodewizard e vederlo in funzione, ma prima occorre estrarre i 4 file in questo modo: 1. Se avete già lanciato easyphp occorre fermarlo, quindi cliccando con il tasto destro del mouse sulla “E” lampeggiante in basso a destra nella barra delle applicazioni, fermare e chiudere easyphp (vedi sotto). 2. Estrarre phpcodewizard nella cartella easyphp1-8\www\. Dopo l’estrazione del file in easyphp1-8\www sarà presente la cartella \phpcodewizard con i relativi file di sistema. (Spiegati alla pagina “architettura della home page). 2/14 PhpCodeWizard ver. 2.0 3. Sotto la cartella easyphp1-8, troverete la cartella …\mysql\Data, dentro la cartella \data estraete: gestione_del_personale.zip e admin.zip, come rappresentato sotto. 4. Attraverso il menu di avvio trovare e lanciare nuovamente easyphp. 5. Aprite il vostro browser e digitate il seguente indirizzo: http://localhost/phpcodewizard/index.php il browser visualizzerà questa pagina. 3/14 PhpCodeWizard ver. 2.0 Come vedete la pagina che visualizzerete sarà divisa sempre in due parti, quella di sinistra che oltre a fornire informazioni sui livelli di accesso e utenti connessi, mostra i progetti creati. Nella parte destra viene visualizzato il risultato delle richieste effettuate precedentemente cliccando sui link situati nella parte sinistra. GESTIONE LIVELLI DI ACCESSO E SICUREZZA Loggatevi inserendo Username : admin e password : admin. E’ importante sapere che gli utenti possono essere gestiti solo dagli amministratori di sistema, cioè da coloro che hanno un livello di accesso uguale a 10. Cliccando sul link “admin”, situato nella parte sinistra della pagina principale di phpcodewizard, visualizzerete altri 2 link “log_users” e “users”. Cliccando sul primo visualizzerete nella parte destra, tutte le azioni compiute fino a quel momento sui dati. Cliccando sul link “users” potrete gestire gli utenti, inserendone di nuovi o modificando le credenziali di quelli già inseriti. A tutti gli utenti che hanno dei livelli di accesso < di 10 occorre specificare database e tabella da gestire e per indicare correttamente il livello di accesso occorre tenere in considerazione quanto segue: Livello di Accesso Se < di 3 Se >= 3 Se >= 6 Se >= 10 Azione Permessa Solo visualizzazione dati Inserimento dati Modifica Dati Amministratore di Sistema 4/14 PhpCodeWizard ver. 2.0 GESTIONE DELLA VISIBILITA’ DEI DATI: Una nota importante va fatta sul criterio di gestione della visibilità. I campi “Da1”; “A1”; “Da2”; “A2”; “Da3”; “A3”; “Da4”; “A4”, servono ad impostare la visibilità dell’utente sui dati, ad esempio un utente dell’ufficio vendite non deve poter vedere, se non diversamente impostato, i dati di un ipotetico ufficio contratti. Per attuare tale gestione la tabella interessata deve contenere obbligatoriamente un campo denominato: “visibility VARCHAR(8)”. Basta dare un’occhiata alla tabella user del database admin per capire che l’utente lamorgesec può accedere solo ai dati dell’ufficio progettazione, mentre l’utente lamorgesea può accedere solo ai dati della segreteria. Una volta creata una tabella con i dati relativi alla visibilità (vedi tabella Uffici del database gestione_del_personale) occorre legare il campo visibilità della tabella gestione_del_personale.anagrafica con il campo di lookup (visibility) della tabella uffici. Cliccando sul link “servizi” della pagina principale di phpcodewizard, e poi nuovamente sul link “phpcodewizard” verrà mostrata la pagina sottostante e capirete bene il funzionamento del progetto “gestione_del_personale” proseguendo cliccando sul tasto “Next/avanti”. Subito dopo aver pigiato sul tasto avanti si passa a selezionare il database desiderato e si clicca nuovamente sul tasto avanti per proseguire nella generazione del progetto. 5/14 PhpCodeWizard ver. 2.0 La pagina mostrata è quella relativa alla selezione della tabella da gestire all’interno del database “gestione_del_personale” precedentemente selezionato. Ciò che il sistema mostrerà è la pagina seguente: Questa pagina è quella più importante, qui vengono definite tutte le caratteristiche di gestione sulla tabella selezionata, in questo caso stiamo parlando della tabella “anagrafica” dove si può vedere il legame con il campo visibilità della tabella uffici. 6/14 PhpCodeWizard ver. 2.0 Tutte le proprietà sottostanti non hanno bisogno di essere spiegate in quanto molto semplici ed intuitive anche per chi ha poca dimestichezza con i database. Subito dopo la pagina delle proprietà, cliccando sul tasto avanti, si passa alla generazione vera e propria degli script relativi alla gestione della tabella. Dopo la generazione degli script, riaggiornando la pagina ciò che viene mostrato è visualizzato sotto. Troveremo il link “gestione_del_personale” con i relativi link delle tabelle generate. A partire da sinistra potrete notare 3 icone. La 1^ icona serve a modificare il record, la 2^ a cancellare il 7/14 PhpCodeWizard ver. 2.0 record, mentre la terza a mostrare i relativi dettagli, in questo caso i corsi. E’ possibile, cliccando sulle intestazioni delle colonne, ordinare i dati in base alla colonna scelta in modo decrescente. Ogni tabella da gestire in phpcodewizard deve passare attraverso quel processo di generazione degli script spiegato precedentemente, inoltre date anche un’occhiata alla pagina “architettura” della home page di phpcodewizard per capire bene la funzione di ogni file. E’ da considerare che per quanto riguarda la visibilità e la gestione master dettaglio il sistema si aspetta di trovare nelle tabelle da gestire i seguenti campi: Tipo Gestione Visibilità Master/Dettaglio Campo Visibilità VARCHAR(8) (nella tabella interessata) Id_child BIGINT (nella tabella dei dettagli) In ogni caso scorrendo il progetto “gestione_del_personale” è facile capire il funzionamento di tutto quanto fin qui esposto. CONSIGLI UTILI PER GLI SVILUPPATORI Il risultato ottenuto con PhpCodeWizard è tutt’altro che banale, tenuto conto che l’applicazione generata è da considerare già finita. A questo punto vi trovate con un programma in esecuzione, 8/14 PhpCodeWizard ver. 2.0 senza aver visto una sola riga di codice, per un programmatore, questa situazione può generare un po’ di insoddisfazione, cerchiamo quindi di porre rimedio e di capire che cosa ha prodotto il generatore di codice dietro le quinte. Supponiamo di voler creare il progetto per la gestione della tabella anagrafica contenuta nel database Gestione_del_Personale visto precedentemente: Il sistema dopo aver specificato i dati, come abbiamo visto nelle figure precedenti, creerà 6 files: 1. …._config.php (Contiene le proprietà di gestione di ogni campo) 2. …._dbConnection.php (Contiene le proprietà di connessione al database) 3. ….__grid_index.php (E’ il file principale che viene richiamato per lanciare l’esecuzione della gestione della tabella e che richiama il file table_engine.php che è il cuore di tutto il sistema). 4. …._report.php (Report predefinito da sistema). 5. …._template.php (pagina che assegna e richiama il relativo …template.tpl). 6. …._template.tpl (qui è possibile definire il layout di presentazione “vedi smarty”). Al posto dei (…) occorre sostituire una stringa formata da database e tabella da gestire per cui i file avranno il seguente nome: 1. gestione_del_personaleanagrafica _config.php 2. gestione_del_personaleanagrafica _dbconnection.php 3. gestione_del_personaleanagrafica _grid_index.php 4. gestione_del_personaleanagrafica _report.php 5. gestione_del_personaleanagrafica _template.php 6. gestione_del_personaleanagrafica _template.tpl Questi 6 files vengono dati in pasto a table_engine.php che è il cuore di PhpCodeWizard, per cui i 6 files di cui sopra, relativi ad ogni gestione, verranno richiamati tutti da tale file. Per una personalizzazione più accurata di ogni gestione è possibile copiare e rinominare il file table_engine.php nella stessa cartella in cui risiede l’originale apportandovi a mano il codice necessario alla personalizzazione. In tale modo occorre rinominare nel file …_grid_index.php ogni chiamata a table_engine.php con il nome del table_engine.php rinominato e personalizzato. GENERAZIONE DINAMICA REPORT Il file nomedatabasenometabella_report.php, contiene tutte le informazioni necessarie per visualizzare un report attraverso Microsoft-Word, e viene generato dal sistema solo se non esiste, ogni volta che viene rieseguita una rigenerazione del progetto tale file non viene mai toccato, questo per evitare di perdere eventuali personalizzazioni. Per rigenerare tale file occorre eliminarlo prima di eseguire una nuova generazione degli script relativi al progetto interessato. Questo file viene richiamato cliccando sull’icona di “word”, è situata a fianco ad ogni record nella griglia dati. A tale azione corrisponde l’apertura di Microsoft-Word che visualizza un report predefinito che occorre necessariamente modificare. Per fare questo bisogna tener presente che, a tale file vengono passate alcune variabili, tra cui: $field_name_autoinc e $field_value_autoinc, che conservano rispettivamente il nome del file ad autoincremento (ed il suo valore) del record evidenziato nella griglia dati. Aprendo tale file ci si rende subito conto della semplicità con cui possiamo personalizzare il nostro report. In modalità predefinita il report visualizza i valori delle variabili sopra menzionate e, se la tabella è relazionata ad una tabella dettagli, mostrerà i dettagli relativi al record attivo. E’ importante evidenziare che, se la tabella non possiede alcun campo ad autoincremento, la funzione di stampa è inibita, ed al posto dell’icona della “stampante”troveremo quella raffigurante un segnale di divieto. 9/14 PhpCodeWizard ver. 2.0 Proverò velocemente a commentare le righe di codice più importanti contenute nel file …._report.php: (le seguenti righe di codice si riferiscono ad adminusers_report.php) include_once('config.inc.php'); include_once('adminusers_dbconnection.php'); include_once('adminusers_config.php'); $database_login = "admin"; $dbtable_login = "users"; header("Content-type: application/msword"); header("Content-Disposition: attachment; filename=users.doc"); $conn = ADONewConnection($dbtype); if (!($conn->connect($dbhost,$dbusername,$dbpassword,$dbname))) { die('<B>Errore di Connessione al Database...</B>'); } Queste istruzioni includono tutte le impostazioni e le scelte effettuate in fase di generazione degli script. $rs_master = $conn->execute("SELECT * FROM users WHERE $field_name_autoinc=$field_value_autoinc"); echo "MASTER DATA FIELD AUTOINC: $field_name_autoinc=$field_value_autoinc"."<BR/>"; echo "MASTER DATA ON FIELD #1: ".$rs_master->fields[1]."<BR/>"; echo "<BR/>"; echo "<BR/>"; La variabile $rs_master conterrà tutto il contenuto del record attivo. Notate le due variabili delle clausola WHERE. echo $rs_master->fields[1]; qui si stampa il contenuto del campo numero 1 del record precedentemente acquisito in $rs_master. if ($table_master_details == true) { $sql = "SELECT * FROM WHERE id_child = $field_value_autoinc ORDER BY 1"; $rs_details = $conn->execute($sql); if ($rs_details) { echo "SCAN DETAILS TABLE $dbtable_login: "."<BR/>"; $rs_details->movefirst(); while (!$rs_details->EOF) { # ---------------------------# Insert Code Here for details echo $rs_details->fields[1]."<BR/>"; # ---------------------------$rs_details->movenext(); 10/14 PhpCodeWizard ver. 2.0 } } } else { echo "NOT EXISTS DETAILS TABLE<BR/>"; } ?> <script language="javascript">window.location.href="adminusers_grid_index.php"</script> Con queste righe di codice, solo se la tabella contiene dei dettagli, vengono stampate le informazioni contenute nel campo numero 1 (della tabella dettagli) effettuandone una scansione completa come da query $sql = "SELECT * FROM …. WHERE id_child = $field_value_autoinc ORDER BY 1"; GESTIONE EVENTI Il file table_engine.php, include la libreria prototype in JavaScript scritta da Sam Stephenson. Tale libreria contiene oggetti e funzioni di grande utilità per aumentare lo sviluppo e la produttività. L’operazione di inclusione della libreria ProtoType è effettuata dalla seguente riga di codice: <script src="include\lib\prototype.js"></script>. E’ importante sottolineare che, i tag <script> e </script> insieme al loro contenuto vanno inseriti sempre fra i tag <head> e </head>. Ho pensato di collegare l’evento di fine caricamento della pagina table_engine.php, lasciando poi al programmatore la gestione di tale evento: <script> Event.observe(window, 'load', MessageLoad, false); function MessageLoad() { /* Evento Invocato quando la pagina ‘table_engine.php’ è stata caricata */ } </script> Oltre alla libreria ProtoType è inclusa tutta la libreria di gestione degli effetti ScriptAculous . Vista la dimensione di queste librerie, non basterebbe un intero libro per analizzarle entrambe in dettaglio, pertanto, per comprendere al meglio tutti i segreti di queste due librerie potete fare riferimento alle API Docs che troverete sul sito ufficiale, intanto per divertirsi un po’ con tali strumenti potete cliccare sul link situato in basso al frame sinistro. E’ possibile, quindi, inserire del codice negli script di phpcodewizard per migliorare gli effetti visivi di alcune azioni come ad esempio la cancellazione di un record. GESTIONE TEMPLATE Il framework incorpora, per la gestione dei template, smarty; uno dei più diffusi motori di template per PHP, il quale fornisce un modo semplice per separare la logica dell’applicazione dal contenuto della sua presentazione, in tal modo gli script generati saranno indipendenti dal layout. I files …_template.php e smarty\phpcodewizard\templates\…_template.tpl generate automaticamente dal framework implementano tale automatismo. Il primo file crea e passa le variabili al template, (tale file non è quasi mai da modificare). Il file con estensione .tpl , contiene tutta l’architettura del template. E’ consigliabile consultare il manuale di smarty per gestire e personalizzare il layout. 11/14 PhpCodeWizard ver. 2.0 Esempio di …_template.php: <?php $Stato = ""; $rs_master = array(); $rs_details = array(); $rs_master = array(); $rs_details = array(); $sql = ""; ini_set('include_path',ini_get('include_path').PATH_SEPARATOR.'../smarty/libs'); define('SMARTY_DIR','smarty/libs/'); require(SMARTY_DIR.'Smarty.class.php'); include_once('config.inc.php'); include_once('gestione_del_personaleuffici_dbconnection.php'); include_once('gestione_del_personaleuffici_config.php'); $database_login = "gestione_del_personale"; $dbtable_login = "uffici"; $conn = ADONewConnection($dbtype); if (!($conn->connect($dbhost,$dbusername,$dbpassword,$dbname))) { $Stato = "Errore di Connessione al Database."; } $rs_master = $conn->execute("SELECT * FROM uffici WHERE $field_name_autoinc=$field_value_autoinc"); if ($table_master_details == true) { $Stato = ""; $sql = "SELECT * FROM WHERE id_child = $field_value_autoinc ORDER BY 1"; $rs_details = $conn->execute($sql); } $smarty = new Smarty; $smarty->template_dir = "smarty/phpcodewizard/templates/"; $smarty->compile_dir = "smarty/phpcodewizard/templates_c/"; $smarty->config_dir = "smarty/phpcodewizard/configs/"; $smarty->cache_dir = "smarty/phpcodewizard/cache/"; $smarty->caching = false; $smarty->clear_all_assign(); $smarty->assign("Stato",$Stato); $smarty->assign("RecNoMaster",$rs_master->recordcount()); $smarty->assign("DataSetMaster",$rs_master->fields); $smarty->assign("field_value_autoinc",$field_value_autoinc); $t = fopen("1246870840.var","w"); fwrite($t,$field_value_autoinc); fclose($t); if ($table_master_details == true) { $smarty->assign("HasDetails",true); $smarty->assign("RecNoDetails",$rs_details->recordcount()); $smarty->assign("DataSetDetails",$rs_details->fields); } 12/14 PhpCodeWizard ver. 2.0 else { $smarty->assign("HasDetails",false); } $smarty->assign("sql",$sql); $smarty->display("gestione_del_personaleuffici_template.tpl"); ?> Esempio di smarty\phpcodewizard\templates\…_template.tpl: {* Smarty *} {$smarty.now|date_format:"%A, %B %e, %Y"}<br/> {$smarty.now|date_format:"%H:%M:%S"}<br/> <font color="red">{$Stato}</font><br/> {php} include_once('config.inc.php'); include_once('gestione_del_personaleuffici_dbconnection.php'); include_once('gestione_del_personaleuffici_config.php'); $conn = ADONewConnection("mysql"); $conn->connect("127.0.0.1","root","","gestione_del_personale"); {/php} <br/><b>Record Master.</b><br/> {foreach key=MasterKey item=MasterItem from=$DataSetMaster} {if $MasterKey >= 1} {$MasterKey} : {$MasterItem}<br/> {/if} {/foreach} {if $HasDetails} <br/><b>Records Details.</b><br/> {php} $t = fopen("1246870840.var","r"); $id = fread($t,1000); fclose($t); $sql = "SELECT * FROM WHERE id_child = $id ORDER BY 1"; $rs_details = $conn->execute($sql); if ($rs_details) { $rs_details->movefirst(); while (!$rs_details->EOF) { # ---------------------------# Insert Code Here for details # ---------------------------echo $rs_details->fields[1]."<br/>"; echo $rs_details->fields[2]."<br/>"; echo $rs_details->fields[3]."<br/>"; $rs_details->movenext(); 13/14 PhpCodeWizard ver. 2.0 } } unlink("1246870840.var"); {/php} {/if} WEB TOOLS Alla fine del file Navigator.php ci sono delle righe di codice commentate. Questo codice fornito da www.paginainizio.com permette di inserire dei web tools gratuiti (max 4) tra cui: Orologio Digitale, Box lettura Quotidiani, Web Chat, BOX Radio per ascolto radio On Line. All’indirizzo www.paginainizio.com è possibile sceglierne di altri, come ad esempio Cartoline Multimediali, Banner ecc… CONCLUSIONI E’ da qualche anno ormai che abbondano in rete sigle come ORM ed MVC (Model - View Controller), molti framework per lo sviluppo RAD come Codeigniter e RAILS ne fanno largo uso. Tali tecnologie agevolano notevolmente il lavoro dei programmatori semplificando lo sviluppo e la creazione di applicazioni Web. Per utilizzare tali framework occorre un requisito fondamentale; la conoscenza di un linguaggio di programmazione. PhpCodeWizard è l’unico framework esistente, che permette a programmatori e non, di impiantare un’applicazione web da zero in soli 5 passaggi, facendoci risparmiare così tempo e denaro. Con PhpCodeWizard ogni progetto creato può essere modificato e gestito direttamente via web senza dover ogni volta scaricare gli script aggiornati. In sostanza PhpCodeWizard gestisce i dati come i CMS gestiscono i contenuti, cioè via web e senza mettere mano al codice. PhpcodeWizard è un framework in continua evoluzione, pertanto, consultate spesso il sito all’indirizzo www.phpcodewizard.it per scaricare l’ultimo aggiornamento disponibile. Sperando di aver realizzato cosa gradita vi saluto in attesa di un vostro parere su tale prodotto, e ringrazio anticipatamente chiunque voglia diffondere e migliorare tale progetto. RISORSE OverLIB – Libreria di gestione e configurazione dei popup gestibili tramite smarty. La home page di OverLIB è : www.bosrup.com/web/overlib. AdoDB – Libreria che gestisce l’astrazione ai database. La home page di AdoDB è: http://php.weblogs.com/adodb. Prototipe e script.aculous – Libreria di gestione effetti tramite javascript e AJAX. La home page è: http://wiki.script.aculo.us/scriptaculous/show/unittesting , http://www.prototypejs.org. Rico – Libreria di gestione effetti e suoni tramite AJAX. La sua home page è http://openrico.org. CONTATTI Home Page: www.phpcodewizard.it e-mail: [email protected] 14/14