Scritto da davidonzo il 11/02/2007, in OpenSource
ATTENZIONE!
L'articolo che stai leggendo è stato scritto 556 giorni orsono.
Le informazioni presenti potrebbero non essere aggiornate!
Uno dei problemi più noiosi di dblog è legato al suo editor visuale che non permette il linkaggio assoluto delle immagini.L'articolo che stai leggendo è stato scritto 556 giorni orsono.
Le informazioni presenti potrebbero non essere aggiornate!
Mi spiego meglio: usando la funzione upload del pannello di controllo di dblog, nel momento in cui scriviamo l'articolo con l'editor visuale FCKeditor, per inserire un'immagine nell'articolo ci basterà cliccare sull'apposito tasto e scegliere dall'elenco a tendina l'immagine. Penserà il sistema a leggere tutte le immagini disponibili contenute nella directory "Path_DirPublic" (che per molti di noi è /public/).
Il risultato in HTML sarà:
<img src="/public/immagine.png" alt="Testo alternativo" />
Seppur codice perfettamente funzionante, questo può creare problemi a chi legge il blog via feed. Su feedburner le immagini negli articoli del mio blog avevano un indirizzo del genere:
<img src="http://feeds.feedburner.com/public/immagine.png" alt="Testo alternativo" />
Indirizzo inesistente ed impossibilità del lettore di leggere al meglio, se non cliccando sul collegamento e portarlo all'articolo originale.
Per risolvere il problema basta fare un paio di cambiamenti a tre file di sistema del blog, evitando di toccare FCKeditor che è pur sempre un componente di parti terze
.I file necessario sono:
- inc_funzioni.asp (locato in /dblog/)
- articoli_aggiungi.asp (locato in /dblog/admin/)
- articoli_modifica.asp (locato in /dblog/admin/)
Nel file inc_funzioni.asp andiamo ad aggiungere la seguente funzione.
Function ImgToAll(Stringa)
Dim RegEx
Set RegEx = New RegExp
RegEx.Pattern = "<img src="""&Path_DirPublic&"(.*?)"" alt=""(.*?)"" />"
RegEx.Global = True
RegEx.IgnoreCase = True
Risultato = RegEx.Replace(Stringa, "<img src=""http://" & Request.ServerVariables("HTTP_HOST") & Path_DirPublic & "$1"" alt=""$2"" />")
Set RegEx = Nothing
ImgToAll = Risultato
End Function
Dim RegEx
Set RegEx = New RegExp
RegEx.Pattern = "<img src="""&Path_DirPublic&"(.*?)"" alt=""(.*?)"" />"
RegEx.Global = True
RegEx.IgnoreCase = True
Risultato = RegEx.Replace(Stringa, "<img src=""http://" & Request.ServerVariables("HTTP_HOST") & Path_DirPublic & "$1"" alt=""$2"" />")
Set RegEx = Nothing
ImgToAll = Risultato
End Function
La funzione si occupa di cercare i tag relativi alle immagini linkate in maniera relativa e rimpiazza il tutto con il link assoluto. Badate bene, per funzionare il tutto i link alle immagini devono essere scritti con codice valido!
Dblog già di suo usa codice XHTML, per cui la chiusura del tag img l'avrete sempre. Quello che NON dovete dimenticare è aggiungere il tag alt (ovvero la voce Testo Alternativo nella finestra di aggiunta immagine dell'editor visuale).
Avrei potuto evitare la cosa, ma in questo modo siete costretti a scrivere codice valido e la cosa non fa mai male
.Usiamo la funzione
Nei file articoli_aggiungi.asp e articoli_modifica.asp cerchiamo la stringa:
FTesto = SostituisciCaratteri(Request.Form("Testo"), "Si")
E subito sotto aggiungiamo:
FTesto = ImgToAll(FTesto)
Il risultato dovrà essere questo:
FTesto = SostituisciCaratteri(Request.Form("Testo"), "Si")
FTesto = ImgToAll(FTesto)
FTesto = ImgToAll(FTesto)
Tutto qua! Da ora in poi le immagini verrano linkate con l'indirizzo assoluto e i lettori esterni riusciranno a leggerle senza problemi!
Faccine
Lo stesso problema si rileva anche per le emoticons. Basta adottare una soluzione molto simile a quella vista sopra.
Nella funzione SostituisciCaratteri(Testo, PermettiTag) abbiamo una serie di righe simili a questa:
Risultato = Replace(Risultato, ": - (", "<img src="""& Path_Skin &"smile_triste.gif"" alt="": - ("" />")
Basta sostituire il tutto con righe di questo genere:
Risultato = Replace(Risultato, ": - (", "<img src=""http://" & Request.ServerVariables("HTTP_HOST")& Path_Skin &"smile_triste.gif"" alt="": - ("" />")
Dovrebbe essere tutto abbastanza intuitivo







