Newsgroup: it.comp.lang.perl
Titolo: tirare testo con perl

Ciao. Ho varie pagine nelle quali devo ripetere del testo in diverse parti 
della pagina; per evitare di scriverli sempre a mano (specie quando cambia), 
c'è qualche script che mi permetta di inserire degli snippet nei punti che 
voglio, mettendoci il contenuto di una pagina html o file di testo residente 
nel server del sito? 


Uhm... io userei HTML::Template.
In pratica trasformi tutte le tue pagine in template (in pratica dei file 
esattamente uguali a quelli che hai adesso ma con un tag <tmpl_var xxx> dove 
vuoi sostituire delle parti) e poi ti fai uno scriptino che legge i file da 
inserire, si carica i template, sostituisce il tag e poi scrive il risultato 
nella destinazione finale.
Puoi usare il tutto in due modi:
1) Manuale: quando modifichi il testo da sostituire rilanci lo script che ti 
rigenera le pagine
2) Dinamico: ti crei un cgi che prende in input il nome della la pagina da 
visualizzare e restituisce in output la pagina con il testo sostituito 
(metodo utile per siti web dinamici).

 Puoi usare il tutto in due modi:
Non ci ho capito nulla; non sono una programmatrice. Pensavo ci fossero 
script già pronti. 

 script già pronti. 
Il modo più semplice per fare quello che chiedi è probabilmente il buon 
vecchio SSI (Server Side Includes).
Giusto per darti un'idea, funziona così:
nel tuo codice html, nel punto dove vuoi che appaia il contenuto del 
file esterno (che supponiamo si chiami "altro_file.html"), devi mettere 
una direttiva tipo questa:
	<!--#include file="altro_file.html" -->
Quando poi il client richiederà la tua pagina, la linea di cui sopra 
verrà automaticamente sostituita dal contenuto del file esterno 
"altro_file.html".
Valuta tu se la cosa è troppo complicata.
La documentazione non manca, anche in italiano:
http://www.latoserver.it/SSI/include.php3
http://www.latoserver.it/SSI/ssi-ref.php3
Affinché la cosa funzioni servono però un paio di altre condizioni:
1. il tuo web server deve avere le estensioni SSI abilitate;
2. devi dire al server, in qualche maniera, che il tuo codice html ora 
contiene direttive SSI (che devono essere elaborate dal server prima di 
servire le pagine al client). In genere quest'ultima cosa la si ottiene 
semplicemente cambiando l'estensione dei tuoi file html in ".shtml" (ma 
dipende dalle impostazioni del server, anche se, ripeto, nel 99% dei 
casi si fa così).
Sono cose che bisogna chiedere all'amministratore del tuo web server.
Script semplici per fare quello che chiedi ce ne sarebbero, ma 
richiedono una pre-elaborazione in locale di tutte le tue pagine prima 
di caricarle sul tuo server.
Altrimenti, se vuoi che sia il server ad effettuare le necessarie 
interpolazioni dei contenuti on-demand, senza programmare, devi 
ricorrere ad una qualche applicazione CMS (ce n'è una quantità 
sterminata, che copre un'aplissimo range di complessità/potenza).
Ciao,
Emanuele.

Ciao, il fatto è che non mi pare un sito tale da giustificare un cms.
Ho trovato questo script.
#  Installation -
#
#  1 - Upload in ascii mode to your cgi-bin
#  2 - Chmod 755 plugit.cgi
#  3 - Create a file that holds everything you would like to be
#  displayed called plugit.txt and upload that to the same directory.
#  4 - Whatever page(s) you want Plug It! to show up in, include this
#  SSI line <!--#exec cgi="/cgi-bin/plugit.cgi" -->
{
&PlugIt;
}
sub PlugIt
{
$plugit="1.txt";
open (PLUG,$plugit) || die "can't open $plugout";
$plugit="";
while (<PLUG>){$plugit .=$_;}
close(PLUG);
print "Content-type: text/html\n\n";
print "$plugit";
}
1;
Se facessi 5 copie di questo script (plugit1, plugit2, ecc), e in ciascuno 
sostituissi 1.txt con 2.txt 3.txt ecc., e richiamassi ciascuna operazione di 
embedding con lo snippet <!--#exec cgi="/cgi-bin/plugit.cgi" --> (ma la 
pagina deve per forza essere comunque shtml?), potrebbe funzionare?
"Emanuele Zeppieri" <ema...@REtiscaliMOVE.it> ha scritto nel messaggio 
news:xnoCf.147771$65.41...@twister1.libero.it...



Ops, scusa.


Sì, *potrebbe* funzionare ma, nella migliore delle ipotesi, è 
completamente inutile! (Ma chi l'ha scritto quel codice?! Contiene 
almeno un paio di errori, anche se fosse corretto non servirebbe a 
niente e sembra redatto da uno che non ha mai scritto una riga di codice 
in vita sua...)
La direttiva SSI #exec serve per includere nella pagina l'output di uno 
script, ma lo script che hai postato si limita a leggere un file e a 
restituirlo in output pari pari (in realtà fa anche di peggio), per cui 
in definitiva l'unica cosa che fa è aggiungere complessità e inefficienza.
Lo stesso effetto lo hai semplicemente utilizzando la direttiva SSI 
#include che ti ho mostrato nel mio esempio precedente, in maniera molto 
più semplice, corretta ed efficiente: ad esempio basta ripetere n 
#include nel tuo html, una per ogni file che vuoi importare, piuttosto 
che farsi n copie di quello script assurdo e poi ripetere n volte la 
direttiva #exec nell'html.
Per giunta la direttiva #exec richiede un'abilitazione speciale nel web 
server, per così dire (talvolta i web server la disabilitano, mediante 
la direttiva IncludesNOEXEC).
Per quanto riguarda l'estensione .shtml, essa non è necessaria. Esiste 
un'alternativa: c'è una direttiva di Apache, che si chiama XBitHack, che 
permette di eseguire le direttive SSI nei file che hanno l'execute bit 
settato. Anche per questo devi rivolgerti a chi amministra il web server.
Infine una nota sulla sicurezza: utilizza SSI solo su pagine statiche, 
non su pagine il cui contenuto possa essere modificato dall'utente (tipo 
ad es. un guestbook).
Ciao,
Emanuele.

 settato. Anche per questo devi rivolgerti a chi amministra il web server.
Cosa devo chiedere allora al provider?
Grazie. 

 
Prima di chiedere fai questa semplice prova:
carica sul server, nella stessa directory, questi 2 file:
1. un file che si chiama "prova_ssi.shtml" il cui contenuto è soltanto 
la seguente riga:
<!--#include file="prova_ssi.txt" -->
2. un file di testo che si chiama "prova_ssi.txt", nel quale scrivi 
quello che vuoi, ad esempio la (sola) riga:
SSI funzionante!
quindi col tuo browser accedi a prova_ssi.shtml
Se nel browser compare il contenuto del file prova_ssi.txt (SSI 
funzionante!) allora ovviamente è tutto OK e puoi iniziare ad usare SSI.
Se invece ottieni una pagina vuota o un errore:
3. carica sul server, sempre nella stessa directory, un terzo file che 
si chiama (per forza) ".htaccess" (attenta al punto iniziale), il cui 
contenuto sarà soltanto la seguente riga:
Options +Includes
Riprova quindi a caricare nel browser prova_ssi.shtml
Se non funziona neanche così, allora chiedi al tuo provider come si 
utilizza SSI (oppure cercalo nella documentazione che dovrebbe mettere a 
disposizione dei clienti).
Ad esempio l'hosting base offerto da un provider piuttosto grande, 
Aruba, già prevede SSI, ed i due passi 1 e 2 di cui sopra sono 
sufficienti (per inciso, Aruba disabilita la direttiva #exec, quindi non 
ci sarebbe alcun modo di eseguire cgi mediante SSI, come necessario con 
lo script dell'altro messaggio).
Ovviamente quando fai le prove presta la massima attenzione alla 
corretta digitazione dei nomi dei file e delle direttive (copia & incolla).
Auguri e facci sapere come è andata (se è andata bene ;-)
Ciao,
Emanuele.