Archivi per la categoria ‘CakePHP’
SWF Flash Upload: carica file di grosse dimensioni in JuniorCMS!
Un importante aggiornamento per JuniorCMS ed AdessoWEB: grazie a flash e SWF Uploader è ora possibile caricare files di grandi dimensioni nelle pagine dei propri siti web.
Durante il caricamento del file è inoltre visibile una barra di avanzamento ed alcune informazioni utili circa la dimensione del file da caricare nonchè il totale caricato fin’ora.
Il controllo utilizzato è open source e maggiori informazioni si possono trovare nel sito del produttore:
http://www.solmetra.com/en/disp.php/en_products/flash_uploader/uploader_intro
AdessoWEB: il tuo sito on-line ad un prezzo onesto!
Segnalo il nuovissimo servizio AdessoWEB per la realizzazione di siti web a gestione autonoma a prezzi veramente abbordabili!
Il progetto si scosta dalla categoria dei “cms economici” perchè non pone limiti alle dimensioni del sito web realizzabile e offre massima personalizzazione per chi vuole cimentarsi nella realizzazione di grafica web.
Molte informazioni sono reperibili nel sito web ufficiale che è in fase di ultimazione ed affinamento ma è probabile che tratteremo in questo blog aspetti tecnici e/o trucchi e informazioni riguardo la creazione di temi personalizzati, l’utilizzo di plugin avanzati e l’estensione di questo incredibile software.
Visita AdessoWEB.biz!
Ricerca full-site per JuniorCMS.com
In questi giorni sto lavorando ad un plugin di ricerca il cui scopo è indicizzare tutti i contenuti pubblici di un sito web e permetterne una ricerca full-text.
Funzionalità di Base:
- Indicizzazione dell’output di una qualunque richiesta gestita dal CMS
- Gestione temporale (cache) di un indice di ricerca
- Eliminazione automatica delle risorse non più disponibili
- Grabbing automatico dei meta-tags (title e description) per la visualizzazione dei risultati
- Possibilità di configurare con precisione i testi del risultato della ricerca durante la produzione di una risorsa
- Personalizzazione dell’url del motore di ricerca
- Completa personalizzazione del look&feel del motore di ricerca
Alcuni Dettagli:
Il plugin può essere arricchito tramite addOns per migliorarne l’integrazione con altri software (news, offerte, etc). Una qualunque pagina, ad esempio, può personalizzare in modo molto forte il testo visualizzato come risultato di una ricerca.
Sto inoltre cercando delle collaborazioni per aumentare la validità della ricerca interna e creare un piccolo sistema di page-ranking e/o ricerca approfondita… ma forse questo comporta un forte dispendio di risorse!
Futuri sviluppi:
Nuovi plugin estenderanno questo motore di ricerca fornendo funzionalità di amministrazione quali:
- visualizzazione e possibilità di modificare il database degli indici cache
- possibilità di rendere permanente un indice (non più soggetto a scadenza cache)
- possibilità di nascondere un indice alla ricerca
- possibiltià di modificare la destinazione di un indice verso una pagina interna (redirect)
Altre idee di sviluppo riguardano una gestione statistica del motore di ricerca al fine di ottimizzare i contenuti del sito:
- Log delle ricerche effettuate
- Monitor delle ricerche frequenti
- Monitor delle ricerche vuote
- Monitor delle parole chiave più usate
- Possibilità di realizzare un “redirect di ricerca” ovvero prendere una query di ricerca e trasformarla in un’altra query.
Ulteriori ipotesi (molto remote) di sviluppo in versione “advertising”:
- Possibilità di inserire banner nei risultati della ricerca da template
- Emulazione di un sistema “AdSense” nei risultati della ricerca
Verificare una richiesta AJAX in CakePHP
if ( $this->RequestHandler->isAjax() ) {
do AJAX stuff...
}
CakePOWER: url lang request
Ho introdotto in CakePOWER un sistema per gestire la richiesta di un particolare flag di lingua mediante un finto parametro da infilare nell’uri della richiesta.
Spiegazioni dettagliate e documentazione: http://www.cakepower.org/wiki/doku.php?id=lang:index
CakePOWER: il progetto è ufficiale!

Il primo logo ufficiale!
Ho registrato il dominio www.cakepower.org e sto iniziando a pubblicare una wiki di documentazione ufficiale del progetto CakePOWER.
Il sito sarà per ovvie ragioni completamente in inglese… un inglese che, non ho dubbi, i più troveranno rozzo e scorretto! Col tempo migliorerò!
Ricordo che il progetto è aperto a chiunque desideri collaborare. Sul sito ufficiale sono esposti i link al canale Twitter per gli aggiornamenti veloci e al repository su Google Docs per scaricare tutti gli aggiornamenti che andrò a pubblicare.
Presto verrà aperto il bug traking sul Google Code per raccogliere le segnalazioni di chi vorrà collaborare a testare e debuggare il progetto.
CakePOWER: Progettazione di un Framework
Quest0 articolo segna l’inizio di una serie di considerazioni e analisi il cui obiettivo è la progettazione e costruzione di un framework applicativo web based.
La mia esperienza nello sviluppo di applicazioni web (siti web, gestionali, piccole utility) mi ha portato ad elaborare alcune definizioni che utilizzerò nei successivi articoli di analisi:
- framework: è l’insieme di strumenti che consentono di enunciare le istruzioni logiche che compongono l’applicazione.
- applicazione: è l’insieme delle istruzioni necessarie a definire la logica astratta di un software.
- interfaccia: è lo strumento di comunicazione tra l’applicazione e il suo utente.
- prodotto: è l’insieme di applicazione e interfaccia cui vengono applicate delle personalizzazioni specifiche per la singola realizzazione.
Nell’immagine precedente la linea rossa rappresenta la separazione logica tra sviluppo dell’applicazione e lo sviluppo del prodotto.
L’applicazione è costituita di istruzioni logiche generiche che possono descrivere una soluzione software ad un problema collettivo. Lo sviluppo del prodotto si concentra sulla selezione delle applicazioni necessarie e sulla definizione di un insieme di regole di personalizzazione.
Nel momento in cui ci viene richiesto lo sviluppo di un prodotto (es un sito web) dobbiamo soffermarci e ragionare sulle applicazioni che lo compongono: gestione utenti, gestione pagine, gestione news, photo gallery e sulle regole di personalizzazione che lo completano: template grafico, numero di news per pagina, gestione dei menus.
Diventa facile capire che l’obiettivo è spostare la line rossa in modo che l’area di configurazione occupi sempre meno spazio nella costruzione di un prodotto. Il tempo che dedichiamo alla costruzione di un prodotto dev’essere concentrato sulla soddisfazione delle personalizzazioni richieste e non sullo sviluppo delle funzionalità
Il compito del framework:
La realizzazione pratica di quanto illustrato espone alcuni prerequisiti fondamentali che il framework deve soddisfare:
- Tutte le operazioni di configurazione devono poter essere descritte su files fisicamente distinti dai sorgenti dell’applicazione.
- I moduli applicativi (plugins) che compongono l’applicazione devono poter interoperare al fine di estendere e/o modificare il comportamento di altri moduli.
- I moduli applicativi devono essere sensibili ad un sistema di configurazione strutturato e scalabile.
- I moduli applicativi devono erogare funzionalità logiche “dropIn”. Non deve essere richiesta modifica dei files sorgenti!
CakePOWER: un po’ di pepe a CakePHP!
CakePOWER è il progetto che mira a concretizzare l’area core dell’immagine qui sopra fornendo tutti gli strumenti necessari allo sviluppo di plugins (moduli applicativi) al fine di vendere prodotti (siti web e gestionali applicativi) la cui caratteristica principale è alta qualità a basso costo.
Ho iniziato cercando un framework (PHP) che implementi il paradigma MVC e la scelta è ricaduta su CakePHP in quanto progetto abbastanza maturo e direzionato sulla creazione di automatismi che permettono di sviluppare il più velocemente possibile.
CakePOWER sarà sviluppato come un’estensione di CakePHP la quale integra funzionalità complesse nel framework. Di fatto tutto il sorgente sarà contenuto nella folder cake_power e l’integrazione avverrà mediante poche semplici istruzioni da inserire nei files di configurazione principali dell’applicazione.
CakePOWER è un’estensione, non un fork!
Lo stato attuale del progetto è pressochè nullo: sto scrivendo la documentazione delle prime strutture logiche che comporranno CakePOWER. La scelta di sviluppare prima la documentazione è fondamentale per garantire la qualità del codice prodotto.
A breve i sorgenti saranno disponibili su Google Project (http://code.google.com/p/cakepower/).
Utilizzare il layout di un plugin da un punto qualunque dell’applicazione
CakePHP 1.2 introduce una serie di funzionalità dedicate esplicitamente allo sviluppo RAD di applicazioni.
In questo articolo spiego come è possibile utilizzare dei layout contenuti in uno specifico plugin utilizzando quindi il concetto stesso di plugin per re-distribuire contenuti grafici oltre alle funzionalità contenute in helpers e components.
All’interno di un metodo di controller, appena prima del render (o della conclusione del metodo) è sufficiente specificare plugin e layout che si desidera utilizzare per il rendering della richiesta:
... $this->plugin = 'Myplugin'; $this->layout = 'my_layout'; ...
Questo tipo di codice produce la richiesta del file: “/app/plugins/myplugin/views/layouts/my_layout.ctp” da utilizzarsi come layout per la richiesta in corso.
Utilizzare operatori sql in CakePHP find()
Riporto il sunto di una discussione sviluppata sul Gruppo Google di CakePHP inerente all’utilizzo di operatori SQL nelle operazioni di estrazione dati (finder query):
http://groups.google.com/group/cake-php/browse_thread/thread/89dd8a8846bad3a1?hl=en
L’autore ha la necessità di estrarre da un campo di testo un numero limitato di caratteri utilizzando l’operatore SQL LEFT:
LEFT(Table.field, len) as new_field_name
La soluzione proposta (e testata) consiste nell’utilizzo dell’operatore direttamente nell’elenco dei campi da estrarre come parametro aggiuntivo dell’operazione find().
$list = $this->User->find( "all", array(
fields = array(
'id',
'username',
'left(User.username, 5) as short_username'
)
));
Questo comando di estrazione genera come output la seguente struttura associativa:
array(
0 => array(
[User] => array(
[id] => 1
[username] = Marco Pegoraro
)
[0] => array(
[short_username] => Marco
)
)
)
Si può dunque notare come il campo ottenuto mediante operatore SQL sia stato erogato fuori dal raggruppamento del modello e inserito sotto ad un indice numerico.
Ho fatto alcuni test utilizzando le relazioni tra i modelli (belongsTo) e ho estratto campi da più modelli definendo campi elaborati da più modelli. Tali campi vengono sempre proposti sotto l’indice 0.
Al momento in cui scrivo la discussione è in attesa di una soluzione per modificare in modo esplicito il nome del raggruppamento di questi campi prodotto di un operatore SQL.
Alcune risorse utili:
CakePHP: Utilizzare “bake script” con MAMP su Mac OSX
Gli sviluppatori CakePHP che volessero utilizzare il comodo script “bake” su di una LAMP realizzata con MAMP si trovano di fronte ad un errore di connessione con il server db:
--------------------------------------------------------------- Bake Model Path: /Users/peg/Sites/cake12/app/models/ --------------------------------------------------------------- Warning: mysql_connect(): Can't connect to local MySQL server through socket '/var/mysql/mysql.sock' (2) in /Users/peg/Sites/cake12/cake/libs/model/datasources/dbo/dbo_mysql.php on line 370 Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in /Users/peg/Sites/cake12/cake/libs/model/datasources/dbo/dbo_mysql.php on line 375 Warning: mysql_get_server_info(): supplied argument is not a valid MySQL-Link resource in /Users/peg/Sites/cake12/cake/libs/model/datasources/dbo/dbo_mysql.php on line 383 Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /Users/peg/Sites/cake12/cake/libs/model/datasources/dbo/dbo_mysql.php on line 407 Error: Your database does not have any tables.
Questo problema è dovuto al fatto che viene utilizzato il socket mysql di default presente nel sistema OSX (evidenziato in grassetto nel codice precedente).
La soluzione a questo problema è modificare la configurazione della connessione database di CakePHP aggiungendo la seguente definizione per la porta:
'port' => '/Applications/MAMP/tmp/mysql/mysql.sock'
Così facendo si forza l’utilizzo del server MySQL installato da MAMP e gestibile mediante i classici strumenti del pacchetto.
Diventa dunque possibile utilizzare lo script bake!


