Sei sulla pagina 1di 35

www.spaghettibrain.

com
Quando hai finito di leggere il libro vai alle ultime tre pagine per saperne più su spaghettibrain.com

I M P O R T A N T E !!!

Questo libro è rilasciato sotto GNU free Documentation License (


http://www.gnu.org/licenses/licenses.html
), chiunque può modificarlo e migliorarlo rispettandone la
sola proprietà intellettuale dell'autore e citando in modo visibile nella prima, seconda, penultima e ultima
pagina:

"Versione Originale di Claudio Erba (webmaster@spaghettibrain.com),


www.spaghettibrain.com , PHPnuke italian Mirror, 2002, questo libro, in tutte le sue versioni
(anche quelle modificate da terzi in italiano o in qualsiasi ) ,per volontà dell'autore, può essere
riprodotto anche integralmente senza violare nessuna legge in quanto questo libro e rilasciato
sotto GNU free Documentation License (http://www.gnu.org/licenses/licenses.html )

Questo libro:

Potrà essere modificato parzialmente o integralmente creando manuali per aziende, enti o persone che
si occupano di formazione cambiando sia la grafica che i contenuti che l'impaginazione.

Potrà essere distribuito sia in forma originale che in forma modificata sia in formato elettronico che in
formato cartaceo da riviste di settore e non, siti internet e qualsiasi altro media.

Potrà essere usato come manualistica interna da aziende, enti pubblici, privati o università.

Può essere utilizzato e distribuito dalle università come dispensa.

Potrà addirittura essere rivenduto senza riconoscere nessun tipo di royalty all'autore o agli autori a patto
che sia concessa la libertà agli acquirenti di poterne fare copie anche integrali, redistribuirle o rivenderle.

I sorgenti modificabili del libro, le immagini e i files di esempio sono disponibili in formato sxi
(OpenOffice Impress) sul sito www.spaghettibrain.com. Openoffice è una suite da ufficio
completamente gratuita scaricabile da www.openoffice.org

1 2
Indice
Cap 1: Cosa è PHPNuke
1) Introduzione Pag. 4
2) Cosa è PHPNuke Pag. 5 Capitolo 1 - Introduzione a PHPNuke
3) Breve storia di PHPNuke Pag. 6
4) Le comunità NUKE Pag. 7 Paragrafo 1 - Introduzione
5) Perché PHPNuke e non pagine HTML Pag. 8

Cap 2: Struttura di FrontEnd, cosa vede l'utente


1) Introduzione Pag. 9 Questo libro nasce come ringraziamento a tutti gli utenti che, visitando spaghettibrain.com; Si
2) I moduli preinstallati Pag. 10 è sempre sentita la necessità di avere un Manuale definitivo di PHPnuke, possibilmente in
3) Altri moduli non installati Pag. 16 lingua italiana. Per questione di tempo nessuno ha mai avuto la volontà di portare a termine
4) I blocchi preinstallati Pag. 17 questa operazione.
Cap 3: Struttura di Backend, cosa vede l'admin Visto che sono al paragrafo a del capitolo 1 non posso dire di avere portato a termine la cosa,
1) Introduzione Pag. 18 ma chi ben inzia, dice qualcuno, è a metà dell'opera.
2) Le funzioni di admin Pag. 19
3) Le preferenze di PHPNUke Pag. 23
Contribuiscono, direttamente o indirettamente a questo progetto e ringrazio:
Cap 4: Installare PHPNuke
1) Descrizione generale Pag. 25 ? Francisco Burzi con tutti gli scritti introduttivi compresi nei files di installazione di PHPnuke
?
2) Procedura di installazione Pag. 25 Vasco Cleri e sua figlia Valentina del Lug Rieti per le traduzioni dei moduli del manuale
? Micaela bechini, per lequotidiane traduzioni dall'inglese di PHPnuke.org
Cap 5: L'architettura e la struttura ? Le comunità di Splatt.it, Nukeitalia.com, PHPnuke.it (e la sua Mailing List), Postnuke.it,
1) Descrizione generale Pag. 30 envolution.it, xoops.it e ovviamente i 1500 Iscritti di Spaghettibrain.com
2) Gestione delle cartelle Pag. 31
3) La gestione della pagina principale Pag. 32
?
Aemmenet, nella persona di Marco Atzori che ci ha concesso in uso gratuito il server su cui
4) La gestione dei moduli Pag. 33 è ospitato spaghettibrain.com
5) La gestione dell'admin Pag. 34
?
Roberto scano di IWA Italy e Patrizia Bertini di Webaccessibile.org per i contributi
s ull'usabilità e accessibilità e validazione w3c
Cap 6: Personalizzare la grafica di PHPNuke ? Marcello Tansini di webmasterpoint.org per il supporto dato al progetto in temrini di
1) Come è strutturato un tema di PHPNuke Pag. 35 visibilità.
2) Modificare i template Html Pag. 39 ? Andrea Birgahi, the best PHPNuke Theme Maker of the world per la grafica di
3) Le regole da rispettare per costruire temi Pag. 40 spaghettibrain, per il logo del libro e per molto altro
? La mia ragazza Sara per tutto ...
Cap 7: I Blocchi
1) I diversi tipi di blocchi, caratteristiche Pag. 41
? Mia mamma Lella, mia sorella Cora, il mio cane Grey e la nuova arrivata cagnolina Maya
2) Creare un nuovo blocco Pag 42

Cap 8: Creare un modulo Questo libro lo dedico a mio Papà Antonio. Ciao Pà.
1) Come sono strutturati i moduli Pag. 44
2) Le regole da rispettare per realizzare un modulo compatibile al 100% Pag. 45
3) Realizzare un modulo, parte pubblica Pag. 46 Le parti in corsivo sono quelle prese dai files di installazione di PHPnuke.org e tradotti in
4) Realizzare un modulo, parte di admin Pag. 49
italiano.
Cap 9: Alcuni accorgimenti di sicurezza Siamo alla ricerca di volontari disponibili a tradurre questo scritto in quante più lingue
1) I permessi sulle cartelle Pag. 55 possibili.
2) I cookies, timeout e configurazione, i codici maliziosi Pag. 56 Nel caso foste interessati a tradurre questo libro scrivete a webmaster@spaghettibrain.com o
visitate il sito che avrà una sezione riservata dedicata a questo argomento.
Cap 10: Supporti per il programmatore
1) Le tabelle del database Pag. 58
2) La sintassi del codice SQL Pag. 60
3) PHPMyadmin, amministrare il DB MySQL via web Pag. 61
4) MySQL Front, Amministrare da Windows un DB MySQL Pag 64
5) Foxserv, Far funzionare PHPNuke su Sistemi Windows Pag. 66

Credits:
1) C.V. Autore
2) L'Hosting Spagettibrain
3) About this book
3 4
Paragrafo 2, Cosa è PHPnuke
Phpnuke è un software gratuito rilasciato sotto licenza GPL.

E' un CMS (Content managment system) che integra al suo interno tutti gli strumenti utili a
creare un sito/portale di informazione (inteso in senso allargato).
PHPnuke è scritto al 100% in php e richiede Apache Web Server (Esistono utenti che lo
Dato il vasto numero di funzioni presenti nell'installazione e ancora in maggior quantità di
usano sotto Internet Infrmation Server, NDR) + PHP e un database SQL (MMySQL,
moduli sviluppato da terzi il sistema è anche adatto alla gestione di
Intranet aziendali, sistemi di ecommerce, portali di associazioni, enti pubblici, aziende, testate mSQL, PostgreSQL, ODBC, ODBC_Adabas, Sybase or Interbase).
giornalistiche, testate online, siti di informazione, sistemi di e-learning e chi
più ne ha più ne metta ... Supporta 25 linguaggi, un motore di ricerca stile Yahoo, Sondaggi con commenti, molti
temi grafici, gestione degli eventi passati, News, area download files, sistema
PHPnuke Utilizza come cardine della propria struttura il Binomio PHP + MySQL, spessissimo di FAQ, gestione avanzata dei blocchi, newsletter, articoli categorizzati per argomenti,
affiancati dal web server Apache. Molti moduli hanno integrato molti altri linguaggi sistema di gestione dell'inrfaccia e dei contenuti mutilingua e molto altro. ".
Quali Javascript, Java, flash e inoltre anche sistemi per fruire, sempre attraverso il portale di
suoni e filmati in streaming (Radio Online, TV Online, Immagini, Files ...) Paragrafo 3 - Breve storia di
Phpnuke è sviluppato con un occhio particolare a quelli che sono i suggerimenti del W3C, in PHPnuke
origine, il codice è infatti w3c compliant e sono validati sia il codice PHPNuke è un software gratuito, rilasciato sotto licenza GNU GPL versione 2.0
che i fogli di stile. Sta poi all'utente che intede realizzare un portale attenersi a questi standard
durante la modifica della grafica o delle caratteristiche intrinseche PHPnuke è il risultato di molti anni di gestione di un sito chiamato Linux Preview (
del sistema. http://linuxpreview.org ).

La personalizzazione sia della parte grafica che della parte di programmazione ha un solo Come primo sistema di CMS scrissi un applicativo in Perl chiamato NUKE e lo ho usato
limite, la fantasia e le capacità del programmatore e del web designer. per circa un anno, data la crescita del sito ho sentito necessità di avere un sistema di
La presenza di molti siti phpnuke simili è dovuta principalmente dalla mancanza di tempo di gestione più performante e decidetti di usare Slash, lo stesso usato nel sito di Slashdot. E'
chi li realizza o dalla paura che la fase di personalizzazione sia troppo un buon sistema ma, per poterlo usare devi conoscere molto bene il Perl, c'é bisogno di
difficoltosa a livello tecnico, in effetti basta ispirarsi ai temi già costruiti per realizzare quanto molti moduli e hai bisogno di far girare un demone che utilizza tutta la CPU. Il mio Pentium
sia facile cucire un vestito nuovo al nostro portale. III alla fine sembrava un 386!!

Francisco Burzi, papà e mamma di PHPnuke, descrive così la sua creatura: In quei giorni ho scoperto Thatware, un buon progetto per gestire le news sotto PHP. Ho
imparato il php in meno di una settimana e ho iniziato a modificarlo. Ci sono molte
" PHP-Nuke è un "sistema portale", sistema di gestione delle news, gestore di comunità modifiche da menzionare, ed in partica è stato riscritto quasi da zero. Ho aggiunto alcune
online. L'Obiettivo di PHPnuke è di avere un sistema automatico per distribuire news e funzioni interessanti, ne ho eliminate alcune altre e, dopo circa 380 ore di lavoro nell'arco di
articoli ai diversi utenti. Ogni utente può inserire articoli o commentarli. Il principiò è quello 3 settimane PHPNuke era nato!
che usano Slashdot e molti altri.
Ma questo sistema il suo vero boom lo ha avuto nel 2001, è infatti dalla versione 4.4 di
Le caratteristiche principali del sistema sono: Amministrazione via Web, Statistiche, PHPnuke che la comunità di PHPnuke ha iniziato ad avere un vasto seguito. E' rimasto per
Sondaggi, Box personalizzabili dagli amministratori e dagli utenti, grafica personalizzabile moltissimo tempo in testa alla classifica dei files più scaricati da HotScripts.com e hanno
per gli utenti registrati, possibilità di modificare o eliminare le news già pubblicate, cominciato a nascere, in giro per il mondo, comunità che gravitavano attorno al sito ufficiale
possibilità di moderare i commenti, statistiche delle pagine che linkano al nostro sito, phpnuke.org. E' di quel periodo il supporto ufficiale di Mandrakesoft, azienda che distribuisce
Manager delle sezioni, Blocchi personalizzabili in HTML, modifica profilo utenti registrati ed Linux Mandrake.
amministratori, sistema integrato di gestione banner (Ad server), motore di ricerca interno,
(In realtà più di uno, NDR) generatore di sommerio news esportabili attraverso il formato Nascono anche i primi Fork, ossia sistemi di gestione delle news che si basano sul codice di
RSS/RDF e molte, molte altre funzioni. PHPnuke che viene modificato per far fronte alle esigenze degli sviluppatori.

Esistono molti sistemi di CMS che sono Fork di PHPnuke, tra i più diffusi ricordiamo
PostNuke, MyPHPNuke e Xoops.

5 6
Paragrafo 4 – Le comunità Nuke Paragrafo 5 - Perché PHPNuke e non pagine HTML

Uno sguardo attento va dato al vero valore di PHPNuke, ossia le comunità che vi gravitano ? Perché gestire siti di grandi dimensioni con sole pagine html fa male alla salute
intorno. E' grazie al lavoro volontario di queste persone, di questi siti, che PHPNuke è ? Perché attraverso pagine dinamiche gli utenti possono interagire (Forum, chat,)
diventato un sistema conosciuto ed è sempre grazie a loro che PHPnuke è un sistema ? Perché attraverso le pagine dinamiche si possono offrire servizi a valore aggiunto (Aree

multilingua che supporta più di 25 idiomi. riservati, servizi diversi in base alle categorie di utenti ...)
?
Perché le informazioni sono più facimente catalogabili
Anche i moduli sono stati creati per la maggior parte da sviluppatori di comunità esterne e ?
Perché con poche pagine PHP richiamiamo molte informazioni
che, in seconda battuta, sono stati inclusi nelle nuove distribuzioni di PHPnuke.
? Perché l'aggiornamento dei contenuti non richiede particolari conoscenze tecniche e può

Esistono comunità che si occupano solo della creazione di nuovi temi grafici di PHPnuke, essere gestito da chiunque (by Davis Battisti)
comunità di supporto tecnico, mirror di files e moltissime comunità muultilingua che si ? E' il modo più semplice e rapido per tirare su un portale completo di ogni cosa, grazie al suo

occupano di informare, nell'idioma locale, tutti i membri di quella comunità creando nuovi motore open source poi, permette a chiunque di implementare nuovi moduli o di modificare e
legami personali e progetti focalizzati. personalizzare quelli esistenti. (by Micione, www.vizzani.net)
? E' molto intuitivo e facile da apprendere (by Anonimo)

Nukeforums.com: Supporto tecnico a PHPnuke ? E' facile da modificare per quelli che hanno intenzione di personalizzare il programma (By

Nukedownloads.com: Mirror di files da scaricare Arus)


Somara.com: Temi e grafica ?
E' facile da usare per i meno esperti
Nukethemes.com: Temi e grafica
Ecomjunk.com: Addons e moduli
Nukeaddn.com: Addons e moduli

Comunità in lingua italiana:

Spaghettibrain.com
PHPnuke.it
Splatt.it
Nukeitalia.com

E' proprio grazie al lavoro di questi portali o di singoli che abbiamo più di 500 differenti moduli
che possono andare a personalizzare il nostro portale, dalle meteo all'e-commerce, dalla
galleria di immagini alla chat realizzata in flash ai videogiochi in Java inclusi nel layout di
PHPnuke. Progetti di particolare interesse sono: Splatt.it (Forum per PHPnuke), PHP Proxima
(Gestione visuale del layout di PHPnuke).

7 8
Capitolo 2, Struttura di frontend, cosa vede l'utente
Paragrafo 1, Introduzione Paragrafo 2, I moduli preinstallati

In questo capitolo ci occuperemo, in dettaglio, di tutte le funzionalità implementate in Il modulo news: E' nato come cuore di PHPnuke e nelle versioni precendenti era
PHPNuke, ossia cosa il nostro sistema portale può fare e come lo fa. Lo faremo dalla parte obbligatoriamente l'home page. Dalle ultime versioni è invece possibile definire quale moduli
del visitatore, immaginando di metterci nei panni di chi visita il nostro sito e ne utilizza la deve comparire come pagina di default.
funzionalità.
Il modulo news si articola su più pagine. La prima che vediamo è una raccolta delle ultime
Analizzeremo tutti i moduli preinstallati nella distribuzione di PHPNuke e daremo uno sguardo News pubblicate (E' possibile, da pannello di configurazione, [admin/preferenze] scegliere il
anche a dei moduli molto interessanti che non sono ancora stati inclusi nella distribuzione numero delle ultime news che devono essere visualizzate, 5, 10 , 15, 20, 25, 30), nella pagine
ufficiale. principale viene pubblicato una parte iniziale dell'articolo che, se troppo lungo, si andrà a
leggere premendo il link “Leggi tutto”.
Prima di farlo dobbiamo spendere due parole su come è strutturato PHPNuke; questo
sistema è strutturato come un portale su 3 colonne, nelle due laterali sono inclusi i blocchi, in L'articolo dispone di molti
quella centrale i moduli di funzione. Questo non vuol dire che non si possa modificare elementi che lo distinguono dagli
completamente la struttura del nostro sito. Lo scheletro inziale è, auspicabilmente, quello da altri. Innanzitutto il titolo (nel caso
cui partire per ottenere un portale superpersonalizzato. Oltre le 3 colonne di cui abbiamo già dell'immagine è testo testo, il
parlato abbiamo anche un Header (testata) e un footer (Fondo pagina). topic, che è la categoria
principale e di solito è
Blocchi: sono presenti nelle colonne di destra e/o sinistra del nostro portale¹ e riportano delle caratterizzato da una immagine
funzioni che si ripetono in tutte le pagine del sito (Ad esempio blocco di menu, blocco dei che, se cliccata,
banner, blocco di login)
riporta ad una selezione degli articoli che appartengono a quel topic. Abbiamo un secondo
Moduli: Sono il cuore della pagina, compaiono nel blocco centrale e ognuno ha una sua modo di categorizzare gli articoli che è appunto assegnadogli una categoria di appartenenza
funzione. Ad esempio il modulo news ha la funzione di riportare gli articoli, il modulo search di (nel caso dell'immagine è categoria3). IMPORTANTE: La categoria non è una sottocategoria
fare una ricerca interna al nostro sito, immaginiamoli come pagine indipendenti. Sono il del topic ma una categoria trasversale che è completamente indipendente. Ad esempio
“cuore” della pagina che visitiamo. immaginiamo un portale che parli di calcio (siamo italiani no? L'esempio calza bene :-) ) e
che abbia 3 topic:
Serie A
Serie B
Serie C

Potremmo pensare delle categorie trasversali che parlino di:


Colonna 2 Campionato
Coppa campioni
Blocco Centrale Calciomercato

Colonna1 Possiamo avere un articolo che parla di SerieA / Campionato, oppure del Calciomercato della
Serie B. Cliccando sul topic Ad esempio serie A, avremo una selezione di tutti gli articoli che
parlano di serie a, cliccando la categoria, calciomercato, avremo una selezione degli articoli
che parlano di calcio mercato indipendentemente che sia di serie A, B o C.

Sul fondo dell'articolo abbiamo altre informazioni dell'articolo: Chi lo ha inserito, Quando,
Quante volte è stato letto (Importante, il contatore funziona solo se si clicca su leggi tutto e non
¹ In effetti esiste il modo di personalizzare la visualizzazione dei blocchi in base alla pagina in cui ci si trova, tiene conto di chi ha letto solo l'abstract), quanti bytes ci sono ancora da leggere, se ci sono
ad esempio, modulo news: vediamo sia i blocchi di destra che di sinistra, modulo search vediamo solo i stati dei commenti all'rticolo e quanti e che voto ha preso l'articolo. Inoltre è possibile stampare
blocchi di sinistra. l'articolo in formato semplificato o inviare il link via e-mail ad un amico.

9 10
Cliccando su “Leggi tutto” si accede alla pagina che contiene l'articolo intero e i commenti Il modulo Feedback: Consente all'utente di compilare questo modulo conntattando il
relativi ad esso. In questa pagina l'utente può leggere l'articolo intero e interagire con esso webmaster del sito. Compilando i capi Nome, E-Mail e Testo il sistema formatterà una e-mail
attraverso una moltitudine di operazioni. che arriverà al webmaster del sito.

Può votare l'articolo esprimendo dando un giudizio sulla sua validità, può commentare Il modulo Member List: Visualizza tutti gli utenti iscritti alla comunità. E' possibile fare una
l'articolo o rispondere a commenti inseriti da altri utenti, può seguire i link associati a questo selezione degli utenti fornedo le informazioni basilari (Nome Utente, Nickname, Sito
articolo, vederne un formato stampabile e inviare il link via e-mail ad un amico. All'articolo è personale e Indirizzo E-Mail) . E' anche possibile ottenere una lista completa di tutti gli utenti e
inoltre associabile un sondaggio personalizzato. ordinarla per nome reale, indirizzo e-mail o sito personale.

Il modulo AvantGO: E' una versione molto semplificata dell'archivio news nata per essere Private messages: Tutti gli utenti registrati hanno un sistema di messaggistica interna con cui
consultata via palmare. AvantGO è infatti un sistema di archiviazione e visualizzazione delle possono scambiarsi messaggi. Nel box di login apparirà il numero di messaggi che ci sono in
pagine su schermi di palmari che, essendo di ridotte dimensioni ed avendo una bassa archivio e sarà possibile gestirli rispondendo o eliminadoli.
risoluzione (nonché una velocità di connessione bassa) necessitano di pagine semplificate.
Il messaggio che comporremo ha
Modulo Downloads: Questo modulo è molto articolato e gestisce un archivio di files diverse parti:
(presenti sul proprio sito o su siti di terzi) offrendo all'utente diverse modalità di interazione con ? Il destinatario

questo modulo. ?
Il soggetto
Nella pagina principale è possibile utilizzare un motore di ricerca interno che ricerca per ?
Le iconcine animate che
parole chiave tra tutti i files catalogati, da' poi la possibilità di aggiungere un file ad uteneti accompagnano il soggetto del
esterni (questi files non verranno aggiunti subito ma messi in una lista di attesa finché un messaggio
admin non lo renderà visibile. Possiamo inoltre fare una selezione guardando quali sono i files ? Il testo che può essere corredato di

più scaricati o quelli che hanno ottenuto un voto più alto. Sempre i questa pagina sono faccine (Icone emotive) e un aiuto per
elencate le categorie che custodiscono i files (possono esistere delle sottocategorie), l'utente formattare il messaggio in HTML
viene riconosciuto quando accede a questa area e, se dalla visita precedente sono stati aggimngendo Hyperlink, parole
inseriti nuovi files alla categoria corrispondente verrà associata l'icona “new”. sottolineate, elenchi puntati ecc ...
Una volta entrati nella sezione di
interesse possiamo scaricare il file
che ci interessa, dare un giudizio di
apprezzamento, segnalare un errore di
link inesistente all'amministratore o
vedere maggiori informazioni Il modulo recommend us: è un modulo che serve a far mandare un e-mail ad un amico per
relativamente all'autore di questo file.
raccomandare di visitare il nostro portale PHPNuke. Il messaggio che viene inviato all'amico
deve essere configurato dall'admin.
La visualizzazione della lista dei files
può essere ordinata per data di
Modulo recensioni: Questo modulo serve come archivio di recensioni/redazionali di
inserimento, per giudizio o per
popolarità (Files più scaricato). prodotti/servizi/siti. La recensione deve essere inserita da un admin o anche da utente (la
recensione necessiterà, in questo caso, di una accettazione da parte dell'admin) che, dopo
aver inserito una breve descrizione del prodotto servizio potrà esprimere il suo giudizio
assegnandovi un punteggio. E' inoltre possibile inserire una immagine descrittiva.
Le recensioni sono catalogate in ordine alfabetico e la selezione può essere fatta per lettera.

11 12
Il modulo Search: E' il motore di Il modulo Top10: Elenca i top 10 più attivi di tutto il nostro portale.
ricerca principale di PHPNuke, fa una 10 articoli più letti
ricerca full text sugli articoli, i commenti, 10 articoli più commnetati
le sezioni, gli utenti e le recensioni. E' 10 categorie più attive
possibile fare ricerche multiple (Ad. Es. 10 articoli più letti nelle sezioni speciali
Un articolo di una certa categoria scritto 10 sondaggi più votati
da un certo autore). 10 autori più attivi
10 recensioni più lette
Il modulo sections: Questo modulo è un sistema di catalogazione parallelo ai topics. Gli 10 files più scaricati
articoli inseriti in questo modulo non appaiono nel modulo news, possono essere disposti su 10 pagine più lette
più pagine e sono perciò adatti ad ospitare articoli con molti caratteri. Ogni sezione può
essere associta ad una immagine. L'articolo prevede anche un sistema di visualizzazione per Il modulo topics: Elenca le categorie principali di PHPnuke. Una volta entrati all'interno di
pagina stampabile. questo modulo abbiamo la possibilità, cliccando sull'icona corrispondente al Topic, di
Il modulo statistiche: Il modulo effettuare una selezione degli articoli e in automatico, vedere tutti gli articoli corrispondenti a
statistiche da delle informazioni basilari uel topic. Ci viene inoltre proposta una piccola interfaccia search per affinare la nostra ricerca
riguardo l'uso del portale. Dal numero di all'interno di questo argomento.
pagine totali visualizzate, al tipo di
Browser e sistema operativo utilizzato Il modulo WebLinks: E' una raccolta di links. Il modulo ha le stesse identiche funzionalità del
fino al numero di utenti iscritti, la versione modulo download (l'architettura è la stessa), il motore di ricerca per i links e l'icona new per far
di PHPnuke utilizzata ecc ... vedere i links nuovi inseriti dopo l'ultima visita.

Modulo Your Account: E' la console di amministrazione del nostro profilo utente (Funziona
solo con gli utenti registrati), le funzioni implementate sono:
Cambia le tue info: consente di gestirsi
il proprio profilo cambiando e-mail,
Il modulo Stories Archive: Archivia tutti gli articoli per mese consentendone una firma, indirizzi di istant messaging,
consultazione cronologica . Dopo aver scelto il mese vengono visualizzati tutti gli articoli con a avatar, fake mail ecc ...
fianco la bandierina corrispondente al linguaggio pubblicato. Anche in questa aerea è
possibile vedere l'articolo in formato stampabile e inviare l'articolo ad un amico. Cambia Home: crea un menu (blocco)
E' anche compreso un motore di ricerca interno e la visualizzazione dei dettagli articolo quali: personalizzato per la navigazione, ci si
a) Numero di commenti b) numero di letture c) Voto può inserire ciò che si vuole (Testi, links
immagini).
Il modulo Submit News: Gli utenti o i semplici visitatori del sito possono proporre all'admin
un articolo che verrà poi vagliato e, se gradito, pubblicato. Gli utenti non hanno tutte le Setup commenti: Configura la
possibilità di catalogazione che ha l'admin, possono infatti decidere il titolo dell'articolo, visualizzazione dei commneti
l'argomento (Topic) la lingua e il testo. Non possono categorizzarlo o scegliere se deve assegnando criteri di visualizzaizone.
andare in home page oppure no. Non possono neanche decidere una pubblicazione
temporizzata. Seleziona tema: Cambia la grafica del
sito scegliendo tra quelle disponibili
Il modulo surweys: (sondaggi), dà la possibilità all'admin di creare un sondaggio che
Logout/Exit: Ci fa uscire da quel profilo utente cancellando il cookie.
apparirà poi in un blocco o nell'elenco dei sondaggi. Gli utenti possono votare questo
sondaggio (Non più di una volta ogni 24 ore), ed eventualmente commentare. Inoltre è
possibile visualizzare la lista dei sondaggi precedenti consultandone i risultati finali. Abbiamo poi un menu principale che ci dà il riassunto di quanti e quali commneti abbiamo
inserito e di quante storie abbiamo pubblicato.

13 14
Paragrafo 3, Altri moduli non installati

Modulo Content: E' un modulo che elenca tutte le categorie (Argomenti trasversali ai topics,
Modulo Indy News: Modulo interessantissimo che gestisce la funzione “Allega/File o
ricordate?) che elenca, in prima battuta tutte le categorie presenti e, una volta selezionata la
categoria, elenca tutti gli articoli inclusi enfatizzandone l'idioma di pubblicazione. immagine” ad ogni articolo. E' possibile instatti, in fase di inserimento articolo, allegare:
Immagine: In questo caso, inserendo una gif o una Jpeg si avrà un anteprima in home page (il
Modulo Enciclopedya: E' un sistema per creare uno o più dizionari di parole. Nella prima modulo la prevede a sinistra (a destra va l'icona dei topics), cliccando poi su Leggi tutto (solo
se è presente altro testo), oppure cliccando sull'immagine la si vedrà in dimensione originale.
schermata richiede la scelta del dizionario (Evidenziando anche una bandierina che ne indica
la lingua), dopo il click si viene invitati a scegliere la lettera corrispondente alla parola Altri files:Oltre alle immagini è possibile allegare anche files (per le estensioni più comuni in
ricercata o a utilizzare il motore di ricerca interno all'enciclopedia, una volta trovata la parola “leggi tutto” si avrà l'iconcina corrispondente, per le altre una icncina di default.). Importante,
ricordate, per i files allegati, di aggiungere un testo nella sezione testo esteso, altrimenti sarà
basta cliccarci sopra e se ne scoprirà il significato.
impossibile visualizzare il link “Leggi Tutto” che visualizza sul footer dell'articolo le icone con le
info sul files e il download.
Modulo FAQ: E' un archivio di Domande/Risposte divise per categorie che l'utente può
Il sistema originariamente è un adattamento del modulo IndyNews a PHPnuke, è stato
consultare come prima soluzione ai suoi problemi. Può dividere le domande/risposte per
realizzato dal webmaster di bergamoblog.it per la versione 5.5, per la versione di phpnuke 5.6
categorie al fine di facilitare la consultazione.
l'adattamento è di spaghettibrain.com
Modulo FORUM: Nella versione 5.6 di PHPNuke è presente il lforum di Splatt.it, non
Modulo Guestbook: Consente agli utenti di inserire messaggi di saluto (come uni libro degli
sappiamo ancora se verrà integrato nelle versioni successive a Nuke ma io consiglio di
ospiti) archiviandone uno storico in cui, oltre che inserire nuovi messaggi è possibile anche
utilizzarlo comunque in quanto è un applicativo maturo e ha una comunità di supporto tutta in
leggere tutti i messaggi degli altri utenti. Non confondetelo con il forum!
italiano.
Le funzionalità implementate in questo forum (Lato utente) sono molte, i forum sono divisi per
Modulo Chat:. Esiste una chat in flash molto bella che gestisce senza refresh di pagina le
categoria, ha un motore di ricerca interno dedicato, gli utenti possono associare ad ogni Post
chat degli utenti. É molto interessante in quanto esiste con le skin di colore diverso in modo
(intervento nel forum) delle icone attinenti all'argomento, possono inserire la propria firma
da dare la possibilità all'admin di scegliere quella che più si adatta al sito.
personalizzata, votare la discussione, vedere icone diverse a seconda del grado di attenzione
che una specifica discussione ha generato, vedere quante domande e risposte ha avuto un
Modulo Dmoz/ODP: Integra il motore di ricerca Open Source Dmoz/Open Directory Project
certo thread, vedere il profilo di quell'utente e moltissime altre funzioni ...
all'interno del portale PHPnuke. E' come avere un motore potente come yahoo integrato nella
propria grafica e nelle proprie pagine.

15 16
Capitolo 3, Struttura di backend, cosa vede l'admin
Paragrafo 4, I blocchi preinstallati Paragrafo 1, Introduzione

Alla pagina di amministrazione si accede richiamando la pagina admin.php (


Blocco Advertising: Da questa release di PHPnuke abbiamo la possibilità di inserire i www.vostrosito.com/admin.php) ed effettuando il login inserendo il vostro user e la vostra
nostri banners anche nei blocchi (Bottoni di diverse dimensione) gestendoli come fosse il password. (Ricordate che gli utenti normali non devono fare login dalla pagina admin.php ma
nostro circuito banner contandone click, impressions ecc ... dall'apposito modulo.).

Content: Visualizza il contenuto più attivo. Una volta loggati l'admin si trova davanti una interfaccia di amministrazione che elenca tutte le
aree su cui può agire. Se l'admin è un superadmin potrà lavorare su tutte le aree del sito, se
Encyclopedia: Elenca tutte le enciclopedie attive, linkando si accederà direttamente invece è un admin con poteri limitati visualizzerà i link relativi alle aree su cui è abilitato a
all'interno dell'elenco dei temini dell'enciclopedia scelta. lavorare. In fase di configurazione delle preferenze potremo decidere se visualizzare una
interfaccia di amministrazione testuale o una interfaccia di amministrazione ad icone. A
Forums: Il blocco forums elenca gli ultimi 10 messaggi postati e un motore di ricerca che seconda della nostra scelta ci apparirà o una interfaccia ad admin testuale o una ad icone.
esegue una query su tutti i post del forum.

Last 5 articles: Elenca gli ultimi 5 articoli pubblicati evidenziando quante letture ha avuto e
quanti commenti sono stati fatti.

Last 10 referers: Elenca quali sono stati i siti da cui sono arrivate le ultime 10 visite

Ephemerids: E' un blocco che gestisce gli eventi ricorrenti. Elenca gli eventi passati accaduti
nella stessa data ma negli anni passati.

Reviews: Elenca in un blocco le recensioni del giorno.

Sections Articles: Elenca le sezioni attive. Cliccando su una di esse si arriva alla lista di
articoli corrispondenti.

Top 10 Downloads: Elenca i 10 files più scaricati

Top 10 Links: Elenca i 10 link in archivio più cliccati

Ricordate che quando scrivete nuovi moduli di amministrazione dovete realizzare anche
l'icona corrispondente altrimenti, in modalità di amministrazione visuale sarà visualizzato solo
il link testuale corrispondente al vostro modulo.

Dimenticavo!! Per impostare la modalità di amministrazione grafica dovete andare su


preferenze e impostare in “Opzioni grafica” la voce “Menu grafico in amministrazione” su SI.

17 18
[Queste info sono presenti anche nel Cap 7]
Paragrafo 2, Le funzioni di admin
I blocchi di phpnuke possono essere di 3 tipi differenti:
Funzione “Aggiungi articolo”: E' la funzione che aggiunge al modulo News un nuovo
articolo. Le opzioni che ci sono offerte sono molte e vanno analizzate una per una: ?
RSS/RDF: Sono blocchi che prelevano news da altri siti che mettono a disposzione un file in
Titolo: Inserisce il titolo della news
formato standard per la lettura del testo contenuto in esso. (Ad esempio il sito
Argomento: Categorizza la news per topic
spaghettibrain.com che mette a disposzione le news per altri siti).
Categoria: Categorizza l'articolo per categoria
Pubblica in home page: Se questa opzione non è selezionata allora l'articolo sarà visualizzato ? Blocchi di contenuto: Sono blocchi in cui inseriamo del testo semplice o del testo HTML che
solo nei topics o nelle categorie relative e non nella pagina principale del modulo news verrà poi visualizzato all'interno del blocco (Vedi esempio seguente)
Attiva commenti: Se non attivato gli utenti non possono commentare l'articolo
Lingua: Se nelle preferenze abbiamo attivato il nostro PHPNuke come Multilingua ci viene ? Blocchi di files: Sono script in PHP che eseguono determinati comandi (vedi paragrafo
chiesto in quale interfaccia visualizzare l'articolo (Es. Se pubblico un articolo in inglese lo
successivo)
visualizzero solo se clicco sulla bandierina inglese e così via ...)
Testo Breve: E' il testo che appare come anteprima
[Fine info disponibili anche nel Cap. 7]
Testo esteso: E' il testo che appare quando clicco su “Leggi tutto”
Articolo programmato: L'admin ha la possibilità di scegliere quando l'articolo deve essere
Per creare un nuovo blocco, che andrà ad aggiungersi alla lista dei blocchi disponibili,
pubblicato decidendone la data e l'ora. Non è una funzione obbligatoria ma è molto utile.
dobbiamo scorrere la pagina fino in fondo e posizionarci su “Aggiungi blocco”.
Antemprima o Invia: A seconda della scelta l'aticolo viene mostrato in anteprima solo all'admin
o pubblicato direttamenter Il campo titolo è un elemento comune per tutti e va comunqe compilato.
Sondaggio: Vi è la possibilità di allegare un sondaggio ad uno specifico articolo, nel caso
venga attivata questa opzione quando si clicca su “leggi tutto” apparirà un blocco sondaggio
Se vogliamo creare un blocco RSS/RDF dobbiamo scegliere la fonte di notizie tra l'elenco
come quello riportato nello screenshot.
disponibile o aggiungerne una cliccando su setup. In questo caso forniremo il percorso del file
da leggere (Questa info generalmente ci viene fornita dal webmaster del sito da cui
preleviamo le news, o se è un sito realizzato con phpnuke semplicemente richiamando il file
www.nomesito.com/backend.php). Gli altri campi vanno comiplati tutti ad eccezione di:
Nomefile e Contenuto.

Se vogliamo creare un blocco di testo semplice tralasceremo invece il campo RSS/RDF File
Url e compliremo invece Contenuto (Tralasciando nomefile)

Se invece vogliamo includere i file php che si interfacciano con db o funzioni particolari allora
tralasceremo di compilare Contenuto e RSS/RDF e sceglieremo tra i files disponibili quello
che creerà il nostro blocco. (Se vuoi maggiori info su come creare i blocchi vai al cap. 7).
Funzione “Backup DB”: E' la funzione che ci consente di creare un file di backup che
contiene struttura e contenuto del database di PHPnuke. Questo è molto utile nel caso si Ricordiamo che prima di pubblicare un blocco ci viene mostrata una anteprima.
perdano dei dati.
Una volta cliccato su Ba ckup DB è necessario attendere che il server crei il file. Il tempo varia Funzione Manger Contenuti: Questa funzione ci consente di aggiungere nella sezione
da pochissimi secondi a qualche minuto nel caso di database di grosse dimensioni. Una volta
contenuti nuove categorie e nuovi contenuti all'interno delle stesse. E' molto simile agli articoli
creato il file ci verrà chiesto di scaricarlo. Ricordate di custodire il vostro backup in un posto
ma con meno funzioni. Una feature degna di nota è la possibilità di aggiungere il tag
sicuro! <!--pagebreak--> per gestire un articolo multipagina.
Funzione “Blocchi”: E' una funzione molto importante in quanto ci consente di gestire le
Funzione Downloads: Crea categorie, sottcategorie e aggiunge file all'area download. Il
colonne di sinistra e di destra del nostro portale. La schermata si presenta con un elenco dei
sistema, per motivi di sicurezza non conente di fare l'upload via http dei files ma solo di linkarne
blocchi che abbiamo creato, possiamo attivarli, disattivarli, editarli cambiando posizione e
la risorsa. Se ad esempio il file si trova nella directory files del nostro sito dovremmo linkare
ordine e assegnando dei permessi. Possiamo infatti decidere se un blocco lo vedono tutti,
www.nomesito.com/files/file.zip. Questo ci dà la possibilità di linkare anche risorse esterne.
solo gli utenti registrati, solo gli admin. Inoltre possiamo far visualizzare il blocco ad una
specifica lingua.

19 20
Funzione Edit Amministratori: Dà la possibilità di aggiungere nuovi amministratori
defininedone anche i livelli di accesso. Oltre che avere un super amministratore è infatti
possibilie attivare solo delle funzioni parziali per i vari admin. Preferenze: Questo argomento verrà trattato nel paragrafo successivo.

Funzione Edit Utenti: Da qui è possibile aggiungere manualmente nuovi utenti e modificare Recensioni: Consente di inserire delle recensioni. In ogni recensione è possibile inserire un
quelli esistenti scegliendone il profilo attraverso la digitazione del nickname nell'apposito form. voto, un link relativo all'argomento e una eventuale immagine che raffiguri ciò di cui si parla.

Funzione Enciclopedia: Consente di inserire più elenchi di parole (Scegliendo anche la Manager Sezioni: Gestisce le sezioni e i contenuti relativi ad essa. Agli argomenti delle
lingua), dopo aver creato una enciclopedia si può procedere all'inserimento dei termini. sezioni è possibile associare una immagine come avviene nei topics. E' possibile aggiungere
degli articoli alle sezioni selezionando la categoria di appartenenza attraverso un “radio
Funzione Eventi Storici: Consente di inserire degli eventi ricorrenti scegliendo la data e button”, dividere i testi lunghi attraverso il tag <!--pagebreak--> ed editare o cancellare le
inserendo una descrizione. sezioni già aggiunte.

Funzione FAQ: Consente di creare delle categorie principali di Faq e tutte domande/risposte Articoli: Gestisce gli articoli inseriti da terzi. E' l'area di moderazione dell'area News già
collegate ad essa. analizzata in questo paragrafo.

Splatt Forum: La gestione del forum si divide in 4 aree: Sondaggio: Crea un nuovo sondaggio per il portale, edita o cancella quelli vecchi. E' possibile
inserire fino a 10 risposte diverse ad ogni sondaggio. Contenstualmente alla creazione del
Preferenze: Gestisce le carateristiche del forum (Si consiglia, per ragioni di sicurezza, di sondaggio è possibile, attraverso la stessa pagina, pubblicare una news che ne annuncia la
disattivare la possibilità di postare in HTML). creazione.

Categorie e forum: Definisce le categorie, i forum inclusi in esse, i moderatori di ogni forum, i Manager Argomento: Consente di creare nuovi topics e associare, attraverso un menu a
livelli di accesso ecc... Un forum per essere visibile DEVE avere attivato almeno un tendina, le immagini relative.
moderatore.
Links: Consente di moderare links pubblicati da terzi, creare categorie in cui archiviare i links,
Ranghi: Definisce le soglie di attenzione per i forum. Al raggiungimento di N. Post verranno eliminare links, vedere segnalazioni degli utenti che avvisano di Broken Links e, attraverso una
associate delle immagini atte ad attirare l'attenzione dei visitatori interfaccia molto simile a quella dei download di aggiungerne di nuovi.
Utenti: Gestione dei moderatori attraverso la lista completa degli iscritti. Logut Exit: Esce dall'area di admin rendendo non valido il cookie. E' una buona prassi fare
login quando si ha finito di lavorare con phpnuke. Per questioni di sicurezza.
Http Referrers: Visualizza la provenienza degli ultimi N. Accessi

Messaggi: Crea un blocco centrale in home page per inviare messaggi selettivi agli utenti. I
messaggi possono essere inviati ai soli iscritti, ai non iscritti, agli admin o effettuare una
selezione per lingua.

Moduli: consente di gestire i moduli installati. I moduli possono essere attivati, disattivati o
possono essere attribuiti ad essi diritti di visualizzazione. Un modulo può essere visto da tutti,
dagli utenti registrato o dagli admin.

Newsletter: L'admin PHPNuke può inviare newsletter agli utenti iscritti che hanno acconsentito
a riceverle o inviarle in modo massivo a tutti gli utenti iscritti. Attenti allo spam!

Optimize DB: Ottimizza i dati del DB velocizzandone le performance.

21 22
Attivare Banners?: Imposta l'opzione rotazione banners sul sito

Paragrafo 3, Le Preferenze di PHPNuke Per i piè di pagina immaginiamo di dover inserire 3 testi in una tabella, larga al 100% e
centrata.
Ecco quali sono i parametri richiesti per la configurazione del file config.php attraverso l'area
admin/preferenze: Piè Pagina Linea 1: Primo testo da inserire

Nome sito: Corrisponde al tag <title>, è quello che appare nella barra in alto a destra del Piè Pagina Linea 2: Secondo testo da inserire
borwser. E' molto importante per i motori di ricerca.
Piè Pagina Linea 3: Terzo testo da inserire
Url sito: E' l'indirizzo internet del vostro sito
Backend Titolo: Titolo che deve apparie nel file da dove altri siti
Logo: E' il logo del vostro sito. In temi standard e poco personalizzati è quello che ppare in
alto a sinistra Backend Linguaggio: Scelta del formato linguaggio

Slogan: Equilae al tag <description>, anche lui è molto importante per i motori di ricerca Notifica nuovi inserimenti via email? Imposta la ricezione di una email da parte dell'admin
quando un utente inserisce una nuova news
Data inizio sito: E' la data che comparirà nel modulo delle statistiche
Email a cui inviare il messaggio: Indirizzo e-mail a cui viene mandato il messaggio
E-Mail amministratore: E' l'email a cui arrveranno le notifiche di inserimento articolo da
parte di terzi e del modulo contact us Soggetto Email:

Articoli in Top Page: Specifica quante news devono essere visualizzate nalla pagina Messaggio E-Mail: Testo di introduzione (Es. Ti hanno inviato un nuovo messaggio:)
principale del modulo news
Email Account (Da): Serve a visualizzare da chi è stato inviato il messaggio
Articoli in Home: Specifica quante news devono essere visualizzate nalla pagina principale
del sito (Se il modulo news è il principale). Tipo di Moderazione: Sceglie se esiste una moderazione per i commenti

Articoli nel Box Articoli Vecchi: Specifica quanti articoli devono essere visualizzati nel box Limite Commenti in Bytes: Sceglie una dimensione massima per i commenti
articoli passati
Nome di Default Utente Anonimo: Sceglie un nome da assegnare a chi si logga come
Attivare Ultramode?: Specifica se altri siti possono prendere i titoli delle news dal nostro anonimo
sito
Menu Grafico in Amministrazione?: Sceglie se avere icone in amministrazione o avere
Abilita Anonimi a Postare?: Specifica se gli utenti anonimi possono scrivere commenti una semplice amministrazione testuale
Tema di Default: Definisce quale è la grafica principale del sito Lunghezza Minima password Utenti: Per ragioni di sicurezza è utile impostare una
password relativamente lunga
Seleziona la Lingua: Definisce quale è la lingua principale del sito
Attivare Referenti HTTP? Sceglie se attivare le statistiche relative alla provenienza delle
Formato Ora Locale: Definisce il formato dell'ora locale (Dipende dal server, se su linux si visite
controlla in /usr/share/locale)
Quanti Referers vuoi al Massimo? Sceglie il numero massimo di statistiche relative alla
Attivare le caratteristiche multilingua?: Scegliere se il sito deve supportare la funzionalità provenienza delle visite (Max 2000)
multilingua oppure no
Attivare Commenti in Sondaggi? Sceglie se far commentare i sondaggi oppure no
Mostrare le bandierine al posto della lista?: Se ativata la funzione multilingua allora si
decide se il blocco deve far vedere le bandierine o la tendina. Attivare i commenti negli articoli? Sceglie se far attivare i commneti negli articoli oppure
no.

23 24
Capitolo 4, Installare PHPNuke
Paragrafo 1, Descrizione generale

Questo manuale è quello già presente su spaghettibrain e su vari altri siti, non è stato Impostazione dei permessi sui files:
necessario modificarlo se non nell'impaginazione in quanto ritanuto già abbastanza esaustivo
in tutti i dettagli. Importante: Questo processo vale solo se il vostro PHPNuke sarà installato su server
Linux/Unix, se invece lo installerete su sistemi operativi Window$ non dovrete fare nulla.
Gli screenshot riguardanti la procedura di installazione, al contrario di quelli degli altri capitoli,
riguardano la piattaforma windows. Questo per ridurre il numero di malintesi e di ulteriori Impostare i permessi sui files serve a far eseguire loro certe operazioni (Scrittura,
richieste da auiti dalla community windows (Dai feedback avuti la communyty Linux e Esecuzione ecc..) una volta richiamati. Impostarli in modo corretto è importante affinché
FreeBSD sembra più autonoma in tal senso). PHPNuke possa lavorare al pieno delle sue funzionalità.
Per l'installazione di PHP + Mysql + Apache, PHPMyadmin ecc... fate riferimento al capitolo I permessi da dare sono i seguenti: (Permessi di base da modificare, vedere il cap. 9 sulla
10 dove troverete note e links a tool utili per emulare PHPNUke sul vostro client. sicurezza in proposito)

Queste istruzioni sono valide per tutti i PHPNUke fino alla versione 5.6, dalla 6 in avanti la Files: 666
procedura di installazione sarà molto più semplice. Cartelle: 777
Paragrafo 2, Procedura di installazione Con WS_FTP dovete evidenziare i files o
Download le cartelle a cui volete dare i permessi e,
con il tasto destro del mouse selezionare
Beh ... Qui c’é poco da dire, basta che andite su uno dei siti che mettono a diposizione i files e l’opzione CHMOD.
lo scaricate. C’é solo un piccolo appunto da fare, se usate windows e scaricate una versione
compressa che ha come estensione .tar.gz non preoccupatevi, il vostro Winzip lo supporta Una volta fatto dovete impostare i
senza problemi. Una volta scricato il files scompattatelo e “Buttate” tutto il contenuto in una permessi su tutte le cartelle e per tutti i
cartella che create sul desktop e che chiamerete “Nuke5” o come volete voi ( files, questo procedimento vi porterà via
I siti da cui potete scaricare PHPNuke sono: www.phpnuke.org, www.spaghettibrain.com ecc..) un po’ di tempo ma è molto importante
che lo facciate. Inoltre va fatto ogni volta
FTP Dei files
che inserite un nuovo files o modulo al
Bene, ora non vi resta che caricare i files all’interno della directory principale del server che vi vostro PHPNuke.
ospita. Mi raccomando, prima di installare PhpNUKE verificate con il vostro provider che i
suoi server supportino PHP e MySQL.
Un’altra raccomandazione, non caricate tutto quello che scompattate. Una volta estratti i files
troverete la struttura della cartella così come è raffigurata nell’immagine.
Non dovete fare
l’Upload di tutti i files
della cartella, nella
directory principale del
vostro spazio web deve
essere caricato solo il
contenuto della
directory HTML (perciò
doppio click su Html, e Permessi impostati su 777
Permessi impostati su 666
caricare tutto quello che
c’é dentro)

25 26
Installare PHPNuke attraverso PHPMyadmin: Quello che dovete fare adesso è cliccare
su “Sfoglia” andando a cercare il file .sql
- Cosa è PHPMyadmin che riporta la struttura del Database di
- Come installare il DB di PHPNuke con PHPMyadmin PHPNuke. Una volta trovato basta
cliccare su Go e il database viene
Cosa è PHPMyadmin installato. Naturalmente se ci sono errori
questi verranno riportati alla fine del
Phpmyadmin è un sistema Visuale per la gestione di un Database MySQL. E’ scritto in PHP procedimento di installazione Così come
e serve per visualizzare il contenuto dei Database che sono installati sul server (o client) su il messaggio di “Operazione Riuscita”.
cio lavora MySQL. Attraverso questa interfaccia si possono creare nuovi database,
modificare quelli esistenti ed intervenire sui contenuti dei singoli campi. - Altre opzioni di PHPmyadmin non relative all’installazione di PHPNuke le trovate
sul tutorial pubblicato su www.spaghettibrain.com
Come installare il DB di PHPNuke con PHPMyadmin Il file Config.php:
Una volta che avete fatto accesso alla vostra interfaccia di PHPMyadmin vedrete, nella barra a Ok, l’ultima cosa che rimane da fare prima di iniziare a gestire il vostro sito è configurare il
sinistra l’elenco dei Database che avete a disposizione. Nella parte centrale (Se siete file config.php, questo è importante perché si stabilisce una connessione tra i files php di
autorizzati) vedrete invece una maschera che vi consente di crearne di Nuovi. PHPNuke e il Database MySQL che lo gestisce.

Cliccando sulla barra di sinistra, in I parametri da configurare sono davvero pochi. Aprendo il file quello che vi apparirà è:
corrispondenza del DB che avete scelto $dbhost = "localhost"; (Al posto di localhost dovrete mettere l’Host del Database)
vedrete che il menu a tendina scenderà
mostrando la struttura del Database (e in $dbuname = "root"; (Al posto di root dovete mettere il vostro username)
contemporanea la pagina centrale mostrerà la $dbpass = ""; (Qui dovrete inserire la vostra password)
struttura ingrandita del DB con una serie di
Opzioni tutte riportate nel fondo Pagina. Sono $dbname = "nuke"; (Qui al posto di Nuke dovrete inserire il nome del vostro Database)
quelle le opzioni che ci interessano per $system = 0; (Lasciare 0 se si è su sistemi Linux/Unix, mettere 1 se si è su un server Window$)
l’installazione di PHPnuke.
$prefix = nuke; (Io consiglio di lasciare Nuke, è il prefisso che va in ogni tabella del DB)

Facciamo un esempio:
Host DB: 212.110.12.297
User DB: Pippo
Password DB: Topolino
Nome Database: Orazio
Sistema Operativo Usato: Linux (E ci mancherebbe altro!!! :-) )
Il file config.php Verrà compilato in questo modo:

27 28
Capitolo 5, L'architettura e la struttura
Paragrafo 1, Descrizione generale

$dbhost = " 212.110.12.297 "; La struttura di phpnuke è organizzata in moduli, tutti i files vengono infatti gestiti da pochi altri
che si trovani in home page e che includono, a seconda della stringa passata, il modulo
$dbuname = “Pippo"; richiesto.
$dbpass = “Topolino ";
Questi compiti sono svolti da 3 sole pagine:
$dbname = “Orazio"; index.php: Per far visualizzare la pagina principale
modules.php: Per includere i moduli interni.
$system = 0; admin.php: Per includere l'interfaccia di admin.
$prefix = nuke;
Non è infatti possibile richiamare un modulo assegnadogli un percorso diretto, questo per
rendere facile l'intallazione di nuovi moduli, gestire in modo indipendente la grafica
(dovremmo sennò cambiare i percorsi delle immagine se ci spostiamo ad una directory
Ricordate Le Maiuscole!!! Sui sitemi linux è tutto case sensitive, se scrivete uno user o una interna, avere pochi files in root e rendere più sicuro il sistema.
password senza le maiuscole o le minuscole al posto giusto il sistema non vi farà loggare.
Tutto viene richiamato, come detto precedentemente, attraverso stringhe che passano al file
maodules.php riguardo i files da includere. Ad esempio se vogliamo richiamare il modulo
Ok, Abbiamo finito, l’unica cosa che vi rimane da fare è entrare nella sezione di Topics la stringa sarà la seguente: http://www.vostrosito.com/modules.php?name=Topics
amministrazione (www.vostrosito.com/admin.php) . La prima volta vi Loggerete usando come
user ID “God” e come Password “Password”. Vi consiglio di cambiarle il prima possibile. L'istruzione che viene mandata è “includi nella pagina modules.php il file index.php che si
trova nella cartella modules/Topics/”.

Gli altri files presenti in root sono:


Risorse:
auth.php: Gestiscono l'autenticazione attraverso i cookies.
Se cerchi Hosting per PHPnuke Spaghettibrain ha delle offerte Customizzate ... Dagli mainfile.php: Contiene tutte le funzioni necessarie alla gestione di PHPNuke
un occhiata! header.php: gestisce le variabili relative all'header (Inclusione di Metatag, Javascript ...)
footer.php: variabili relative al footer.
Spaghettibrain.com è il sito italiano di Supporto al PHPnuke dove troverete moduli, patch di backend.php: gestisce l'output delle news che possono essere prelevate da altre siti
sicurezza, forum di supporto e molto altro. Fateci un giretto spesso. ultramode.txt: idem
robots.txt: contiene le istruzioni per i motori di ricerca dando come informazione quali sono
le cartelle da non indicizzare

29 30
Paragrafo 2, Struttura delle cartelle Paragrafo 3, La gestione della pagina principale

Admin: Contiene 4 sottocartelle (Links, language, case, modules) che gestiscono i vari Il file index.php è un file molto semlice che ha il compito di richiamare nella pagina principale
moduli di amministrazione. La cartella che ospita i files operativi è modules/admin/ di PHPNuke il modulo che si è scelto come modulo di default che apparirà nella pagina
principale del nostro sito.
Blocks: Contiene tutti i blocchi che vengono inclusi nei blocchi laterali
Ecco in dettaglio quello che avviene quando viene richiamata la pagina index.php:
Images: Contiene tutte le immagini relative a PHPnuke, ad esempio nella cartella topics
vanno archiviate le immagini dei topics che appariranno nelle news, in banners vanno inseriti Viene incluso il file mainfile.php
tutti i banners in rotazione ecc ... Viene fatta una query sul database per vedere quale è il modulo impostato come principale
Viene fatto un controllo sulla provenienza del visitatore (Se proviene da qualche sito che ci
In include ci sono tutti i files che sono necessari alla gestione di particolari situazione questi linka questo evento viene rilevato e inserito in una tabella del database).
files non lavorano autonomamente ma vengono inclusi in altri files, principalmente in
mainfile.php e header.php. Vengono inoltre fatti dei controlli e definiti dei messaggi di errore se ci sono problemi nel
I files sono: collegamento del DB. Questo evita (In parte) che vengano trasmessi i messaggi di errore del
counter.php: Serve ad identificare gli utenti in base al sistema operativo utilizzato, browser, la php. Anche se ci sono problemi la pagina presenterà un design standard ma con un
pagina di provenienza, data della visita ... messaggo di errore definibile all'interno.
javascript.php: Include tutti i javascript necessari (Se ne avete bisogno di particolari includeteli
in questo file).
meta.php: gestisce le parole chiave da assegnare nei motori di ricerca e altri parametri
dell'header. E' un ottimo sistema per imparare a creare le parole chiave e posizionarsi con un
buon ranking nei motori di ricerca.
my_header.php : Gestisce il messaggio con disclaimer in home page.
sql_layer.php: serve a gestire l'astrazione dei database. Trasforma le istruzioni SQL nel
linguaggio del database che si è scelto. Ricordiamo che PHPNuke gestisce differenti di
Database.

Language: ha all'interno i files di traduzione del modulo base di PHPnuke. Il file di linguaggio
deve essere nominato lang-nomelingua.php. Attenzione! La traduzione dei moduli deve
essere inserita nelle apposite cartelle (modules/languange) e non messi in coda a questo file
come avveniva in precedenza.

Modules: I moduli di PHPnuke sono tutte le funzionalità che possono essere aggiunte. Nella
cartella Modules vanno inserite le cartelle dei nuovi moduli.

Themes: Qui vengono aggiunte le interfacce grafiche dette “Temi”, ogni cartella ha il nome del
tema in questione che contiene un file principale che si chiama theme.php e tutti i files di
supporto.

La cartella upgrades contiene solo i files che servono ad upgradare il sistema da una
versione precedente a quella attuale.

31 32
Paragrafo 4, La gestione dei moduli Paragrafo 5, La gestione del'admin

Per una questione di ordine i moduli vengono gestiti attraverso l'inclusione dei file presenti Admin: Contiene 4 sottocartelle (Links, language, case, modules) che gestiscono i vari
nelle sottocartelle che li ospitano, ogni modulo ha una propria cartella all'intrerno della cartella moduli di amministrazione. La cartella che ospita i files operativi è admin/modules, è qui che
modules. sono presenti i file che eseguono le operazioni.

Per essere richiamati i files dei moduli vengono inclusi nel file modules.php passandogli delle La cartella admin/links invece dice che modulo di admin deve richiamare e posiziona una
variabili. La pagina principale dei moduli deve chiamarsi obbligatoriamente index.php, le voce in admin per quel determinato modulo.
eventuali altre pagine presenti nel modulo avranno una variabile aggiuntiva all'interno della
stringa che le richiamano. Esempio (Modulo di amministrazione per le FAQ):

Ad esempio nel modulo avantgo per richiamare il file index.php basta passare, nella stringa, il if (($radminsuper==1) OR ($radminfaq==1)) {
nome del modulo (di default viene cercato index.php) adminmenu("admin.php?op=FaqAdmin", ""._FAQ."", "faq.gif");
}
modules.php?name=AvantGo
Questo modulo:
Se invece volessimo richiamare una pagina diversa da index.php (prendiamo print.php), la Verifica i diritti di amministrazione (Questo modulo può essere amministrato o dal
stringa che dovremo passare è: superadmin o da un admin che ha abilitato il livello per le FAQ

modules.php?name=AvantGo&file=print Passa un case (op=FaqAdmin) che dice al file admin.php (che include tutti i moduli di admin)
che modulo andare a richiamare, associa un valore per tradurre il termine faq e associa una
ossia la variabile file con un valore (print) che corrisponde al nome del file senza l'estensione immagine per l'amministrazione visuale (faq.gif).
.php
La cartella admin/case invece serve a definire che modulo usare in determinati case. Questo
All'interno della cartella modules/nomemodulo è anche presente una sottocartella che si è importante quando, usando lo stesso file di admin si vogliono fare più operazioni usando i
chiama language. In questo modo gestiamo in modo semplice ed immediato la funzione case.
multilinguaggio all'interno dei moduli. Case1 = inserisci
Case2 = cancella
Il file modules.php lavora in questo modo: ecc ...

Include il mainfile.php Infatti dice che modulo richiamare al varificarsi di un case. Ad esempio, nel modulo faq i case
Verifica se il modulo è attivo sono molti, veidamo solo gli iltimi 2:
Verifica se la stringa passa un nome di file diverso da index.php
Verifica i permessi sul modulo (Se lo può vedere chinque, solo utenti registrati o solo admin) case "FaqAdmin":
case "FaqCatGo":
include ("admin/modules/adminfaq.php");
break;

Entrambi i case richiamano il file adminfaq.php ma gli fanno fare operazioni diverse. Il primo
richiama il file nella schermata di default, il secondo invece dà l'ok ad inserire una nuova
categoria.

Questo avviene attraverso una stringa tipo: admin.php?op=FaqAdmin nel primo caso e
admin.php?op=FaqCatGo nel secondo.

33 34
Capitolo 6, Personalizzare la grafica di PHPNuke
Paragrafo 1, Come è strutturato un tema di PHPnuke

Personalizzare la grafica del proprio portale è molto importante affinché non si creino Cloni di Il file theme.php è il cuore di tutta la gestione grafica di PHPNuke, l'inclusione di file HTML
PHPNuke che non trasmettono in nessun modo un messaggio di professionalità del webmaster non avviene in tutti i temi, alcuni sviluppatori includono tutto l'HTML nel theme.php, abbiamo già
che gestisce il sito. detto che includerlo separatamente ci risolve molti problemi tra cui lqa formattazione
dell'HTML da inserire nel PHP e la possibilità di editare il tutto con un editor visuale.
La personalizzazione del portale parte proprio dalla parte grafica, saper mettere le mani su di
un tema di PHPnuke vuol dire poter giocare con tutti gli elementi grafici che abbiamo a Il theme.php è il file che crea le funzioni che gestiscono tutti i componenti di PHPNuke (header,
disposizione. footer, parti centrali, blocchi ...).

Il tema di esempio che utilizzeremo in questo capitolo è il NukeNews, realizzato direttamente da La funzione themeheader(); gestisce la testata del sito. E' composta da diverse tabelle che
Francisco Burzi per il suo PHPNuke. E' un tema composto da molti file html che vengono inclusi vanno a formare l'intestazione, a volte definisce anche alcuni elementi del tag body che non
nel theme.php. Questa è una ottima soluzione che consente di poter gestire attraverso un editor sono inclusi nel foglio di stile e delle variabili che poi vengono posizionate all'interno dei files
come DreamWever la parte grafica mettendo mano pochissimo al codice PHP. .html che vengono inclusi.

Il tema nukenews è strutturato in questo modo: Esempio: la variabile $theuser viene definita all'interno della funzione themeheader() viene
poi richiamata nel file header.html in una tabella:
theme.php: Gestisce le funzioni principali e le varibili dei colori di sfondo
tables.php: gestisce le funzioni opentable(); e closetable(); Codice presente in theme.php (definisce la variabile $theuser)
header.html: if ($username == "Anonymous") {
footer.html $theuser = "&nbsp;&nbsp;<a href=\"modules.php?name=Your_Account&op=new_user\">Create
blocks.html an account";
center_right.html } else {
left_ceter.html $theuser = "&nbsp;&nbsp;Welcome $username!";
story_home.html }
story_page.html
Codice presente in header.html (visualizza la variabile $theuser)
Questi files vengono inclusi nelle funzioni definite in theme.php
<td width="15%" nowrap><font class="content" color="#363636">
<b>$theuser</b></font></td>
Abbiamo poi un foglio di stile chiamato style.css (style/style.css) che viene incluso nel file
header.php che si trova in root. Per convenzione il foglio di stile deve chiamarsi sempre La funzione themefooter(); gestisce la parte in fondo del nostro portale. Ha degli elementi
style.css e deve essere sempre contenuto in una cartella chiamata style all'interno della interessanti da prendere in considerazione:
cartella del nostro tema. Innanzitutto identifica se la pagina visualizzata ha la variabile $index==1, in questo caso
verranno inseriti anche i blocchi di destra, in caso negativo no.
Le immagini generalmente venongono raggruppate in una cartella chiamata images che si trova
sempre nella cartella del nostro tema. Allora la struttura della cartella del tema NukeNews sarà: Viene poi definito quali sono i messaggi del footer (Quelli che vengono prelevati da
themes/NukeNews config.php) e li inseriscono tutti in una variabile che viene poi richiamata dal file footer.html.
themes/NukeNews/style/
themes/NukeNews/images/ La funzione themeindex(); gestisce le news in home page. E le formatta aggiungendo elementi
a seconda di diversi casi utilizzando la funzione if. Inoltre include il file story_home.htm.
Ricordate sempre che le lettere devono rispettare la distinzione tra maiuscolo e minuscolo in
quanto se installati su sistemi Unix è necessario attenersi a questa regola. La funzione themearticle(); gestisce invece la pagina interna delle news (quella che si vede
cliccando “Leggi tutto”, ricordiamo che la parte del layout in questo caso viene gestita
includendo il file story_page.htm ma i blocchi che devono essere inclusi (Es. Il sondaggio
dell'articolo, i liks correlati ecc sono definiti dal modulo delle news).
35 36
La funzione themesidebox() gestice invece il layout dei box che noi creiamo o che troviamo
già fatti (Vedi Cap. 7), include anch'esso un file chiamato blocks.htm che ne definisce lo stile e function OpenTable() {
global $bgcolor1, $bgcolor2;
il layout. echo "<table width=\"100%\" border=\"0\" cellspacing=\"1\" cellpadding=\"0\"
bgcolor=\"$bgcolor2\"><tr><td>\n";
Abbiamo trascurato un elemento del file theme.php, che sono le variabili di formattazione del echo "<table width=\"100%\" border=\"0\" cellspacing=\"1\" cellpadding=\"8\"
testo, alcuni sono inserite nel css (foglio di stile) ma altre sono invece definite all'inizio del file bgcolor=\"$bgcolor1\"><tr><td>\n";
theme.php. Vediamo quelle del tema NukeNews: }

$bgcolor1 = "#efefef"; Molto semplice la sintassi no?


$bgcolor2 = "#cfcfbb"; Si apre la funzione
$bgcolor3 = "#efefef"; Vengono richimate le varibili necesarie ( $bgcolor1, $bgcolor2)
$bgcolor4 = "#cfcfbb"; Si apre una tabella larga il 100%
$textcolor1 = "#000000";
se ne definisce il colore di background
$textcolor2 = "#000000";
Apri Riga, Apri Colonna
Come vedete in queste variabili sono espressi i valori in formato esadecimale, dice il Burzi: Si inserisce una nuova tabella larga il 100% (per i bordi)
Gli si definiscono le caratteristiche di larghezza, altezza ecc ...
riga colonna
Definite i colori del vostro sito, $bgcolor2 è generalmente usato per i bordi delle tabelle
come potete vedere nella funzione opentable(), $bgcolor1 per il background delle tabelle. Ci si ferma alla colonna perché è qui che andrà inserito il contenuto della tabella (Infatti in
Gli altre due variabili di background seguono lo stesso criterio. $textcolor1 e $textcolor2 opentable da cosa partiremo per chiudere questa tabella? Ma da Chiudi Colonna, Chiudi riga
servono per formattare il colore del testo. ovviamente!!)
Non ci resta che esaminare quello che è contenuto all'interno del file tables.php . Questo file function CloseTable() {
crea 4 funzioni (opentable(); closetable(); opentable2(); closetable2(); ) che non fanno altro che echo "</td></tr></table></td></tr></table>\n";
includere dei tag html che aprono e chiudono delle tabelle in modo predefinito. }

E' molto comodo da usare nella creazione dei moduli (Vedi Cap. 8), infatti non dovete stare a Infatti ...
riscreivere l'html ogni volta per creare una tabella ma basta la seguente sintassi: Si apre la funzione
opentable(); Chiudi Colonna, Chiudi Riga
echo”Contenuto della tabella”; Chiudi Tabella Interna
closetable(); Chiudi Colonna, Chiudi Riga
Chiudi Tabella Esterna
In questo modo avrete creato una tabella in modo veloce ed efficace.
Facile costruire funzioni html con il PHP vero?
Ma come è strutturata questa funzione?

Esaminiamo per prima opentable(); e subito di seguito closetable();

N.B. Queste sono funzioni php e di conseguenza va rispettata la sintassi dell'html all'interno del
php aggingendo le / prima di ogni “

37 38
Paragrafo 2, Modificare i template html Paragrafo 3, Le regole da rispettare per costruire temi

Esempio di creazione di un file html da includere nel tema: Premesso che l'esempio è sempre su NukeNews vi consiglio di prendere sempre come
esempio questo tema, utilizzando template HTML senza inserire troppi tag direttamente nel
Non andremo ad analizzare tutta la sintassi html di tutti i files, mi interessa invece che PHP risparmiate tempo e aumentate l'effetto stilistico del sito sperimentando le modifiche in
possiate capire il principio con cui lavorare e che impariate un paio di trucchetti che vi diretta.
consentano di usare editor visuali come DreamWeaver.
Regola 1) Quando usate editor visuali aggiungendo immagini in automatico il percorso dato
Esempio 1) Il blocco viene creato in questo modo: sarà solo images/immagine.gif, dovete poi correggerlo a mano con il percorso esatto.

<table border="0" cellpadding="1" cellspacing="0" bgcolor="#000000" width="150"><tr><td> Regola 2) Potete inserire variabili nell'html che poi verranno richiamate dal PHP, è importante
<table border="0" cellpadding="3" cellspacing="0" bgcolor="#dedebb" width="100%"><tr><td che esse siano inserite nella global della funzione che includerà il file
align="left">
<font class="content" color="#363636"><b>$title</b></font>
</td></tr></table></td></tr></table> Regola 3) L'editor visuale ha il vizio di aprire e chiudere le tabelle, correggendo quello che
<table border="0" cellpadding="0" cellspacing="0" bgcolor="#ffffff" width="150"> ritiene un errore. Attenzione che a volte, nei file .htm che usiamo una tabella non è chiusa
<tr valign="top"><td bgcolor="#ffffff"> perché verrà chiusa dal file .htm successivo. Ad esempio e capitato spesso che DremWeaver
$content chiudesse con un </table></table> l'header che così sballava le tabelle. L'header si deve
</td></tr></table> chiudere così:
<br>
<td bgcolor="#ffffff" width="150" valign="top">
Come vedete viuene creata una tabella di larghezza fissa (nel nostro caso 150) e gli vengono
attribuiti dei clori di background ecc...). Vengono inoltre passate due variabili ($title e Dove questa tabella è quella che include i blocchi di destra.
$content) che, una volta inclusi nel theme.php vanno a richiamare il titolo e il contenuto del
blocco. Sarebbe stato utile, per una questione di pulizia del codice, definire anche i valori di Regola 4) Cercate di validare il codice quanto più possibile e di utilizzare i fogli di stile quanto
Background delle tabelle nel css. più potete. Questo vi rispamia un sacco di tempo in fase di modifica di colori, font ecc ...
Per validare il codice www.w3c.org
Per avere tutte le casistiche necessarie a trarre le conclusioni di questo capitolo e a scrivere
un paio di regolette dobbiamo analizzare un modulo molto semplice ma che comprende un
caso che non abbiamo ancora menzionato, la gestione delle immagini:

</td><td><img src="themes/NukeNews/images/pixel.gif" width="15" height="1" border="0"


alt=""></td><td valign="top" width="100%">

Il file analizzato è uno spacer che aggiunge uno spazio di 15 pixel, ma come facciamo and
andare a recuperare l'immagine? Che percorso dobbiamo dargli? Ricordiamo che il file
theme.php viene incluso in root, perciò il percorso dell'immagine dovrà andare da root al
tema indicato. Infatti la sintassi per andare a recuperare l'immagine pixel.gif è
themes/NukeNews/images/pixel.gif

Attenzione!!! quando usate editor visuali aggiungendo immagini in automatico il percorso


dato sarà solo images/immagine.gif, dovete poi correggerlo a mano con il percorso esatto.

Un altro accorgimento è quello di assegnare in theme.php una variabile al nome del tema in
modo da renderlo indipendente da eventuali cambiamenti di nome della cartella. Allora la
variabile $nometheme = “NukeNews” la sintassi del percorso immagine diventerà:

<img src="themes/$nometheme/images/pixel.gif">

39 40
Capitolo 7, Creare i blocchi
Paragrafo 1, I diversi tipi di blocchi, caratteristiche Paragrafo 2, come creare un nuovo blocco
Per creare un blocco del terzo tipo, ossia uno script php che si interfaccia al database e ne
estrapola i dati bisogna innanzitutto capire come sono strutturati questi blocchi.
I blocchi di phpnuke possono essere di 3 tipi differenti:
Essi sono contenuti in una cartella chiamatablocks, il nome del blocco deve essere block-
? RSS/RDF: Sono blocchi che prelevano news da altri siti che mettono a disposzione un file nomedelblocco.php dove block- va nominato in questo modo obbligatoriamente. Ogni blocco
in formato standard per la lettura del testo contenuto in esso. (Ad esempio il sito che inizierà con block- verrà incluso nella schermata dei blocchi attivabili nel menu di
spaghettibrain.com che mette a disposzione le news per altri siti). amministrazione sezione blocchi.nella tendina nomefile. Il nome assegnato, se non assegnato
da admin, sarà quello che segue in block-
?
Blocchi di contenuto: Sono blocchi in cui inseriamo del testo semplice o del testo HTML
che verrà poi visualizzato all'interno del blocco (Vedi esempio seguente) Non sono ammessi spazi nel nome del blocco, gli spazi vanno sostituiti con l'underscore _
Tutti i blocchi che rispetteranno queste regole sarnno inserite nell'interfaccia di admin di cui
? Blocchi di files: Sono script in PHP che eseguono determinati comandi (vedi paragrafo abbiamo parlato sopra.
successivo)
Come realizzare un blocco, approccio teorico:
In questo paragrafo vedremo un esempio semplice di come inserire dei links e del testo in un
blocco di testo. Se conoscete già un po' di HTML è inutile che seguiate questo esempio. a) in ogni blocco che create inserite il seguente codice all'inizio:
Supponiamo di voler inserire in un blocco un testo e un elenco di 3 siti: if (eregi("block-Nomeblocco.php",$PHP_SELF)) {
Header("Location: index.php");
Il webmaster che scrive questo libro gestisce i seguenti siti: die();
}
spaghettibrain.com
spaghettiopen.com questo protegge il file evitando che gli utenti possano accedere direttamente dalla cartella
spaghettipython.com blocks, il blocco verrà visualizzato solo se richiamato dal vostro portale.
Allora il testo andrà formattato in questo modo per poi essere inserito nel blocco: b) nei blocchi potete includere quello che volete, perl, java, php, flash ecc ...
Il <b>webmaster</b> che scrive questo libro gestisce i seguenti siti:<br><br> c) Tutto quello che è l'output del blocco deve avere un valore richiamabile dalla variabile
<a href=”http://www.spaghettibrain.com
”>spaghettibrain.com</a>
$content.
<a href=”http://www.claudioerba.com”>claudioerba.com</a>
Piccole nozioni di HTML: Ricordate inoltre che avete uno spazio limitato nel blocco, state attenti al layout!
<b> Sta per Bold, apre un tag, tutto quello che c'é dopo questo tag e
prima fi </b> (che invece chiude il tag) sarà grassetto. WARNING per realizzare blocchi compatibili con lo standard W3C, dice Francisco:

<br> Sta per Break, è un “a capo”. Non necessita di essere chiuso Per rispettare gli standard W3c per Html 4.01 Transitional è molto importante che sostituiate
tutte le & commerciali negli url con il tag “&amp”, per esempio l'url:
<a href=”http://sitochevolete.com”>Nome sito</a> è per attivare un
link. <a href="modules.php?op=modload&name=FAQ&file=index">

deve essere scritto:

<a href="modules.php?op=modload&amp;name=FAQ&amp;file=index">

e non usate i tags “li” (per esempio) ma lasciate che il foglio di stile (CSS) lo faccia per voi.
(Aggiungo io, anche i background delle tabelle, i font ecc è meglio li facciate fare al CSS)

Vediamo ora come realizzare un blocco partendo da zero.


41 42
Capitolo 8, Creare i moduli
Come realizzare un blocco, esempio pratico:
Paragrafo 1, Come sono strutturati i moduli
Inventiamoci un blocco molto semplice che visualizza le pagine visitate ieri nel nostro sito. I moduli di phpnuke sono quelle applicazioni scritte in PHP che gestiscono la parte centrale
Avremo dunque una sola query ed un solo valore, questo per facilitare le cose del portale. Sono moduli le News, Il forum, La lista utenti ecc ...
Il nostro blocco si chiamerà hits, perciò il nome completo del blocco sarà block-hits.php Ogni modulo, a seconda della complessità è strutturato nella sola parte di fruizione utenti o
Il codice verrà visualizzato in corsivo: anche in una parte di admin nel caso vi siano dei contenuti da modificare. Il tutto è gestito dal
files modules.php che, già da solo, svolge il lavoro di autenticazione e gestione dei diritti di
Innanzitutto apriamo il tag php accesso su quel modulo.
<?
Il file modules.php fa un controllo e verifica se il modulo è stato attivato o no, e ne verifica i
In secondo luogo inseriamo lo script di protezione visto prima: diritti di accesso. Questo ci risparmia motissimo lavoro non dovendo inserire questi controlli in
ogni modulo che realizziamo.
if (eregi("block-hits.php",$PHP_SELF)) {
Header("Location: index.php"); Riprendiamo quello scritto nel cap 5 per essere più esaustivi:
die(); [Qui comincia quello riportato anche nel cap. 5]
}
Ad esempio nel modulo avantgo per richiamare il file index.php basta passare, nella stringa, il
Inseriamo le variabili che intendiamo richiamare (In questo caso il parametro $prefix e $dbi nome del modulo (di default viene cercato index.php)
che è l'astrazione del database:
modules.php?name=AvantGo
global $prefix, $dbi;
Se invece volessimo richiamare una pagina diversa da index.php (prendiamo print.php), la
Benissimo, ora procediamo inserendo la query che va a leggere dal database quante pagine stringa che dovremo passare è:
viste ha fatto il nostro sito: (L'istruzione sarebbe leggi il valore della prima riga della tabella
nuke_counter nella cella count) modules.php?name=AvantGo&file=print
$result = sql_query("select count from ".$prefix."_counter order by type desc limit 0,1", $dbi); ossia la variabile file con un valore (print) che corrisponde al nome del file senza l'estensione
list($count) = sql_fetch_row($result, $dbi);
.php
Come ultima cosa passiamo la variabile $content che sarà quella che richiamerà il blocco e
chiudiamo il tag PHP All'interno della cartella modules/nomemodulo è anche presente una sottocartella che si
chiama language. In questo modo gestiamo in modo semplice ed immediato la funzione
$content .= $count multilinguaggio all'interno dei moduli.
?>
Il file modules.php lavora in questo modo:
Il nostro script per intero sarà:
Include il mainfile.php
<? Verifica se il modulo è attivo
Verifica se la stringa passa un nome di file diverso da index.php
if (eregi("block-hits.php",$PHP_SELF)) { Verifica i permessi sul modulo (Se lo può vedere chinque, solo utenti registrati o solo admin)
Header("Location: index.php");
die();
} [Qui finisce quanto riportato nel Cap. 5]

global $prefix, $dbi;

$result = sql_query("select count from ".$prefix."_counter order by type desc limit 0,1", $dbi);
list($count) = sql_fetch_row($result, $dbi);
$content .= $count
?>
43 44
Paragrafo 2, Le regole da rispettare per realizzare un Paragrafo 3, Realizzare un modulo, parte pubblica
modulo compatibile al 100% Continuiamo con l'esempio di Topolino e immaginiamo un modulo molto semplice che
Per chi ha una conoscenza di base del linguaggio PHP realizzare un modulo è molto visualizzi una gif di topolino con un elenco di 3 nomi predefiniti che sono editabili dagli utenti.
semplice. E' un modulo senza senso ma è abbastanza semplice per essere compreso da tutti.
Generalmete realizzare un modulo per PHPNuke vuol dire:
Il DB preso in considerazione è MySQL ma l'esempio, cambiando qualche dettaglio, funziona
?
Realizzare files PHP per la parte pubblica degli utenti per tutti i DB.
?
Realizzare una interfaccia di admin
Come prima cosa vediamo quale deve essere lo scheletro di ogni modulo che andremo a
?
Verificare che tutto quello che abbiamo realizzato si attenga alle regole di sviluppo di
PHPnuke. costruire:

Ma quali sono le regole di sviluppo? E' utile soffermarci su questo punto prima di passare alla <?php
parte di programmazione. if (!eregi("modules.php", $PHP_SELF)) {
die ("You can't access this file directly...");
Regola 1) I moduli devono essere inclusi nella cartella modules/nomemodulo nella parte }
pubblica e nella cartella admin/modules nella parte pubblica
$index = 1;
require_once("mainfile.php");
Regola 2) Il file principale del modulo incluso in modules/nomemodulo deve essere chiamato
$module_name = basename(dirname(__FILE__));
index.php get_lang($module_name);
include("header.php");
Regola 3) Le tabelle nella sintassi php vengono indicate con il prefisso. Ad esempio
QUI CI VA TUTTO LO SCRIPT DEL MODULO
Nuke_pages sarà indicata con ".$prefix."_pages dove $prefix prende il valore dal file include("footer.php"); (Vedi nota 1)
config.php ?>
Regola 4) I percorsi delle eventuali immagini o links devono partire semplicemente da root e Importante, prima di fare qualsiasi cosa è necessario creare una cartella modules/Topolino, il
non dalla cartella modules/nomemodulo in quanto i files contenuti in essa vengono inclusi in file riportato in alto (con gli altri contenuti), dovrà chiamarsi index.php e risiedere in quella
un file collocato in root che si chiama modules.php cartella.
Regola 5) Per gestire in modo ottimale la funzione multilingua bisogna creare delle astrazioni Creiamo una tabella di database chiamata nuke_topolino che sarà strutturata in questo
dei testi che dobbiamo inserire nel file creando un a cartella language all'interno della cartella modo:
del modulo. Il tutto verrà poi richiamato in automatico. Ad esempio nel caso dovessimo
creare un modulo che chiamiamo Topolino dobbiamo dare la possibilità a chi lo legge idpersonaggi : E' una cella che contiene gli id dei personaggi (int 11, primary)
attraverso l'interfaccia in italiano di leggere “Topolino” e a chi lo legge in inglese di leggere nomipersonaggi: E' una cella che contiene i nomi dei personaggi (varchar 60)
“Mickey Mouse” ;-) Come fare?
E inseriamo manualmente (Attraverso l'uso di PHPMyadmin o di interfaccia equivalente) i
Innanzitutto creiamo la cartella language nella cartella modules/topolino nomi dei 3 personaggi che ci interessano (Il modulo, per ragioni di semplicità non consente
di aggiungere o eliminare personaggi ma solo di editare quelli esistenti).
Ci inseriamo due files .php che chiameremo lang-italian.php e lang-english.php
Id 1: Topolino
Creiamo una astrazione per topolino, nel lang-italian.php sarà: Id 2: Minnie
define("_TOPO","Topolino"); Id 3: Pluto
In inglese sarà:
define("_TOPO","Mickey Mouse");

In questo modo inserendo nel modulo l'astrazione "._TOPO." questo verrà sostituito in Nota 1: In effetti è possibile includere il footer alla fine di ogni funzione. E' una soluzione un po' più
automatico da Topolino nell'interfaccia Italiana e da Mickey mouse nell'interfaccia inglese macchinosa in quanto si devono scrivere più righe ma ho dovuto riportarla in quanto molti moduli lo utilizzano..

45 46
Una volta che la tabella del DB è pronta possiamo cominciare a divertirci creando il codice
che ci restituirà gli output. Il nostro output sarà una semplice query con un ciclo for che ci
restituirà i valori inseriti nel database (La cosa più semplice del mondo, Gosh!).
Benissimo, fatto questo abbiamo quasi finito la parte di frontend, non ci resta che inserire la
Attenzione!!! Affinché venga mantenuta l'astrazione dei DB e che il tutto possa funzionare su parte stilistica nel codice che abbiamo realizzato e montare il tutto. Prendiamo i due pezzi di
diversi database in modo indipendente non possiamo usare la sintassi PHP classica che codice costruiti prima (Quello iniziale e quello creato da noi) e aggiungiamoci i fronzoli:
generalmente viene utilizzata dai “MySQL addicted” ;-), dobbiamo invece utilizzare la sintassi
illustrata nel file include/sql_layer.php <?php
if (!eregi("modules.php", $PHP_SELF)) {
Allora la query che dovremo andare a compilare sarà strutturata in questo modo: die ("You can't access this file directly...");
}
$resultpersonaggi = sql_query("SELECT idpersonaggi, nomepersonaggi FROM ".$prefix."_topolino",
$index = 1;
$dbi);
require_once("mainfile.php");
$module_name = basename(dirname(__FILE__));
for ($m=0; $m < sql_num_rows($resultpersonaggi, $dbi); $m++)
get_lang($module_name);
{
include("header.php");
list($idpersonaggi, $nomepersonaggi) = sql_fetch_row($resultpersonaggi, $dbi);
echo "$idpersonaggi - $nomepersonaggi <br> ";
echo"<br>";
}
echo""._BENVETOPOMOD."";
echo"<br><br>";
Semplice no? OK!, prima di passare alla interfaccia di Admin di questo modulo andiamo a opentable();
rifinirlo con un po' fronzoli al fine di dargli un minimo di dignità stalistica. echo"<br>";
echo""._DESCRITOPOMOD."";
Io proporrei: echo"<br><br>";
--> Di inserire in una tabella i risultati $resultpersonaggi = sql_query("SELECT idpersonaggi, nomepersonaggi FROM ".$prefix."_topolino",
$dbi);
--> Di mettere un titolo e una descrizione al modulo
for ($m=0; $m < sql_num_rows($resultpersonaggi, $dbi); $m++)
Questo lo facciamo rendendo compatibile il tutto con il sistema multilingua di PHPNuke: {
Definiamo le astrazioni che vanno a comporre le due frasi di cui abbiamo bisogno, nel file list($idpersonaggi, $nomepersonaggi) = sql_fetch_row($resultpersonaggi, $dbi);
lang-italian.php inseriremo: echo "$idpersonaggi - $nomepersonaggi <br> ";
}
<?php
closetable();
define("_BENVETOPOMOD","Modulo Topolino, Benvenuti!");
define("_DESCRITOPOMOD","Questo è un modulo di esempio che serve ad illustrare come si crea un include("footer.php");
modulo PHPNuke, non ha nessuna velleità funzionale :-)"); ?>

?> Quello che è stato fatto è aggiungere del testo, un po' di Break per gli “a capo” eun opentable(); closetable(); per
includere il testo. Ecco il risultato:
Ricordiamo di inserire nella nostra cartella language un file chiamato index.htm vuoto! Serve
da protezione per navigazioni indesiderate all'interno di quella cartella ....

47 48
Paragrafo 4, Realizzare un modulo, parte di admin

E' ora di creare la parte di amministrazione. In questo modulo molto semplice l'unica funzione case "FaqAdmin":
che andrà a lavorare sul DB sarà quella in cui possiamo modificare il testo di una delle tre case "FaqCatGo":
voci che abbiamo creato. include ("admin/modules/adminfaq.php");
break;
Innanzitutto dobbiamo creare i files da inserire nelle cartelle:
Entrambi i case richiamano il file adminfaq.php ma gli fanno fare operazioni diverse. Il primo
admin/case
richiama il file nella schermata di default, il secondo invece dà l'ok ad inserire una nuova
admin/links
admin/modules categoria.
E' necessario in questo caso ricordare quanto abbiamo già riportato nel capitolo 5:
Questo avviene attraverso una stringa tipo: admin.php?op=FaqAdmin nel primo caso e
[Inzio testo già riportato nel capitolo 5] admin.php?op=FaqCatGo nel secondo.

Admin: Contiene 4 sottocartelle (Links, language, case, modules) che gestiscono i vari [fine testo riportato nel capitolo 5]
moduli di amministrazione. La cartella che ospita i files operativi è admin/modules, è qui
Andremo poi a creare, nell'ordine, i files:
che sono presenti i file che eseguono le operazioni.
admin/modules/topolino.php
admin/case/case.topolino.php
La cartella admin/links invece dice che modulo di admin deve richiamare e posiziona una
admin/links/links.topolino.php
voce in admin per quel determinato modulo.
Per creare il file all'interno della cartella modules (modules/topolino.php) dobbiamo
Esempio (Modulo di amministrazione per le FAQ):
immaginare una struttura di questo tipo:
if (($radminsuper==1) OR ($radminfaq==1)) {
adminmenu("admin.php?op=FaqAdmin", ""._FAQ."", "faq.gif"); Parte inziale dei files (Simile per tutti i moduli)
} Definizione delle funzioni necessarie
Definizione dei case necessari per richiamare le diverse funzioni del modulo di admin
Questo modulo: Parte finale del file
Verifica i diritti di amministrazione (Questo modulo può essere amministrato o dal
superadmin o da un admin che ha abilitato il livello per le FAQ La sintassi della parte inziale del file è la seguente:

Passa un case (op=FaqAdmin) che dice al file admin.php (che include tutti i moduli di admin) <?php
che modulo andare a richiamare, associa un valore per tradurre il termine faq e associa una if (!eregi("admin.php", $PHP_SELF)) { die ("Access Denied"); }
immagine per l'amministrazione visuale (faq.gif).
$result = sql_query("select radminsuper, admlanguage from ".$prefix."_authors where aid='$aid'",
La cartella admin/case invece serve a definire che modulo usare in determinati case. Questo $dbi);
è importante quando, usando lo stesso file di admin si vogliono fare più operazioni usando i list($radminsuper,$admlanguage) = sql_fetch_row($result, $dbi);
case. if ($radminsuper==1) {
Case1 = inserisci
Case2 = cancella Il lavoro che fa questa parte di file è un controllo sui diritti di amministrazione di chi lo invoca,
ecc ... un controllo sulla lingua da utilizzare e (non in questo modulo) un controllo sui diritti
dell'amministratore. Un admin può avere solo dei diritti parziali di amministrazione su certi
Infatti dice che modulo richiamare al varificarsi di un case. Ad esempio, nel modulo faq i case moduli o alcuni moduli possono essere amministrati solo da un superadmin. Nel nostro caso
sono molti, veidamo solo gli ultimi 2: specifico il modulo può essere gestito solo da un superadmin in quanto il controllo è solo:

if ($radminsuper==1)

49 50
Ecco la visualizzazione della funzione relativa alla selezione del record:

Nel caso vi fossero dei diritti specifici (prendiamo come esempio il modulo reviews) i diritti da function Topodisplay() {
global $admin, $bgcolor2, $prefix, $dbi, $multilingual;
controllare sarebbero stati: include ("header.php");
GraphicAdmin();
if (($radminreviews==1) OR ($radminsuper==1))
Opentable();
$resultpersonaggi = sql_query("SELECT idpersonaggi, nomepersonaggi FROM ".$prefix."_topolino",
Attivare i diritti su due livelli su nuovi moduli non è semplice, bisogna infatti andare a $dbi);
specificare nella tabella nuke_authors un nuovo campo che specifici i diritti, modificare poi il
modulo admin/modules/authors.php aggiungendo la checkbox per i diritti del nuovo modulo e for ($m=0; $m < sql_num_rows($resultpersonaggi, $dbi); $m++)
modificare le relative query di update. {
list($idpersonaggi, $nomepersonaggi) = sql_fetch_row($resultpersonaggi, $dbi);
Torniamo al nostro modulo, la parte inziale della sintassi è obbligatoriamente (salvo il caso echo "$idpersonaggi - $nomepersonaggi <a
href=\"admin.php=Toposeleziona&idtopo=$idpersonaggi\">Selcttopo</a> <br> ";
sopracitato): }
<?php closetable();
include("footer.php");
if (!eregi("admin.php", $PHP_SELF)) { die ("Access Denied"); } }
$result = sql_query("select radminsuper from ".$prefix."_authors where aid='$aid'", $dbi);
list($radminsuper) = sql_fetch_row($result, $dbi);
La prossima funzione da implementare è quella relativa alla selezione di uno dei tre record:
if ($radminsuper==1) {

e quella finale è invece: function Toposelect() {


global $admin, $bgcolor2, $prefix, $dbi, $multilingual, $idtopo;
} else { include ("header.php");
echo "Access Denied"; GraphicAdmin();
} Opentable();
$resultpersonaggi = sql_query("SELECT idpersonaggi, nomepersonaggi FROM ".$prefix."_topolino
?> where idpersonaggi='$idtopo'", $dbi);

for ($m=0; $m < sql_num_rows($resultpersonaggi, $dbi); $m++)


Tutto quello che ci sta in mezzo sono le funzioni di gestione e i case che devono essere {
richiamati che ora andremo a costruire. list($idpersonaggi, $nomepersonaggi) = sql_fetch_row($resultpersonaggi, $dbi);
Ci sono un paio di regole da rispettare per costruire le funzioni di admin: echo"<form action=\"admin.php\" method=\"post\">";
Includere all'inizio della funzione l'header e alla fine il footer echo"<input type=\"text\" name=\"nomepersonaggio\" size=\"20\" maxlength=\"20\"
include("header.php"); value=\"$nomepersonaggi\"><br><br>";
include("footer.php"); echo"<input type=\"hidden\" name=\"idpersonaggio\" value=\"$idtopo\">";
echo"<input type=\"hidden\" name=\"op\" value=\"topomodifica\">";
echo"<input type=\"submit\" value=\""._ADDTOPO."\">";
Includere subito dopo l'header anche la funzione GraphicAdmin(); che visualizza il pannello di
echo"</form>";
navigazione che conduce a tutti gli altri links di admin. }

Le funzioni che andremo ora a creare sono: closetable();


Visualizzazione dei record include("footer.php");
Scelta del record e richiamo in un campo di testo modificabile }
Modifica del record con inserimento del valore modificato nel database.
E' importantissimo notare alcune cose:
1) Le variabili che passiamo vanno richiamate, infatti come vedete la variabile $idtopo è stata
inserita tra le variabili utilizzate
2) Il valore del case ciene passato da un campo hidden del form (<input type=\"hidden\"
name=\"op\" value=\"topomodifica\"> ).

51 52
L'Ultima funzione presa in considerazione è quella relativa all'aggiornamento dei valori nel La pagina di definizione dei case è molto semplice da realizzare, richiama quali sono i case
database (Anche qui abbiamo aggiunto due variabili che ci interessavano compresi nel file admin/modules/topolino.php nel file admin/case/case.topolino.php
($nomepersonaggio, $idpersonaggio): Eccone la sintassi:

function Topomodifica() { <?php


global $admin, $bgcolor2, $prefix, $dbi, $multilingual, $idtopo, $nomepersonaggio,
$idpersonaggio; if (!eregi("admin.php", $PHP_SELF)) { die ("Access Denied"); }
include ("header.php");
GraphicAdmin(); switch($op) {
Opentable();
case "topolino":
sql_query("update ".$prefix."_topolino set nomepersonaggi='$nomepersonaggio' where include("admin/modules/topolino.php");
idpersonaggi=$idpersonaggio", $dbi); break;
echo"OK";
die(mysql_error()); case "toposeleziona":
closetable(); include("admin/modules/topolino.php");
include("footer.php"); break;
}
case "topomodifica":
Gli ultimi due elementi da inserire sono la definizione dei case (Ossia quale funzione include("admin/modules/topolino.php");
break;
richiamare a seconda delle variabili passate nel modulo) e la chiusura del file.
}
Definizione dei case:
?>
switch($op) {
Le ultime due cose che ci rimangono da fare sono la compilazione del file
case "": admin/links/link.topolino.php e la creazione di un modulo di linguaggio:
Topodisplay();
break;
Compilazione del file link.topolino.php
case "topolino":
Topodisplay(); <?php
break;
if ($radminsuper==1) {
case "toposeleziona": adminmenu("admin.php?op=topolino", ""._EDITTOPOLINO."", "topolino.gif");
Toposelect(); }
break;
?>
case "topomodifica":
Topomodifica(); Dove: admin.php?op=topolino definisce quale modulo deve andare a richiamare
break; ""._EDITTOPOLINO."" è la voce da tradurre (Va compilata in admin/language)
} Per la modifica del modulo di linguaggio vi rimando al paragrafo precedente con una sola
nota. Il file di linguaggio della sezione di admin è comune per tutti (admin/language), le voci
Chiusura del file: relative vanno aggiunte in coda a quelle già presenti.
} else {
echo "Access Denied"; Altra cosa, la sintassi di questo esempio non è perfetta, il suo scopo non è quello di funzionare
} perfettamente ma di illustrare il funzionamento del modulo (Che trovate da scaricare su
www.spaghettibrain.com per poterlo studiare dal vivo), i puristi del php non si arrabbino! :-)
?>

53 54
Capitolo 9, Alcuni accorgimenti di sicurezza (cenni)
Paragrafo 1, I permessi sulle cartelle e sui files. Paragrafo 2, I cookies, timeout e configurazione
PHPNUke fa molto uso dei cookies sia per autenticare gli user che per autenticare gli admin. I
cookies sono dei file di testo archiviati sul nostro computer che contengono diverse
Questo paragrafo è relativo solo a coloro che utilizzano phpnuke nel modno Linux/Unix (la informazioni che vengono richiamate quando si entra in un certo sito. Nel caso di PHPNUke le
maggior parte dei siti PHPNUke in hosting da providers lo sono, e spesso anche chi testa in informazioni sono relative all'utente, al tema scelto, alla lingua utilizzata.
locale usa Linux).
Il cookie è quello strumento che ci consente anche di non dover ridigitare la password
Burzi dice che tutte le cartelle dovrebbero essere impostate a 777 e i files a 666, possiamo loggandoci ogni volta. In questo modo ogni volta che accediamo ad un portale PHPNUke il
tranquillamente far lavorare il nostro PHPNUke com permessi più bassi come illustrato sotto: cookie lavora per noi gestendo le operazioni di login.
config.php (666) Il problema è uno solo, che se il cookie non ha un expiration time basso qualcuno può
backend.php (666)
rubarcelo ed accedere come utente o come admin al portale. Questo è possibile per una
ultramode.txt (666)
serie di motivi:
Tutte le cartelle (755)
Altri files (644) 1) Il cookie di PHPNUke ha una vita pressoché infinita (31536000 secondi)
2) Explorer (Browser più utilizzato, purtroppo) ha delle vulnerabilità che consentono di far
I files config.php, backend.php, ultramode.txt devono avere i permessi in scrittura perché: eseguire al client script maliziosi che “rubano” il cookie all'utente inviandolo al “Ladro”.
Per il config.php editando preferenze andremo a scrivere sul file modificando il testo 3) PHPNUke non riesce a filtrare tutti gli script maliziosi (O per meglio dire, Explorer è
Per il backend e ultramode andremo invece a scrivere sul files (in modo automatico) i titoli e talmente stupido che corregge script inseriti con una sintassi sbagliata per non essere
gli abstract delle news. riconosciuti).

C'é però da tenere conto di un particolare, se utilizziamo moduli che fanno l'upload di files in Facciamo un esempio concreto di come uno script kiddie (colui che si crede hacker ma non
alcune cartelle i permessi di questi dovrebbero essere alzati. Prendiamo come esempio il lo è ...) possa cercare di ottenere i diritti di admin sul nostro portale:
modulo IndyNews, modulo non standard che dà la possibilità di allegare files e immagini agli
articoli. 1) Lo script kiddie inserisce uno script postando una finta news tipo
< vb script dammi il cookie e mandalo sul server xyz che non viene filtrato dalla funzione
La struttura del modulo è la seguente: check_words() di PHPNuke
modules/indynews/media
2) L'admin del phpnuke apre (Con explorer!!! Con Mozilla o meglio su linux questo hack non
All'interno del folder “indynews” i permessi del folder “media” dovrebbero essere 777, per un vale) la lista delle news da pubblicare, Explorer (stupido) coregge il vbscript in questo modo
problema di override i permessi 777 vanno impostati a tutti i folder a partire da modules. <vbscript> tutte le istruzioni riuscendo ad interpretare in modo corretto (!!) la sintassi errata,
Perciò tutto quello che c'é in modules avrà permessi a 777 e questo potrebbe causare prendendo il cookie e spedendolo allo script kiddie
vulnerabilità. Una soluzione è quella di spostare i puntamenti del folder che dovrà ospitare i
files all'esterno del folders modules, magari in root, cambiando all'interno del modulo tutti i 3) Lo script kiddie mette il cookie tra i suoi, si collega al sito e ... viene riconosciuto come
puntamenti. admin!!!

Facendo questo avremo una sola cartella in root con permessi a 777. Ma come è possibile proteggerci da questo tipo di hack?

Ci sono un insieme di soluzioni che dovrebbero aumentare di molto la sicurezza della nostra
area di admin:

1) Innanzitutto smettere di usare Internet Explorer come browser e passare seduta stante a
Mozilla (www.mozilla.org). Mozilla è un browser che supporta tutti i siti in modo ottimo e non è
afflitto da tutte le vulnerabilità di casa Redmond. Ah! Se usate invece Linux non avete
problemi di sorta ...

1b) Nel caso vogliate continuare ad usare Explorer almeno scaricatevi le patch da
www.microsoft.com
55 56
Capitolo 10, Supporti per il programmatore
Paragrafo 1, Le tabelle del database
Ecco quali sono le tabelle che compongono il database di PHPNuke e a cosa servono:
2) Disabilitate, dove possibile, l'inserimento di tag HTML (Ad esempio nel forum di Splatt.it) nuke_access: Definisce i vari profili utenti
nuke_authors: Definisce gli admin e i loro livelli
3) Accorciate la vita dei cookies, se ad esempio impostiamo la vita del cookie a due ore lo nuke_autonews: Gestisce le news temporizzate
script kiddie dovrà per forza utilizzare il cookie entro quel periodo, questo limita di molto la nuke_banlist: Gestisce gli utenti bannati (esclusi dalla visualizzazione del portale)
sua possibilità di agire. nuke_banner: Gestisce le campagne banner, le impression e i click
nuke_bannerclient: Gestisce i clienti delle campagne banner
Se invece lasciamo la vita del cookie impostata come è adesso lo script kiddie potrà anche nuke_bbtopics: Gestisce il BBCode
nuke_blocks: Elenco dei blocchi creati
utilizzare il nostro cookie per 1 mese dopo che lo ha rubato ...
nuke_catagories: Elenco delle categorie
nuke_comments: Gestisce i commneti e le risposte
Come impostare la durata del cookie di admin? Il cookie viene impostato nel file nuke_config: Gestisce alcune configurazioni tipo la possibilità di postare in HTML ecc...
includes/auth.php e la funzione da modificare è la seguente: nuke_counter: Gestisce le statistiche
nuke_disallow: Blocca un utente
if ((isset($aid)) && (isset($pwd)) && ($op == "login")) { nuke_downloads_categories: Gestisce categorie e sottocategorie dell'area download
if($aid!="" AND $pwd!="") { nuke_downloads_downloads: Gestisce i files presenti in area download
$pwd = md5($pwd); nuke_downloads_editorials: Gestisce i commenti sui files
$result=sql_query("select pwd, admlanguage from ".$prefix."_authors where aid='$aid'", nuke_downloads_modrequest: Gestisce la segnalazione di Brken Files Link
$dbi); nuke_downloads_newdownloadGestisce l'inserimento di files da parte di terzi
list($pass, $admlanguage)=sql_fetch_row($result, $dbi); nuke_downloads_moddata: Gestisce i voti ai files
if($pass == $pwd) { nuke_encyclopedya: Sono elencate le varie enciclopedia presenti
$admin = base64_encode("$aid:$pwd:$admlanguage"); nuke_encyclopedia_textSono elencati i termini delle enciclopedie
setcookie("admin","$admin",time()+7200); nuke_ephem Gestisce gli eventi ricorrenti
unset($op); nuke_faqanswer: Archivia le risposte delle faq
} nuke_faqcategories: Gestisce le categorie in cui sono suddivise le FAQ
} nuke_forum_access: Registra gli utlimi accessi degli utenti
} nuke_forum_mods: Definisce i moderatori dei forum
table nuke_forums: Definisce i forum attivi
Come vedete abbiamo modificato il tempo di vita del cookie da 2592000 secondi (un nuke_forumtopics: Definisce le categorie dei forum
mese) a 7200 secondi (due ore). Come è facile notare abbiamo ridotto il raggio di azione nuke_headlines: Definisce le fonti da cui prendere news con i blocchi
nuke_links_categories Definisce le categorie in cui sono suddivisi i link
dello script kiddie da un mese a due ore.
nuke_links_editorials Gestisce i giudizi sui links
nuke_links_links Archivia i links
3) E' in fase di studio un filtro di tag più efficace anche se per ora le soluzioni proposte non nuke_links_modrequest Archivia i messaggi relativi ai link (Broken link ecc ...)
hanno dato una soluzione definitiva. I tag ammessi vengono definiti nel file config.php nella nuke_links_newlink Archivia le richieste di aggiunta di nuvi links
variabile $AllowableHTML, valgono per i commenti e per l'inserimento delle news nella nuke_links_votedata Archivia i voti dei link
funzione check_html() in quanto per ora lascia passare alcuni tags. nuke_main Definisce quale è il modulo principale che deve essere incluso in index.php
nuke_message Gestisce i messaggi in home page
Tutte queste azioni e una giusta configurazione dei permessi come illustrato nel paragrafo nuke_modules Elenca e gestisce i moduli installati
nuke_pages
precedente dovrebbero garantire una buona sicurezza del nostro portale. E' anche
nuke_pages_categories
importante seguire i wari warning di sicurezzasu phpnuke che sono riportati su nuke_poll_check Elenco di ip che hanno già votato nelle ultime 24 ore
http://neworder.box.sk/ nuke_poll_data Elenco di risposte ai sondaggi
nuke_poll_desc Elenco dei sondaggi presenti e passati
nuke_pollcomments Commento al sondaggio
nuke_posts Sono i titoli principali dei post del forum
nuke_posts_text
nuke_priv_msgs Gestisce il modulo private messages

57 58
Par 2, La sintassi del codice SQL

nuke_queue Elenca i testi in attesa di essere pubblicati Al fine di rendere compatibile PHPNuke con più database la sintassi SQL è stata trasformata
nuke_quotes in funzioni in modo da poter avere una sintassi standard indipendentemente dal database che
nuke_ranks Registra i voti delle news si utilizza. Per comodità riportiamo il file sql_layer.php un po' ripulito:
nuke_referer Elenca da dove arrivano le ultime x righe
nuke_related Associa eventuali links ai topics
Nuke_reviews Connessione al DB: sql_connect($host, $user, $password, $db)
nuke_reviews_add
nuke_reviews_comments Commenti alle reviews Disconessione dal DB: sql_logout($id)
nuke_reviews_main Tabella principale delle reviews
nuke_seccont Elenca i testi delle sezioni Query: sql_query($query, $id)
nuke_sections Elenca le sezioni attive
nuke_session Elenca le sessioni attive Num Rows: sql_num_rows($res)
nuke_smiles Elenca le faccine supportate
nuke_stats_date Modulo statistiche
nuke_stats_hour Modulo statistiche Fetch Rows: sql_fetch_row(&$res, $nr)
nuke_stats_month Modulo statistiche
nuke_stats_year Modulo statistiche Fetch Array: sql_fetch_array(&$res, $nr)
nuke_stories Testi delle news
nuke_stories_cat Categorie delle news Fetch Object: sql_fetch_object(&$res, $nr)
nuke_topics Elenco dei topics
nuke_users Elenco utenti Free Result: sql_free_result($res)
nuke_words Parole da censurare
Con questa sintassi potrete rendere compatibili tutte le modifiche, blocchi o moduli da voi
realizzati a tutti i db supportati da PHPNUke che sono:

MySQL
mSQL
PostgreSQL
PostgreSQL_local
ODBC
ODBC_Adabas
Interbase
Sybase

59 60
Par 3, PHPMyadmin, amministrare il DB MySQL via
web

Cosa è PHPMyadmin Quello che dovete fare adesso è


cliccare su “Sfoglia” andando a
Phpmyadmin è un sistema Visuale per la gestione di un Database MySQL. E’ scritto in PHP e
cercare il file .sql che riporta la
serve per visualizzare il contenuto dei Database che sono installati sul server (o client) su cio
struttura del Database di PHPNuke.
lavora MySQL. Attraverso questa interfaccia si possono creare nuovi database, modificare
Una volta trovato basta cliccare su
quelli esistenti ed intervenire sui contenuti dei singoli campi.
Go e il database viene installato.
Naturalmente se ci sono errori questi
Come installare il DB di PHPNuke con PHPMyadmin verranno riportati alla fine del
procedimento di installazione Così
come il messaggio di “Operazione
Una volta che avete fatto accesso alla vostra interfaccia di PHPMyadmin vedrete, nella barra a Riuscita”. PHPMyadmin vi dà anche la Possibilità di fare un
sinistra l’elenco dei Database che avete a disposizione. Nella parte centrale (Se siete Backup dei dati contenuti nel Database (o solo
autorizzati) vedrete invece una maschera che vi consente di crearne di Nuovi semplicemenet della sua struttura. Scegliendo “Structure Only” e
inserendone il nome e cliccando “create”. Naturalmente il DB che avete creato sarà vuoto. l’Opzione “Send” verrà salvato nel vostro PC la
Cliccando sulla barra di sinistra, in struttura del Database senza i dati. Scegliendo
corrispondenza del DB che avete scelto vedrete invece “Structure and Data” vi verrà mandato un
che il menu a tendina scenderà mostrando la Backup Vero e proprio del DB.
struttura del Database (e in contemporanea la
Indice:
pagina centrale mostrerà la struttura ingrandita
- Altre opzioni di PHPmyadmin
del DB con una serie di Opzioni tutte riportate
nel fondo Pagina. Sono quelle le opzioni che ci
interessano per l’installazione di PHPnuke. Un paio di istruzioni ancora. Per vedere la struttura di una tabella basta che clicchiate su
quella prescelta sulla barra a sinistra (in questo caso forum_topics) e nella parte centrale vi
appariranno tutti i campi che compongono la tabella con le opzioni di Modifica.
ATTENZIONE! Il comando DROP elimina tutti i contenuti del BD, Della Tabella o Del
singolo campo, Usatelo con cautela

61 62
Generalmente l'interfaccia di gestione PHPmyadmin è fornita di default dal provider che vi
vende l'hosting o, se lo installate su windows per lavorare in locale non necessita di nessun Par 3, MySQL Front, Amministrare da Windows un DB
accorgimento particolare in termini di configurazione. MySQ
Nel caso voleste installarla su Windows per leggere database che si trovano online o
installarla nel vostro spazio web perché il vostro fornitore di Hosting non ve lo mette a
disposizione potete configurare il tutto editando il file config.inc.php come segue: Mysql Front è un client per windows che consente di gestire un DB locale o rempoto
attraverso una interfaccia Client. Ritenedo PHPMyadmin più adatto e flessibile ad assolvere
Supponedo che: questo compito vorremmo soffermarci un poco su una funzionalità che MYSQLFront ha e che
Ip DB Server: 156.123.22.34 in PHPMyadmin si è rivelata poco affidabile. Ossia la possibilità di caricare, importare ed
esportare DB di grandi dimensioni senza perdere dati o avere errori.
User: Pippo
In questo paragrafo ci limiteremo ad analizzare la fase di connessione ai db, importazione e
Password: Topolino caricamento.
Nome Database: Minnie Connessione: Cliccando sui File/Connessione ci apparirà una interfaccia di connessione in
cui inserire l'host, user e password. Se dobbiamo usare MySQLFornt in locale lasceremo
localhost come ci viene presentato di default.
Allora:

$cfgServers[1]['host'] = '156.123.22.34'; // MySQL hostname


$cfgServers[1]['port'] = ''; // MySQL port - leave blank for default port

$cfgServers[1]['adv_auth'] = false; // Use advanced authentication?


$cfgServers[1]['stduser'] = ''; // MySQL standard user (only needed with advanced auth)

$cfgServers[1]['stdpass'] = ''; // MySQL standard password (only needed with advanced auth)
$cfgServers[1]['user'] = 'Pippo'; // MySQL user (only needed with basic auth)
$cfgServers[1]['password'] = 'Topolino'; // MySQL password (only needed with basic auth)
$cfgServers[1]['only_db'] = 'Minnie'; // If set to a db-name, only this db is accessible
$cfgServers[1]['verbose'] = ''; // Verbose name for this host - leave blank to show the hostname
$cfgServers[1]['bookmarkdb'] = ''; // Bookmark db - leave blank for no bookmark support
$cfgServers[1]['bookmarktable'] = ''; // Bookmark table - leave blank for no bookmark support

Vanno modificate solo le variabili in neretto. Nel config.inc.php troverete più parametri di
configurazione che si ripetono. Servono a getire DB in host diversi con la stessa interfaccia.

Download (o copia) di un DB esistente: Scegliere il database desiderato, e cliccare sul


bottone Exporta Tables (Quintultimo da destra). Scegliere poi un path di destinazione del
dump del database. Come potete notare il sistema dà anche la possibilità di fare un
selezione attraverso dei flag delle tabelle che si vogliono importare . (Immagine in pagina
seguente).

63 64
Par 5, Foxserv, Far funzionare PHPNuke su Sistemi
Windows

Esiste un applicativo che installa in modo semplice e veloce PHP + MySQL + Apache
configurato il vostro sistema operativo consentendovi di emulare un server Web in locale.
Questo è molto utile in quanto vi consente di sperimentare in locale il vostro PHPNUke ed
eventuali modifiche.
Il software si chiama Foxserv, è arrivato alla versione 3.0 ma io consiglio di installare la
versione 2.0 in quanto molto più facile da usare.
L'installazione è molto semplice, basta lanciare il file FoxServ-2.0core.exe , procedere con
l'installazione inserendo eventuali dati (nessuno è necessario a parte user e password del
DB) e poi iniziare ad usarlo!
Lanciando il pannello di controllo di foxserv dovrete attivare apache e mysql, digitare nel
browser l'indirizzo http://localhost/ e vi apparirà la pagina web come se foste su un server
internet qualsiasi.
Supposto che abbiate installato tutto in c:\foxserv :
Le cartelle delle pagine php devono essere inserite nella cartella www.
Ad esempio se vogliamo inserire una installazione nuke56 creeremo la cartella
Caricamento di un DB: Cliccando sul bottone SQL Query ci apparirà una interfaccia che ci c:\foxserv\www\nuke56\ e ci caricheremo tutto il contenuto della cartella html del nostro
consente di fare l'upload di un database esistente. Basterà cliccare sul simbolo della cartella phpnuke (nel config.php di phpnuke lasceremo “localhost” come host, come user “root” e
che si apre, scegliere il dump del dtabase e cliccare sul bottone simile al simbolo “Play”. niente come password.
Prima di fare questa operazione bisognerà selezionare in che database si vuole caricare il Per accedere al phpmyadmin (Anch'esso preinstallato) l'indirizzo sarà
tutto. http://localhost/phpmyadmin/
NOTA IMPORTANTE:
Il file php.ini (Che si trova, a seconda dei sistemi operativi in c:\windows, c:\windows\system
, c:\winnt o c:\winnt\system\) ha dei puntamenti che puntano ad un disco chiamato f:
L'unica modifica che dovrete fare consiste nel:
creare una cartella c:\temp
modificare il parametero: session.save_path = c:\temp
Deve puntare a c:\temp e non a f:\foxserv ecc ...
Attenzione, anche nella cartella php esiste un php.ini ma non è il file che interessa a noi.

65 66
CURRICULUM VITAE
Spaghettibrain offre hosting per PHPNUke di altissimo livello alla community PHPNuke.
Clicca su www.spaghettibrain.com per valutare l'offerta.
Claudio Erba
E-Mail: claudio@claudioerba .com
Web Site: www.claudioerba.com Spaghetti "Disco '80"
?
Hosting 50 Mb
?
NATO IL: 20-08-1973 Registrazione dominio
?
STATO CIVILE: Celibe PHPNuke Preinstallato
?
1000 Impression sul network spaghetti
?
Traffico incluso 4 Gb
Attività autonoma di consulenza aziendale nell'ambito della gestione di Portali Web, gestione
dei contenuti attraverso sistemi open source, reti intranet e sicurezza informatica. Spaghetti "Pop"
?
Particolare focus sui settori Comunicazione, Pubblicità e Pubbliche Relazioni. Se hai bisogno di Hosting 100 Mb
?
un consulente per la tua azienda forse Claudio fa per te! :-) Registrazione dominio
?
PHPnuke Preinstallato
?
Di particolare interesse i progetti seguiti per: 5000 Impression sul Network Spaghettibrain
?
Libro cartaceo su PHPNuke a casa tua con posta prioritaria
? Traffico Incluso 4 Gb
Progetti: Primacopia [primacopia.it], GDSGlobal [gdsglobal.com], Prima pagina
[primapagina.com], Fausto Leali Website [faustoleali.com], Cromografica Europea
Spaghetti "Dance"
[cromoeuro.com], DPTel, data protection telematico [http://www.imperiali.com/dptel/] ?
Hosting 200 Mb
?
ESPERIENZE LAVORATIVE PRECEDENTI: Registrazione dominio
?
PHPnuke Preinstallato
?
Febbraio 1998 - Febbraio 2000: Impiegato presso la IEI Spa in qualità di Assistente del 7000 Impression sul Network Spaghettibrain
?
Presidente. Libro cartaceo su PHPNuke a casa tua con posta prioritaria
?
Principali Mansioni Svolte: Traffico Incluso 5 Gb
- Realizzazione di un progetto di Home Computing / Home Gateway che si proponeva di introdurre
all’interno della casa uno strumento multimediale per la navigazione in internet, la gestione dei Spaghetti "Metal"
?
segnali derivanti dalla telefonia (Fax e Segreteria telefonica) e la proiezione di DVD. Gestita la Hosting 500 Mb
?
fase di Debug, la creazione di una interfaccia in italiano e ottimizzazione delle funzionalità del Registrazione dominio
?
prodotto. Effettuato nel Novembre 1999 un viaggio a Taipei per interfacciarsi con l’ufficio R&D dei PHPnuke Preinstallato
?
produttori e con la direzione. Creato un piano di e-marketing per il lancio Online del prodotto. 10000 Impression sul Network Spaghettibrain
?
Libro cartaceo su PHPNuke a casa tua con posta prioritaria
?
Maggio 1997 - Febbraio 1998: Impiegato presso la Selpress Srl in qualità di Product Manager di Traffico Incluso 5 Gb
un software denominato INTRAPRESS che aveva come scopo quello di distribuire la Rassegna
Stampa in modo selettivo attraverso la rete Intranet delle aziende Clienti. Coordinamento del team Spaghetti "Dance + Marketing Tool"
?
di sviluppatori nella creazione del prodotto, definizione della roadmap di sviluppo dello stesso, e Hosting 200 Mb
?
interfacciamento con i clienti nella fase di Acquisto, implementazione e personalizzazione del Registrazione dominio
? PHPnuke Preinstallato
prodotto. Progetti seguiti direttamente: ALBACOM, FERRERO, CITYBANK, ENEL, MINISTERO ?
DEGLI INTERNI, COMUNE DI PADOVA, ASSAP, ROCHE, BRACCO FARMACEUTICA, 20000 Impression sul Network Spaghettibrain
?
CONSORZIO VENEZIA NUOVA. Newsletter 25.000 Nominativi
?
Libro cartaceo su PHPNuke a casa tua con posta prioritaria
?
SEMINARI, SPEECH E PUBBLICAZIONI: Tema personalizzato per il tuo PHPnuke
?
Traffico Incluso 7 Gb
?
Luglio 2001 – Webbit – Padova: PHPNuke, il sistema open source per gestire un portale [Speech Segnalazione su 1000 Motori di ricerca
tenuto come Chapter IWA/HWG]
Luglio 2001 – Webbit – Padova: Ambiti di applicazioni del software open source nella pubblica Spaghetti "Metal + Marketing Tool"
?
amministrazione [Speech tenuto come Chapter IWA/HWG] Hosting 500 Mb
?
Registrazione dominio
? PHPnuke Preinstallato
PERCORSO FORMATIVO: ?
50000 Impression sul Network Spaghettibrain
?
Attualmente Iscritto al Diploma di Laurea in Marketing e Comunicazione d'azienda, all’Università Newsletter 25.000 Nominativi
?
Cattolica del Sacro Cuore di Milano, 5 esami alla Laure. Libro cartaceo su PHPNuke a casa tua con posta prioritaria
?
Tema personalizzato per il tuo PHPnuke
?
Diploma in Ragioneria con voto 56/60 conseguito presso l’Istituto Tecnico Commerciale Mosè Traffico Incluso 7 Gb
?
Bianchi di Monza Segnalazione su 1000 Motori di ricerca
67
Questo libro è stato scritto tra Luglio e Settembre 2002 tra il mio ufficio in Brianza e il TGV che
mi portava a Parigi per le vacanze.

Il mio portatile è un Vecchio Notebook Dell con installata Linux Red Hat 7.3

Gli strumenti utilizzati per scrivere questo libro sono:

Openoffice per l'impaginazione (www.openoffice.org)


Gimp Per la grafica (www.gimp.org)

Il capitolo 10 è stato realizzato su windows(TM) per poter fare gli screenshot degli ambienti
descritti ma usando sempre Gimp e OpenOffice

Tutto ilsoftware utilizzato è Software libero privo di licenze. Anche questo libro è privo di licenze
ed è stato tilasciato sotto GNU Free Documentation License.

Per saperne di più sul software libero: www.gnu.org

Per saperne di più sull GNU free Documentation License


http://www.gnu.org/licenses/licenses.html

Ecco la foto del mio ufficio :-)

Potrebbero piacerti anche