Per gli aggiornamenti leggere alla fine del post.
Salve!
Nota: è necessario vere piena padronanza dello snippet Ditto per poter usare DittoMachine. Leggere
la documentazione di Ditt e
la documentazione sui suoi parametri prima di continuare a leggere.
Premessa
Ho scritto questo snippet per poter gestire un grande catalogo prodotti.
Siccome volevo permettere agli utenti di leggere le liste dei prodotti in base ai criteri che preferiscono avrei finito per creare un mucchio di pagine contenenti solo delle chiamate allo snippet Ditto.
Perciò ho preferito scrivere questo snippet per chiamare Ditto in diverse configurazioni passando alla stessa pagina diversi parametri attraverso il GET.
Presentazione: DittoMachine!
DittoMachine ti permette di settare
qualsiasi parametro di Ditto nell’url (leggere il capitolo "Sicurezza" per ulteriori informazioni), ad esempio
Esempio con Friendly Urls attivati:
http://www.example.com/page.html?startID=5&tpl=DittoMachineTpl&sortBy=pagetitle&sortDir=ASC&summarize=5&filter=tvregione,toscana|tvcatvinoit,vinoit&hiddenTVs=regione,catvinoit&emptyText=%3Cli%3ECiao%20ciao%3C/li%3E&displayArchive=0
Esempio senza Friendly Urls:
http://www.example.com/index.php?id=23startID=5&tpl=DittoMachineTpl&sortBy=pagetitle&sortDir=ASC&summarize=5&filter=tvregione,toscana|tvcatvinoit,vinoit&hiddenTVs=regione,catvinoit&emptyText=%3Cli%3ECiao%20ciao%3C/li%3E&displayArchive=0
Se la pagina contiene DittoMachine et voilà! Ditto viene servito come output. Puoi anche settare un emptyText contenente entità HTML, come nell’esempio. Ricorda di chiamare lo snippet
senza cache (ad esempio [!DittoMachine!], NON [[DittoMachine]]) e
NON mettere la pagina nella cache.
Puoi specificare i parametri direttamente nello snippet DittoMachine: essi avranno la precedenza su quelli passati attraverso l’url.
Utile per risparmiarsi di inserire sempre certi parametri che possono rimanere fissi: "tpl", tutta la serie di "trunc", "displayArchive" e tutti gli altri che vuoi.
Se un parametro non viene specificato in nessun modo viene utilizzato il default di Ditto.
Relativamente semplice. Mi raccomando di leggere il capitolo "Sicurezza", dove vengono illustrate restrizioni di sicurezza, alcuni parametri specifici di DittoMachine e qualche informazione di debug.
Utilizzo
Avrai bisogno dello snippet Ditto, nella versione almeno 1.0.2, e che sia titolato "Ditto". Scarica DittoMachine_0.1b.txt alla fine di questo post e copiane i contenuti in un nuovo snippet.
Inserisci [!DittoMachine!] nella pagina (o chunk, o template, o dove vuoi) e setta tutti i parametri che vuoi mantere fissi direttamente nello snippet, esattamente come se li stessi inserendo direttamente in Ditto. Ricorda, i parametri inseriti nella chiamata dello snippet hanno la precedenza su quelli passati attraverso l’url. Setta &secureStartIDs (leggi il prossimo capitolo) per una maggiore sicurezza.
Poi crea dove vuoi un link alla pagina che contiene lo snippet DittoMachine e aggiungi al link i parametri di Ditto come GET, nella forma "?tpl=Ditto&summarize=3&etc... ", per ottenere l’output di Ditto che vuoi.
Sicurezza
Per prevenire l’accesso indesiderato a pagine non pubbliche ci sono alcune cose che devi sapere. Le presento una ad una:
- Non puoi settare &seeThroughtUnpub, &showInMenuOnly, &showPublishedOnly, &start attraverso l’url.
Troppo insicuro. Se hai bisogno di settarlo fallo nella chiamata [!DittoMachine!]. Volendo puoi abilitare questa cosa togliendo il simbolo di commento (#) nel codice dello snippet. Non ti consiglio di farlo.
[li]Puoi limitare gli &startID con &secureStartIDs.
Per prevenire che qualcuno setti uno &startID diverso e veda pagine che noi non vogliamo puoi settare nella chiamata a DittoMachine una lista di ID consentiti come &startID. Se qualcuno inserise un url ad esempio
http://www.example.com/page.html?startID=5
e la nostra chiamata DittoMachine è
[!DittoMachine? &secureStartIDs=`4,5,17`!]
verrà consentito di eseguire Ditto con &startID=5 perché "5" è uno degli ID permessi (id 4, id 5, id 17 nell’esempio), separati solo da una virgola (,). Nel caso startID non sia tra quelli permessi l’output sarà "Invalid ID".
(Nota per me: migliorare l’output degli errori nella prossima versione)
Attenzione! DittoMachine accetterà qualsiasi &startID se non setti nessun &secureStartIDs!
- Non puoi abilitare il &debug di Ditto attraverso l’Url.
Troppe informazioni. Se vuoi il debug di Ditto, settalo nella chiamata a DittoMachine. Se assolutamente lo vuoi tramite Url, togli il commento alle linee nel codice dello snippet.
- Puoi settare &dbg nella chiamata allo snippet per ottenere infrmazioni di debug da DittoMachine.
Questo ti mostrerà la lista dei parametri passati a Ditto da DittoMachine. Utile per vedere quello che Ditto vede.
[li]Osserva il codice: commenta via quello che non vuoi.
Il codice che permette di passare parametri attaverso l’indirizzo è molto semplice: 5 righe per la maggior parte di essi.
Sono tutti simili (con alcune eccezioni per quelli che necessitano ulteriori controlli), con questa struttura:
if (isset($emptyText)) {
$params['emptyText'] = $emptyText;
} else if (isset($_GET['emptyText'])) {
$params['emptyText'] = $_GET['emptyText'];
}
Se volete impedire i settaggio di un dato parametro tramite url basta "commentare via" (con un # all’inizio della linea) le parti che lo permettono. Usando il precedente esempio il codice diventerà:
if (isset($emptyText)) {
$params['emptyText'] = $emptyText;
# } else if (isset($_GET['emptyText'])) {
# $params['emptyText'] = $_GET['emptyText'];
}
Conclusioni
Apprezzerei feedback su 2 cose: primo, avrò sicuramente scritto codice ridondante. Questi sono i miei primi passi nel Php, non ci credo di non aver fatto nemmeno un errore perciò... se pensiate ci siano errori o semplificazioni. Devo imparare.
Secondo, vorrei sapere cosa ne pensate riguardo alla sicurezza di questo snippet. Avevo il dubbio di aver tralasciato qualcosa in sicuezza, er questo l’ho postato come beta prima che nel Repository.
Beh, qualsiasi tipo di feedback verrà apprezzato
Spero lo troviate utile.
Potete scaricare o snippet da questo topic.
Aggiornamenti
14/08/06
_ Aggiunti dei controlli is_numeric() sui parametri numerici (multiLevel, paginate, etc).
_ Aggiunti dei controlli ereg() sui parametri contenenti stringhe per invalidarle se contengono simboli (tranne pipes, virgole etc)
In allegato la versione 0.2beta - gradito altro feedback!