<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2179030760266299422</id><updated>2011-11-06T11:39:18.949+01:00</updated><category term='glitch'/><category term='poladroid'/><category term='Wordpress'/><category term='improvvisazione'/><category term='Firenze'/><category term='duchamp'/><category term='llford'/><category term='poster'/><category term='bauhaus'/><category term='tooltip'/><category term='tumblr'/><category term='disegno'/><category term='xiu zhen dao'/><category term='lomo'/><category term='fotografia'/><category term='graphic design'/><category term='css'/><category term='neve'/><category term='satie'/><category term='la buca'/><category term='Death in June'/><category term='minmalismo'/><category term='zen'/><category term='tipografia'/><category term='soundcloud'/><category term='menu'/><category term='vignette'/><category term='drone'/><category term='musica'/><category term='fancybox'/><category term='jQuery'/><category term='tao'/><category term='videodrome'/><category term='php'/><category term='tutorial'/><category term='malevitch'/><category term='radio roma popolare'/><category term='john cage'/><category term='post romantic empire'/><category term='Holga'/><category term='4&apos;33&apos;&apos;'/><category term='blog'/><category term='chitarra'/><category term='Gothic Network'/><category term='blixa bargeld'/><category term='Drupal'/><category term='readymade'/><category term='android'/><category term='ilford'/><category term='polaroid'/><category term='Nada-Design'/><category term='viaggio'/><category term='sviluppo'/><category term='web design'/><category term='e-commerce'/><title type='text'>my black tea!</title><subtitle type='html'>creatività, grafica, musica, foto, tè</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://myblackteapot.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://myblackteapot.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>blacktealover</name><uri>http://www.blogger.com/profile/07009043319199847342</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_1pfelnO3RgA/S1A4EyIvp3I/AAAAAAAAAdk/djFPE4BjWxk/S220/dadacat.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>31</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2179030760266299422.post-1367030618541195308</id><published>2011-07-17T15:20:00.007+02:00</published><updated>2011-07-17T19:57:52.594+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='glitch'/><category scheme='http://www.blogger.com/atom/ns#' term='blixa bargeld'/><category scheme='http://www.blogger.com/atom/ns#' term='4&apos;33&apos;&apos;'/><category scheme='http://www.blogger.com/atom/ns#' term='radio roma popolare'/><category scheme='http://www.blogger.com/atom/ns#' term='minmalismo'/><category scheme='http://www.blogger.com/atom/ns#' term='duchamp'/><category scheme='http://www.blogger.com/atom/ns#' term='drone'/><category scheme='http://www.blogger.com/atom/ns#' term='john cage'/><category scheme='http://www.blogger.com/atom/ns#' term='readymade'/><category scheme='http://www.blogger.com/atom/ns#' term='bauhaus'/><category scheme='http://www.blogger.com/atom/ns#' term='satie'/><category scheme='http://www.blogger.com/atom/ns#' term='malevitch'/><title type='text'>minimalista a chi?</title><content type='html'>Lunedì scorso (11 Luglio 2011) sono stato intervistato da Radio Roma Popolare sull'arte minimale (avevano letto il mio articolo di un anno o due fa sull'&lt;a href="http://www.gothicnetwork.org/articoli/state-mind-introduzione-alla-minimal-art"&gt;arte minimale della Panza Collection&lt;/a&gt; che scrissi per &lt;a href="http://www.gothicnetwork.org/"&gt;Gothic Network&lt;/a&gt;), e il link col minimalismo era fornito dall'esibizione a Roma di Yann Tiersen, che generalmente è associato con la musica minimale.&lt;br /&gt;&lt;br /&gt;A parte il fatto che era la prima volta che venivo intervistato per radio (e sinceramente mi ha fatto un effetto un po' strano, io ho bisogno di vedere l'interlocutore quando ci parlo, specialmente se non lo conosco! il silenzio abissale che circondava le mie parole non è stato molto rassicurante... ma comunque), non sono riuscito esattamente a indirizzare l'intervista come avrei voluto.&lt;br /&gt;&lt;br /&gt;in realtà, visto che mi avevano chiesto un'introduzione storico-concettuale alla minimal art, avrei voluto fare un discorso che partiva, come sempre per me, da Duchamp e John Cage, per passare dal Bauhaus, dagli espressionisti astratti, dal suprematismo di Malevitch, da Frank Stella, per introdurre Steve Reich, Roach, Riley, La Monte Young e finire con i Coil di &lt;i&gt;Queens of the Circulating Library&lt;/i&gt;! e poi anche le collaborazioni di Sakamoto con Alva Noto e la musica elettronica della Raster-Norton.&lt;br /&gt;&lt;br /&gt;io tendo sempre a far iniziare e finire tutto con Duchamp (e altri dadaisti a seconda delle necessità) perché per me quella è la fine di tutta l'arte in senso stretto: Duchamp ha ucciso l'arte e il gesto artistico, e quindi dopo quel niente (un bel &lt;i&gt;recul neantisant&lt;/i&gt; alla Sartre) non c'è rimasto proprio nulla da cercare, da trovare, da sperare, da credere e da fare. e infatti pochissimi l'hanno digerita questa pagina di storia, la maggior parte ha fatto finta di nulla ed è andata avanti comunque, creando poi magari delle gran belle opere; ma è come sapere che la vita non ha scopo (in realtà ce l'ha, eccome se ce l'ha, ma è nascosto bene agli occhi dei più), ti rimane un amaro in bocca che fa letteralmente impressione.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.marcelduchamp.net/images/bicycle_wheel.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://www.marcelduchamp.net/images/bicycle_wheel.jpg" width="236" /&gt;&lt;/a&gt;il punto comunque sia è che i &lt;i&gt;&lt;a href="http://www.blogger.com/goog_1504924026"&gt;readymade&lt;/a&gt;&lt;/i&gt;&lt;a href="http://en.wikipedia.org/wiki/Readymades_of_Marcel_Duchamp"&gt; di Duchamp&lt;/a&gt; sono un esempio di minimalismo totale: minimalismo materiale, visto che l'artista non fa niente di concreto; minimalismo concettuale, visto che tutto si riduce ad un solo gesto simbolico (mettere la propria firma su qualcosa di già fatto); minimalismo filosofico, visto che non c'è nessuna ragione per l'aver fatto quel gesto. difficile andare avanti da lì. poi, che alcuni readymades siano semplicemente geniali, è fuori discussione; anche la poesia insita in loro, che spesso passa inosservata, è di sublime gusto (e penso a &lt;i&gt;Pharmacy&lt;/i&gt;, a &lt;i&gt;In advance of a broken arm&lt;/i&gt;, alla ruota di bicicletta...).&lt;br /&gt;&lt;br /&gt;e poi 4'33'' di John Cage! io già m'immagino questo pianista (David Tudor) che entra sul palco, si siede, e chiude il coperchio della tastiera del pianoforte (&lt;i&gt;"tacet"&lt;/i&gt;), e sta fermo. ripetere per tre movimenti. il silenzio... più minimalista di così, come si fa? anche da qui, non si può andare avanti molto; si può soltanto, quindi, tornare indietro: anche Satie, con la &lt;i&gt;musique d'ameublement&lt;/i&gt; (anni '20) ha qualcosa in più: il concetto di fruizione, anche se in modo diverso da quello dovuto all'intrattenimento. da lì poi nasce tutta l'&lt;i&gt;ambient music&lt;/i&gt;.&amp;nbsp;Cage disse a proposito di 4'33'':&lt;br /&gt;&lt;blockquote&gt;&lt;p&gt;They missed the point. There’s no such thing as silence. What they thought was silence, because they didn’t know how to listen, was full of accidental sounds. You could hear the wind stirring outside during the first movement. During the second, raindrops began pattering the roof, and during the third the people themselves made all kinds of interesting sounds as they talked or walked out.&lt;/p&gt;&lt;/blockquote&gt;e quindi, da buon seguace Zen, Cage ci ricorda che il punto sta nell'ascoltarsi, nel concedersi un qualche minuto di presenza a se stessi, prima che la coscienza sia di nuovo inghiottita e fatta a brani dagli uncini della società. questo è ottimo minimalismo: il gesto artistico è ridotto davvero all'osso, ma la portata concettuale è forte e filosoficamente inquadrata.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.classicdesign.it/images/wassilly-chair.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://www.classicdesign.it/images/wassilly-chair.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;per quel che riguarda il Bauhaus (ma anche per De Stijl), volevo solo ricordare come si ricercasse la purezza del gesto creativo, in termini di colore (Itten), materiali, geometria; la tendenza a semplificare: &lt;i&gt;"less is more&lt;/i&gt;", diceva Mies Van Der Rohe. e così ci mettiamo dentro pure l'architettura e il design industriale. quanti di voi hanno una di quelle sedie Wassily di Marcel Breuer? e quanti sanno che le ha disegnate lui? un solo tubo di alluminio piegato a inscriversi in uno spazio cubico. anche questo è minimalismo top class.&lt;br /&gt;&lt;br /&gt;e poi, a parte tutti i docenti del primo Bauhaus, vorrei ricordare il mitico quadrato nero di Malevitch: una specie di monolito alla 2001 odissea nello spazio, un buco nero dove tutto confluisce, concettualmente ed emotivamente. dice Blixa Bargeld, in &lt;a href="http://www.youtube.com/watch?v=CnnGYaqjW-A"&gt;Sabrina&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;&lt;p&gt;(Your color) is as black as Malevitch's square&lt;br /&gt;The cold furnace in which we stare&lt;br /&gt;A high pitch on a future scale&lt;br /&gt;It is a starless winternight's tale&lt;br /&gt;&lt;br /&gt;It suits you well&lt;br /&gt;&lt;br /&gt;It is that black&lt;/p&gt;&lt;/blockquote&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://upload.wikimedia.org/wikipedia/commons/5/57/Malevich.black-square.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="197" src="http://upload.wikimedia.org/wikipedia/commons/5/57/Malevich.black-square.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;mi hanno chiesto se gli smart phone sono minimali: immagino vi sarete fatti un'idea di cosa considero io minimale - di sicuro uno smart phone, che addensa tutte le funzioni sociali di una persona in un unico attrezzo tecnologico, sottoponendoci a tutta una serie di sovraccarichi sensoriali e mentali, non può certo essere considerato un "sottrarre", ma solo un "aggiungere": siamo agli antipodi. poi, che il loro design sia spesso pulito e minimale, è un altro discorso.&lt;br /&gt;&lt;br /&gt;dal punto di vista musicale, non ho idea di chi in Italia possa definirsi un minimalista. è un po' che ho perso di vista la scena, e me ne scuso con gli ascoltatori dell'intervista. però nella storia della musica, anche se non c'è niente di nuovo dagli anni '70 (che non ho potuto vivere per ragioni anagrafiche, ma che conosco per passione), bisogna dire che i laptop hanno portato una ventata di possibilità nuove nel reame dell'elettronica, e che siamo lontani anni luce, imbrigliati come siamo nel concetto di musica = canzone = intrattenimento, dall'averle esplorate tutte. il &lt;i&gt;&lt;a href="http://en.wikipedia.org/wiki/Glitch_(music)"&gt;glitch&lt;/a&gt;&lt;/i&gt;, per quanto generalmente ultra noioso, è qualcosa che può inserirsi nell'ambito del minimalismo, con la sua discendenza dall'industrial e con l'utilizzo di ciò che sarebbe considerato un "errore" come materiale sonoro. e poi tutta la &lt;i&gt;&lt;a href="http://en.wikipedia.org/wiki/Drone_music"&gt;drone music&lt;/a&gt;&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;un sacco di roba, per parlare di &lt;i&gt;minimalismo&lt;/i&gt;, vero?&lt;br /&gt;&lt;br /&gt;ecco cosa vi siete persi, ascoltatori di Radio Roma Popolare! però io mi sono divertito lo stesso...&lt;br /&gt;&lt;br /&gt;edit: e i &lt;i&gt;nothing&lt;/i&gt; di &lt;a href="http://www.panmodern.com/rayjohnson/rayocide.html"&gt;Ray Johnson&lt;/a&gt;, dove li mettiamo?!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2179030760266299422-1367030618541195308?l=myblackteapot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/1367030618541195308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/1367030618541195308'/><link rel='alternate' type='text/html' href='http://myblackteapot.blogspot.com/2011/07/minimalista-chi.html' title='minimalista a chi?'/><author><name>blacktealover</name><uri>http://www.blogger.com/profile/07009043319199847342</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_1pfelnO3RgA/S1A4EyIvp3I/AAAAAAAAAdk/djFPE4BjWxk/S220/dadacat.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-2179030760266299422.post-1039670837934824958</id><published>2011-07-17T11:47:00.003+02:00</published><updated>2011-07-17T11:50:46.430+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='videodrome'/><category scheme='http://www.blogger.com/atom/ns#' term='tumblr'/><title type='text'>in the middle of the desert...</title><content type='html'>Negli ultimi mesi mi sono dato a &lt;a href="http://hereandnowmaybe.tumblr.com/"&gt;Tumblr&lt;/a&gt;. è quanto più di microblogging io riesca a fare! e come al solito, essendo &lt;i&gt;pigro e avaro&lt;/i&gt;, non rebloggo un granché, e posto quasi esclusivamente roba mia (sono una "fonte"). comunque mi rispecchia abbastanza bene, ed il bello di quel tipo di blogging è che riesce a seguire con discreta facilità lo stream of consciousness della persona, spalmato sui giorni e le settimane. meno parole, più autenticità, forse! speriamo...&lt;br /&gt;&lt;br /&gt;l'unico "problema", ma solo per me, è la media dell'età dei fruitori, decisamente bassa, siamo intorno ai 15 anni. detto questo comunque ci sono personaggi di grande talento là dentro...&lt;br /&gt;&lt;br /&gt;rappresenta bene la società online del momento, specialmente quella americana, e il quadro della situazione è abbastanza disastroso. il problema è semplice, ciascun adolescente è disgregato in milioni di pezzi, ed è chiuso in se stesso in modo impressionante. tumblr rende semplicissimo il nutrire la propria &lt;i&gt;gola emotiva&lt;/i&gt; con il pulsante di reblog, che ti consente di appropriarti di qualcosa che non è tuo, ma che senti ti rappresenti. e quindi, milioni di pagine di post che girano senza una parola, perché non ci sono praticamente i commenti liberi. e siccome il tutto gira principalmente per immagini, anche le affermazioni sono spessissimo sovraimposte su foto: generalmente su un'immagine viene stampata un riga o due di testo con un editor grafico qualsiasi (l'estetica grunge ovviamente domina, è la visione dei derelitti). le affermazioni sono per la maggior parte ciniche osservazioni sulla futilità o la mancanza di significato dell'esistenza. il vuoto che si respira dietro questi blog è a volte terrificante...&lt;br /&gt;&lt;br /&gt;è interessante poi vedere come i media &lt;i&gt;siano&lt;/i&gt; la realtà. il cinema specialmente, e la musica in secundis, sono il materiale grezzo che forma gli usi e i costumi dell'ultima generazione (i &lt;i&gt;digital natives&lt;/i&gt;). mi viene in mente Videodrome (1983!), vediamo se trovo quel dialogo: sì, eccolo qua!&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://3.gvt0.com/vi/s2RdCyM1j7s/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/s2RdCyM1j7s&amp;fs=1&amp;source=uds" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/s2RdCyM1j7s&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;blockquote&gt;&lt;p&gt;The television screen is the retina of the mind's eye.&lt;/p&gt;&lt;p&gt;Therefore, the television screen is part of the physical structure of the brain.&lt;/p&gt;&lt;p&gt;Therefore, whatever appears on the television screen emerges as raw experience for those who watch it.&lt;/p&gt;&lt;p&gt;Therefore, television is reality, and reality is less than television.&lt;/p&gt;&lt;/blockquote&gt;dal punto di vista musicale, le buone notizie sono che, almeno in America, l'indie sta vincendo! questo vuol dire che la circolazione di musica non mainstream sta aumentando, anche se a bene vedere, questo era proprio il minimo che potevamo aspettarci. però vedere post di ragazzetti che citano i Bardo Pond o i Clann Zù non è male, per me... ma questo è materiale per un altro post: "la morte della musica popolare".&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;in ogni caso, ecco qualche tumblelog che vale la pena guardarsi, di tanto in tanto:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://-polaroid.tumblr.com/"&gt;In an instant&lt;/a&gt;&amp;nbsp;(wonderful polaroids collection/submission)&lt;/li&gt;&lt;li&gt;&lt;a href="http://misterchu.tumblr.com/"&gt;Mister Chu&lt;/a&gt;&amp;nbsp;(one of a kind)&lt;/li&gt;&lt;li&gt;&lt;a href="http://thisisnthappiness.com/"&gt;This isn't happiness&lt;/a&gt;&amp;nbsp;(graphic design)&lt;/li&gt;&lt;li&gt;&lt;a href="http://supersonicelectronic.com/"&gt;Supersonic Electronic&lt;/a&gt;&amp;nbsp;(art)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2179030760266299422-1039670837934824958?l=myblackteapot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/1039670837934824958'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/1039670837934824958'/><link rel='alternate' type='text/html' href='http://myblackteapot.blogspot.com/2011/07/in-middle-of-desert.html' title='in the middle of the desert...'/><author><name>blacktealover</name><uri>http://www.blogger.com/profile/07009043319199847342</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_1pfelnO3RgA/S1A4EyIvp3I/AAAAAAAAAdk/djFPE4BjWxk/S220/dadacat.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-2179030760266299422.post-5616918340790346628</id><published>2011-03-03T09:56:00.000+01:00</published><updated>2011-03-03T09:56:36.161+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vignette'/><category scheme='http://www.blogger.com/atom/ns#' term='lomo'/><category scheme='http://www.blogger.com/atom/ns#' term='fotografia'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Android Vignette Lomo stuff...</title><content type='html'>In questo periodo sono passato a 3 e mi hanno dato un telefono HTC con il quale ho sostituito il mio vecchissimo Nokia...&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox[nokia]" href="https://lh6.googleusercontent.com/-Ljj8-OCcBPw/TW9Udh5UI0I/AAAAAAAAAuY/Aqm9jXkEXL0/s1600/2011-03-03-09-33-02-222.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="https://lh6.googleusercontent.com/-Ljj8-OCcBPw/TW9Udh5UI0I/AAAAAAAAAuY/Aqm9jXkEXL0/s320/2011-03-03-09-33-02-222.jpg" width="261" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Una delle prime cose che ho fatto è acquistare &lt;a href="http://neilandtheresa.co.uk/Android/Vignette/"&gt;Vignette&lt;/a&gt;, un'applicazione per fare foto applicandoci effetti vari di simulazione pellicola, che è veramente efficace!&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://market.android.com/details?id=uk.co.neilandtheresa.Vignette"&gt;&lt;img border="0" src="http://www.bestandroidappsreview.com/wp-content/uploads/2010/05/Top-Android-App-Vignette-Camera-Barcode.png" /&gt;&lt;/a&gt;&lt;/div&gt;A parte il controsenso di creare effetti Lomo/lo-fi con un aggeggio così tecnologico, rimane il divertimento di avere sempre con sé la possibilità di fare snapshot di questo tipo...&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a rel="lightbox[vignette]" href="https://lh4.googleusercontent.com/-9ZbXx-x0xUc/TW9UjCzAQsI/AAAAAAAAAuc/DNRwTINB7YY/s1600/2011-02-12-15-57-33-910.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="240" src="https://lh4.googleusercontent.com/-9ZbXx-x0xUc/TW9UjCzAQsI/AAAAAAAAAuc/DNRwTINB7YY/s320/2011-02-12-15-57-33-910.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Ilford&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a rel="lightbox[vignette]" href="https://lh5.googleusercontent.com/-jzaQq6n_BC4/TW9UkKzxY9I/AAAAAAAAAug/eASBXN_z3G4/s1600/2011-02-14-13-44-50-832.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="https://lh5.googleusercontent.com/-jzaQq6n_BC4/TW9UkKzxY9I/AAAAAAAAAug/eASBXN_z3G4/s320/2011-02-14-13-44-50-832.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Cross/process&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a rel="lightbox[vignette]" href="https://lh6.googleusercontent.com/--_iXc7dtedE/TW9UkqC4dQI/AAAAAAAAAuk/-yfafFgvOC8/s1600/2011-02-14-22-57-01-852.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="https://lh6.googleusercontent.com/--_iXc7dtedE/TW9UkqC4dQI/AAAAAAAAAuk/-yfafFgvOC8/s320/2011-02-14-22-57-01-852.jpg" width="241" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Toy camera B/W&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox[vignette]" href="https://lh5.googleusercontent.com/-EMh__Gu90W0/TW9UlEDl19I/AAAAAAAAAuo/T1NqWSqO8iQ/s1600/2011-02-14-22-58-50-526.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="https://lh5.googleusercontent.com/-EMh__Gu90W0/TW9UlEDl19I/AAAAAAAAAuo/T1NqWSqO8iQ/s320/2011-02-14-22-58-50-526.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a rel="lightbox[vignette]" href="https://lh3.googleusercontent.com/-PdrRtsD32zA/TW9UloBVaqI/AAAAAAAAAus/VdcyZnQxYl4/s1600/2011-02-14-23-01-07-135.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="https://lh3.googleusercontent.com/-PdrRtsD32zA/TW9UloBVaqI/AAAAAAAAAus/VdcyZnQxYl4/s320/2011-02-14-23-01-07-135.jpg" width="241" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Leaky&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a rel="lightbox[vignette]" href="https://lh6.googleusercontent.com/-l2mtfx0CGdk/TW9UmGOeDGI/AAAAAAAAAuw/gWtCHXUsnmU/s1600/2011-02-15-08-30-15-028.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="https://lh6.googleusercontent.com/-l2mtfx0CGdk/TW9UmGOeDGI/AAAAAAAAAuw/gWtCHXUsnmU/s320/2011-02-15-08-30-15-028.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Toy camera leaky square crop&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox[vignette]" href="https://lh5.googleusercontent.com/-lJpzH8OuXBM/TW9Umj3b5JI/AAAAAAAAAu0/qqxApchLeQ4/s1600/2011-02-15-08-45-11-056.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="https://lh5.googleusercontent.com/-lJpzH8OuXBM/TW9Umj3b5JI/AAAAAAAAAu0/qqxApchLeQ4/s320/2011-02-15-08-45-11-056.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a rel="lightbox[vignette]" href="https://lh3.googleusercontent.com/-7JKh_XclapY/TW9Um5fErHI/AAAAAAAAAu4/RVES2yyCKtA/s1600/2011-02-15-09-03-49-049-copy-1.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="https://lh3.googleusercontent.com/-7JKh_XclapY/TW9Um5fErHI/AAAAAAAAAu4/RVES2yyCKtA/s320/2011-02-15-09-03-49-049-copy-1.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Infrared 6x6 full bleed&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a rel="lightbox[vignette]" href="https://lh5.googleusercontent.com/-kYj2Tyb79QM/TW9UnS-8l3I/AAAAAAAAAu8/OPcyN1XqLSQ/s1600/2011-02-16-18-20-05-861.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="296" src="https://lh5.googleusercontent.com/-kYj2Tyb79QM/TW9UnS-8l3I/AAAAAAAAAu8/OPcyN1XqLSQ/s320/2011-02-16-18-20-05-861.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Toy camera 35mm full bleed&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a rel="lightbox[vignette]" href="https://lh5.googleusercontent.com/-8u4fvtpIfo8/TW9Un68e77I/AAAAAAAAAvA/gZSC7pgcitg/s1600/2011-02-16-18-20-46-626.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="https://lh5.googleusercontent.com/-8u4fvtpIfo8/TW9Un68e77I/AAAAAAAAAvA/gZSC7pgcitg/s320/2011-02-16-18-20-46-626.jpg" width="296" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Leaky 35mm full bleed&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox[vignette]" href="https://lh5.googleusercontent.com/--UXQ-QXJJGw/TW9UopLv7WI/AAAAAAAAAvE/__ZiA8prCNo/s1600/2011-02-16-18-38-06-211.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="https://lh5.googleusercontent.com/--UXQ-QXJJGw/TW9UopLv7WI/AAAAAAAAAvE/__ZiA8prCNo/s320/2011-02-16-18-38-06-211.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox[vignette]" href="https://lh4.googleusercontent.com/-f1M4gfOc-OU/TW9UpBC8emI/AAAAAAAAAvI/u-e889Wcp-Q/s1600/2011-02-17-09-21-28-758.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="https://lh4.googleusercontent.com/-f1M4gfOc-OU/TW9UpBC8emI/AAAAAAAAAvI/u-e889Wcp-Q/s320/2011-02-17-09-21-28-758.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a rel="lightbox[vignette]" href="https://lh6.googleusercontent.com/-BlADrFHpMAY/TW9Uph3QW6I/AAAAAAAAAvM/o90UQG4EnSc/s1600/2011-02-18-12-52-47-561.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" height="320" src="https://lh6.googleusercontent.com/-BlADrFHpMAY/TW9Uph3QW6I/AAAAAAAAAvM/o90UQG4EnSc/s320/2011-02-18-12-52-47-561.jpg" width="320" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Leaky 6x6&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox[vignette]" href="https://lh6.googleusercontent.com/-WOM2Cn8-TlM/TW9Up4U7_sI/AAAAAAAAAvQ/3VeO1haWZ_A/s1600/2011-02-23-22-53-34-040-copy-1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="https://lh6.googleusercontent.com/-WOM2Cn8-TlM/TW9Up4U7_sI/AAAAAAAAAvQ/3VeO1haWZ_A/s320/2011-02-23-22-53-34-040-copy-1.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox[vignette]" href="https://lh5.googleusercontent.com/-a8NBgXcOJYc/TW9UqVW8D5I/AAAAAAAAAvU/peqmESF2ru4/s1600/2011-03-02-11-43-39-917.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="https://lh5.googleusercontent.com/-a8NBgXcOJYc/TW9UqVW8D5I/AAAAAAAAAvU/peqmESF2ru4/s320/2011-03-02-11-43-39-917.jpg" width="241" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2179030760266299422-5616918340790346628?l=myblackteapot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/5616918340790346628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/5616918340790346628'/><link rel='alternate' type='text/html' href='http://myblackteapot.blogspot.com/2011/03/android-vignette-lomo-stuff.html' title='Android Vignette Lomo stuff...'/><author><name>blacktealover</name><uri>http://www.blogger.com/profile/07009043319199847342</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_1pfelnO3RgA/S1A4EyIvp3I/AAAAAAAAAdk/djFPE4BjWxk/S220/dadacat.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh6.googleusercontent.com/-Ljj8-OCcBPw/TW9Udh5UI0I/AAAAAAAAAuY/Aqm9jXkEXL0/s72-c/2011-03-03-09-33-02-222.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2179030760266299422.post-63018785322092740</id><published>2011-02-26T16:08:00.001+01:00</published><updated>2011-02-26T16:09:06.496+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='poster'/><category scheme='http://www.blogger.com/atom/ns#' term='fotografia'/><title type='text'>Auguries of Innocence</title><content type='html'>Nuova serie ispirata da uno dei miei preferiti di sempre, William Blake:&lt;br /&gt;&lt;blockquote&gt;&lt;p&gt;Ma ti sai drogare solo di Blake? :D&lt;/p&gt;&lt;span&gt;&lt;a href="http://www.flickr.com/photos/29591944@N02/"&gt;Alessandra&lt;/a&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox" href="https://lh5.googleusercontent.com/-Mtm2ennBARM/TWkUqR8W3sI/AAAAAAAAAuM/J3XIpOxq4-0/s1600/D70_0576.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="https://lh5.googleusercontent.com/-Mtm2ennBARM/TWkUqR8W3sI/AAAAAAAAAuM/J3XIpOxq4-0/s320/D70_0576.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;La serie in realtà è nata per impratichirsi con la nuova Nikon D7000!&lt;br /&gt;Sarà composta da tutte le massime degli &lt;i&gt;Auguries of Innocence&lt;/i&gt;, per un totale di 65 immagini.&lt;br /&gt;&lt;br /&gt;Nella stampa di prova qua sopra ho dimenticato di fare l'embedding della splendida font gotica di famiglia "textura" che avevo usato per il lettering... sarebbe dovuta essere così:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox" href="http://4.bp.blogspot.com/-GCEBFXM7k34/TWkXHfEfwmI/AAAAAAAAAuQ/LxBqKASvmLs/s1600/53-54.jpg" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="400" width="400" src="http://4.bp.blogspot.com/-GCEBFXM7k34/TWkXHfEfwmI/AAAAAAAAAuQ/LxBqKASvmLs/s400/53-54.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2179030760266299422-63018785322092740?l=myblackteapot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/63018785322092740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/63018785322092740'/><link rel='alternate' type='text/html' href='http://myblackteapot.blogspot.com/2011/02/auguries-of-innocence.html' title='Auguries of Innocence'/><author><name>blacktealover</name><uri>http://www.blogger.com/profile/07009043319199847342</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_1pfelnO3RgA/S1A4EyIvp3I/AAAAAAAAAdk/djFPE4BjWxk/S220/dadacat.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh5.googleusercontent.com/-Mtm2ennBARM/TWkUqR8W3sI/AAAAAAAAAuM/J3XIpOxq4-0/s72-c/D70_0576.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2179030760266299422.post-1732821024947220390</id><published>2011-01-30T22:32:00.003+01:00</published><updated>2011-01-30T22:35:37.965+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web design'/><category scheme='http://www.blogger.com/atom/ns#' term='Drupal'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Drupal 6: blocco con dati del 'nodo collegato'</title><content type='html'>In questo periodo sono stato davvero indaffarato per le fasi finali del mio lavoro con il &lt;a href="http://www.comune.monsummano-terme.pt.it/"&gt;&lt;b&gt;Comune di Monsummano Terme&lt;/b&gt;&lt;/a&gt;, per il quale ho gestito tutta la migrazione a &lt;a href="http://www.drupal.org/"&gt;&lt;b&gt;Drupal&lt;/b&gt;&lt;/a&gt; come interfaccia gestionale: e non solo, stesso lavoro in contemporanea anche per altri tre comuni della Valdinievole (&lt;b&gt;Larciano&lt;/b&gt;, &lt;b&gt;Lamporecchio&lt;/b&gt;, &lt;b&gt;Pieve a Nievole&lt;/b&gt;), che prima erano gestiti in modo associato, ma adesso avevano la necessità di avere piattaforme gestionali indipendenti.&lt;br /&gt;&lt;br /&gt;Dato che il layout esteriore è rimasto inalterato, ho dovuto soddisfare una serie di richieste di presentazione di contenuti che non sarebbe stato possibile gestire con le funzionalità di default di Drupal. Ad esempio, oggi farò vedere com'è semplice andare a pescare del contenuto "secondario" e metterlo su un blocco in una regione qualsiasi della pagina.&lt;br /&gt;&lt;br /&gt;Nel sito del Comune, ciascuna pagina informativa è di competenza di un certo Ufficio, che a sua volta è rappresentato da un nodo (di un apposito tipo di contenuto). L'Ufficio di competenza deve essere visualizzato in un apposito box sulla colonna destra, completo di tutte le informazioni di pubblica utilità (link, orari d'apertura, recapiti vari).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_1pfelnO3RgA/TUXX96TSn0I/AAAAAAAAAuA/MyZu_GWaBOI/s1600/suap.png" imageanchor="1" rel="lightbox" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://1.bp.blogspot.com/_1pfelnO3RgA/TUXX96TSn0I/AAAAAAAAAuA/MyZu_GWaBOI/s400/suap.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;L'Ufficio è collegato alla pagina tramite un campo CCK 'nodo collegato' a selezione univoca: una tendina consente di scegliere uno qualsiasi dei nodi del tipo 'Ufficio' precedentemente pubblicati.&lt;br /&gt;&lt;br /&gt;Il problema da risolvere è caricare i dati di un nodo che non è quello caricato nella pagina, ma bensì un nodo ad essa collegato; inoltre lavorando in un blocco non abbiamo a disposizione la variabile $node con tutti i dati del nodo della pagina.&lt;br /&gt;&lt;br /&gt;Dobbiamo quindi  caricare prima il nodo principale, e poi, accedendo al campo 'nodo collegato', caricare il nodo collegato ed estrarre i dati che ci servono. A tal fine usiamo la funzione &lt;a href="http://api.drupal.org/api/drupal/modules--node--node.module/function/node_load/6" style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;node_load()&lt;/a&gt;, che ha bisogno di un NID per poter funzionare.&lt;br /&gt;&lt;br /&gt;Per individuare l'ID del nodo principale, sfruttiamo la funzione &lt;a href="http://api.drupal.org/api/drupal/includes--path.inc/function/arg/6" style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;arg()&lt;/a&gt;, che ritorna una parte del path corrente: ad esempio, in una pagina nodo con un path del tipo &lt;i&gt;www.mysite.com/node/nid&lt;/i&gt; &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;arg(0)&lt;/span&gt; ritorna "node", &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;arg(1)&lt;/span&gt; ritorna "nid", e così via.&lt;br /&gt;&lt;br /&gt;Tutto il codice che esamineremo da ora in poi va a finire in un bel blocco nuovo da mettere dovunque più ci piaccia.&lt;br /&gt;&lt;pre class="brush: php;" name="code"&gt;&amp;lt;?php &lt;br /&gt;if ( arg(0) == 'node' &amp;amp;&amp;amp; is_numeric(arg(1)) ) {&lt;br /&gt;$node = node_load(arg(1));&lt;br /&gt;$node_collegato= node_load($node-&amp;gt;field_ufficiocompetenza[0]["nid"]);&lt;br /&gt;// codice per estrarre i dati d'interesse dal nodo collegato&lt;br /&gt;}&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;span class="small"&gt;La condizione serve per assicurarsi di avere a che fare con una pagina/nodo (ovviamente funziona anche se il path è sotto forma di alias).&lt;/span&gt;&lt;br /&gt;Il primo uso di &lt;span style="font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;"&gt;node_load&lt;/span&gt; carica il nodo principale, il secondo accede al campo CCK che riporta il NID del nodo Ufficio collegato.Il resto è facile: basta stampare i dati che ci interessano con il markup necessario a formattare il tutto.Quindi il mio blocco "ufficio di competenza" finito e pronto all'uso è:&lt;br /&gt;&lt;pre class="brush: php;" name="code"&gt;&amp;lt;?php &lt;br /&gt;global $base_path;&lt;br /&gt;&lt;br /&gt;if ( arg(0) == 'node' &amp;amp;&amp;amp; is_numeric(arg(1)) ) {&lt;br /&gt;&lt;br /&gt;$node = node_load(arg(1));&lt;br /&gt;$node_collegato= node_load($node-&amp;gt;field_ufficiocompetenza[0]["nid"]);&lt;br /&gt;if($node-&amp;gt;field_ufficiocompetenza[0]["nid"]&amp;gt;0) {&lt;br /&gt; print "&amp;lt;div class=\"itemdx\"&amp;gt;";&lt;br /&gt; print "&amp;lt;h2&amp;gt;&amp;lt;a href=\"".$base_path.$node_collegato-&amp;gt;path."\" title=\"pagina "".$node_collegato-&amp;gt;title.""\"&amp;gt;".$node_collegato-&amp;gt;title."&amp;lt;/a&amp;gt;&amp;lt;/h2&amp;gt;";&lt;br /&gt; print "&amp;lt;ul&amp;gt;";&lt;br /&gt; print "&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Settore: &amp;lt;/b&amp;gt;".$node_collegato-&amp;gt;field_settore[0]["value"]."&amp;lt;/li&amp;gt;";&lt;br /&gt; print "&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Orario: &amp;lt;/b&amp;gt;".$node_collegato-&amp;gt;field_apertura[0]["value"]."&amp;lt;/li&amp;gt;";&lt;br /&gt; print "&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Responsabile ufficio: &amp;lt;/b&amp;gt;".$node_collegato-&amp;gt;field_responsabile[0]["value"]."&amp;lt;/li&amp;gt;";&lt;br /&gt; print "&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Telefono: &amp;lt;/b&amp;gt;".$node_collegato-&amp;gt;field_telefono[0]["value"]."&amp;lt;/li&amp;gt;";&lt;br /&gt; print "&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Fax: &amp;lt;/b&amp;gt;".$node_collegato-&amp;gt;field_fax[0]["value"]."&amp;lt;/li&amp;gt;";&lt;br /&gt; print "&amp;lt;/ul&amp;gt;";&lt;br /&gt; print "&amp;lt;/div&amp;gt;";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;?&amp;gt;&amp;nbsp; &lt;/pre&gt;La condizione della riga 8 serve per assicurarsi che vi sia effettivamente un Ufficio collegato; altrimenti il blocco rimane vuoto.&lt;br /&gt; &lt;br /&gt;Con lo stesso metodo poi ci si può sbizzarrire a suddividere i contenuti nelle varie regioni tramite altri blocchi.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2179030760266299422-1732821024947220390?l=myblackteapot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/1732821024947220390'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/1732821024947220390'/><link rel='alternate' type='text/html' href='http://myblackteapot.blogspot.com/2011/01/drupal-6-blocco-con-dati-del-nodo.html' title='Drupal 6: blocco con dati del &apos;nodo collegato&apos;'/><author><name>blacktealover</name><uri>http://www.blogger.com/profile/07009043319199847342</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_1pfelnO3RgA/S1A4EyIvp3I/AAAAAAAAAdk/djFPE4BjWxk/S220/dadacat.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_1pfelnO3RgA/TUXX96TSn0I/AAAAAAAAAuA/MyZu_GWaBOI/s72-c/suap.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2179030760266299422.post-1633348668414437948</id><published>2010-12-22T17:38:00.007+01:00</published><updated>2011-01-13T14:10:59.505+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web design'/><category scheme='http://www.blogger.com/atom/ns#' term='Drupal'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>Drupal + jQuery: galleria fotografica stile ‘filmstrip’</title><content type='html'>Per il sito &lt;a href="http://www.voilalebijou.com/"&gt;Voilà le Bijou&lt;/a&gt;, che espone le creazioni di bigiotteria di Donella Menichini, ho sviluppato su Drupal 6 un semplice tema espositivo basato sui colori del logo (creato da Mauro Luccarini di &lt;a href="http://www.cervelliriuniti.it/"&gt;Cervelli Riuniti&lt;/a&gt;), che focalizza tutta l’attenzione sui bijou.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox" href="http://2.bp.blogspot.com/_1pfelnO3RgA/TRIk48b9OlI/AAAAAAAAAt4/_XfzQ6kbtfo/s1600/voilalebijou.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="213" src="http://2.bp.blogspot.com/_1pfelnO3RgA/TRIk48b9OlI/AAAAAAAAAt4/_XfzQ6kbtfo/s320/voilalebijou.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Avendo deciso con Donella di suddividere i bijou in collezioni (dai nomi che richiamano il mondo dell’opera e del teatro), ho deciso di creare per ciascuna collezione un’apposita pagina con la relativa galleria fotografica, fatta in modo tale da avere esposto un singolo bijou per volta, ma con un colpo d’occhio su tutta la collezione.&lt;br /&gt;&lt;br /&gt;In pratica, volevo avere un’immagine grande del bijou selezionato in primo piano, e sotto una filmstrip di thumbnails.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox" href="http://2.bp.blogspot.com/_1pfelnO3RgA/TRIk2EUf-gI/AAAAAAAAAtw/wCEaJnCz2ow/s1600/term.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="250" src="http://2.bp.blogspot.com/_1pfelnO3RgA/TRIk2EUf-gI/AAAAAAAAAtw/wCEaJnCz2ow/s400/term.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Senza andare a scovare moduli dedicati per gallerie fotografiche, ho creato questa semplice visualizzazione basandomi principalmente su Views e Imagecache.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;1. Moduli necessari&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://drupal.org/project/views"&gt;Views 2&lt;/a&gt; (per creare le pagine contenenti la galleria)&lt;/li&gt;&lt;li&gt;&lt;a href="http://drupal.org/project/views_customfield"&gt;Views Custom Field&lt;/a&gt; (per generare del markup ad hoc)&lt;/li&gt;&lt;li&gt;&lt;a href="http://drupal.org/project/imagecache"&gt;Imagecache&lt;/a&gt; (per creare le immagini da visualizzare)&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;2. Organizzazione preliminare&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Il modo più razionale di organizzare il contenuto in collezioni è sfruttare la &lt;b&gt;Tassonomia&lt;/b&gt;, creando un vocabolario “Collezioni” e aggiungendovi tutte le collezioni presenti come termini.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ciascun nodo rappresenta un bijou, ed appartiene soltanto ad una collezione. Può avere una o più immagini allegate, ma soltanto la prima è necessaria per l’esposizione, ed è quella che prenderemo in considerazione (le altre sono visibili solo sulla pagina dedicata al bijou).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Occorre implementare due preset di Imagecache, uno per le thumbnails, e uno per l’immagine grande.&lt;/div&gt;&lt;div&gt;Il &lt;i&gt;primo preset&lt;/i&gt; si chiama &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;collezioni_thumb&lt;/span&gt;, e ha un’azione Scale And Crop a 80x80, poiché voglio thumbnails quadrate, create a partire dalla foto del bijou.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Il &lt;i&gt;secondo preset&lt;/i&gt; si chiama chiama &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;collezioni_full&lt;/span&gt;, e ha un’azione Scale a 400x100%, poiché voglio immagini di larghezza 400px (le foto sono tutte in formato 3:2).&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;3.&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Costruire la pagina in Views&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;Poiché le collezioni sono termini di un vocabolario di tassonomia, la pagina che creerò in Views andrà a costituire la visualizzazione predefinita delle pagine &lt;i&gt;taxonomy/term&lt;/i&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Per costruirla, si può partire dalla vista che viene creata con l’installazione di Views, e che fa uso degli argomenti per poter generalizzare le pagine per ogni termine di tassonomia.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox" href="http://1.bp.blogspot.com/_1pfelnO3RgA/TRIk2z33N-I/AAAAAAAAAt0/Oe_QcywjSCU/s1600/view.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="318" src="http://1.bp.blogspot.com/_1pfelnO3RgA/TRIk2z33N-I/AAAAAAAAAt0/Oe_QcywjSCU/s400/view.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;L’&lt;b&gt;Argomento&lt;/b&gt; necessario da passare alla vista è l’ID del Termine di tassonomia (TID).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Nelle &lt;b&gt;Impostazioni di pagina&lt;/b&gt; quindi, &lt;b&gt;Path&lt;/b&gt;&amp;nbsp;deve essere settato a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;taxonomy/term/%&lt;/span&gt; dove il ‘%’ è il segnaposto per il TID che viene passato dall’URL (ciò è indipendente dagli URL creati con Pathauto, e funziona lo stesso).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Impostazioni di base: &lt;/b&gt;il titolo della pagina è bene che sia settato a &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;%1&lt;/span&gt;, che in questo caso indica il valore del TID (e quindi è il nome del termine, cioè della collezione, nel nostro caso).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Lo &lt;b&gt;Stile riga&lt;/b&gt; deve essere &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Campi&lt;/span&gt;, perché abbiamo solo bisogno di alcuni dati da passare a jQuery per creare la galleria e gli effetti, e lo &lt;b&gt;Stile&lt;/b&gt; va bene che sia una &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;HTML list&lt;/span&gt; (nelle opzioni dello stile, i campi devono essere raggruppati per &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Taxonomy: Termine&lt;/span&gt;, e va bene un elenco non ordinato – questo si può settare solo dopo aver inserito il campo corrispondente, vedi oltre).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Filtri: &lt;/b&gt;basta che il nodo sia pubblicato (in questo caso, le collezioni sono appannaggio solo dei bijou, e non c’è pericolo che ci vada a finire una pagina o altri tipi di contenuto – altrimenti sarebbe stato opportuno filtrare per tipo di contenuto).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Criteri di ordinamento: &lt;/b&gt;per titolo del nodo (visto che le collezioni hanno bijou numerati progressivamente).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Veniamo quindi ai &lt;b&gt;Campi&lt;/b&gt; necessari, uno per uno nel loro ordine:&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Taxonomy: Termine. &lt;/b&gt;Ci serve solo per poter raggruppare i campi nelle opzioni dello stile. &lt;i&gt;Escluso dalla visualizzazione&lt;/i&gt;, perché verrà già visualizzato come campo di raggruppamento.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Contenuto: Foto. &lt;/b&gt;Sono le foto piccole di ciascun bijou; deve avere le seguenti proprietà:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Collega questo campo al suo nodo&lt;/i&gt; (ci serve perché se jQuery fosse disattivato, l’utente comunque potrebbe navigare alla pagina del bijou)&lt;/li&gt;&lt;li&gt;&lt;i&gt;Raggruppa valori multipli, show 1 value from 0&lt;/i&gt; (poiché deve essere visualizzata solo la prima immagine del nodo)&lt;/li&gt;&lt;li&gt;&lt;i&gt;Etichetta: nessuno&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Format: collezioni_thumb image&lt;/i&gt; (l’immagine piccola, larghezza 80px, che costituisce la thumbnail su cui cliccare per vedere l’immagine grande)&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;Contenuto: Foto. &lt;/b&gt;Un altro inserimento dello stesso campo di cui sopra, perché abbiamo bisogno di inserire nella vista due volte la stessa immagine: la prima come thumbnail, la seconda (questa) come foto grande. Ecco le proprietà necessarie:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Escludi dalla visualizzazione&lt;/i&gt; (perché useremo Customfield e jQuery per visualizzare l’immagine dove, quando e come ci pare!)&lt;/li&gt;&lt;li&gt;&lt;i&gt;Raggruppa valori multipli, show 1 value from 0&lt;/i&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Etichetta: nessuno&lt;/i&gt;&lt;/li&gt;&lt;li&gt;&lt;i&gt;Format: collezioni_full file path&lt;/i&gt; (l’indirizzo dell’immagine grande, larghezza 400px, che useremo come parametro per jQuery)&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;Nodo: Titolo. &lt;/b&gt;Il nome de bijou che ci servirà per un’ulteriore formattazione della galleria. &lt;i&gt;Escluso dalla visualizzazione&lt;/i&gt;, per passarlo a jQuery.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Customfield: markup. &lt;/b&gt;Di per sé il campo consente di inserire del markup a piacere nella vista. Noi lo usiamo per passare dei dati a jQuery, tramite un tag span creato ad hoc. Questo campo deve essere per forza l’ultimo dell’elenco, per poter avere a disposizione tutti i dati estratti dal database grazie alle query fatte coi campi che lo precedono. Ecco come lo formattiamo:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Rewrite the output of this field. &lt;/i&gt;Questa proprietà mette a disposizione i dati dei campi precedenti: inseriamo il titolo del nodo e il path dell’immagine grande in uno span:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Testo:&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;span class="img-link" title="[title]|[field_bijou_foto_fid_1]"&amp;gt;&amp;lt;/span&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Li&amp;nbsp;mettiamo nell’attributo &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;title&lt;/span&gt; di uno &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;span&lt;/span&gt; vuoto in modo che l’apparenza della pagina non cambi, ma siano comunque accessibili da jQuery. Tra i due mettiamo un “|” per separare i campi. Tornerà utile più tardi.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div class="small"&gt;Strettamente parlando, il campo customfield (e quindi il modulo Views Custom Field) non sono necessari, poiché l'opzione "Rewrite the output of this field" è disponibile con ogni campo, e quindi potevamo sfruttare quella dell'ultimo tra i campi precedenti. Però in questo modo l'output è più pulito e si separa contenuto da funzionalità aggiuntiva, consentendo una migliore intelligibilità del tutto. Poi fate voi...&lt;/div&gt;&lt;br /&gt;&lt;div&gt;Se andiamo a vedere la pagina creata con questa vista, osserveremo soltanto una lista di thumbnails che inviano al relativo nodo.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;4.&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Creazione della galleria con jQuery&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;4.1&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Markup: analisi&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Adesso passiamo al codice HTML/CSS: nella cartella del tema, si clona il file &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;page.tpl.php&lt;/span&gt; e lo si rinomina in &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;page-taxonomy-term.tpl.php&lt;/span&gt; per poter customizzare il codice delle pagine che utilizzeranno la vista appena creata.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;L’architettura della lista di thumbnails creata da Views è una lista non ordinata, di cui ciascun elemento è fatto così (questo è il primo):&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;pre class="brush: xml;" name="code"&gt;&amp;lt;li class="views-row views-row-1 views-row-odd views-row-first"&amp;gt;  &lt;br /&gt; &amp;lt;div class="views-field-field-bijou-foto-fid"&amp;gt;&lt;br /&gt;  &amp;lt;div class="field-content"&amp;gt;&amp;lt;a href="/articoli/callas-01"&amp;gt;&amp;lt;img src="http://voilalebijou.com/sites/default/files/imagecache/collezioni_thumb/foto/callas-01/callas1.jpg" alt="" title="Girocollo Callas 01"  class="imagecache imagecache-collezioni_thumb imagecache-default imagecache-collezioni_thumb_default" width="80" height="80" /&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt; &amp;lt;/div&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;div class="views-field-markup"&amp;gt;&lt;br /&gt;  &amp;lt;span class="field-content"&amp;gt;&amp;lt;span class="img-link" title="Callas 01|sites/default/files/imagecache/collezioni_full/foto/callas-01/callas1.jpg"&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt; &amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;Cioè, gli &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;li&amp;gt;&lt;/span&gt; sono tutti di classe &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;.views-row&lt;/span&gt; e contengono due campi (&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;):&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;div.views-field-field-bijou-foto-fid&lt;/span&gt;, che ha la thumbnail con il link al nodo&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;div.views-field-markup&lt;/span&gt;, che contiene lo &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;span&amp;gt;&lt;/span&gt; con le informazioni sul titolo del bijou e il path della sua immagine grande, che abbiamo creato prima.&lt;/li&gt;&lt;/ol&gt;&lt;span class="small"&gt;Il markup del customfield ha poco senso, mi rendo conto. Purtroppo di base Views non consente una customizzazione dell’output dei vari campi, il cui contenuto è sempre inserito in uno &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;span.field-content&lt;/span&gt;, anche quando questo potrebbe creare problemi di validazione (ad esempio se uno volesse inserirvi uno heading o altri elementi &lt;i&gt;block level&lt;/i&gt;…). La soluzione più veloce è usare il modulo &lt;a href="http://drupal.org/project/semanticviews"&gt;Semantic Views&lt;/a&gt;, che ci consente di scegliere e customizzare i tag che costituiscono i campi visualizzati. Ma qui non è proprio necessario.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Per avere una film strip orizzontale (e non un elenco-lista verticale) ci serve del CSS per gli &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;, nel template della pagina (&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;page-taxonomy-term.tpl.php&lt;/span&gt;):&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: css;" name="code"&gt;.views-row{&lt;br /&gt; display: inline-table;&lt;br /&gt; width: 100px;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;La proprietà &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;inline-table&lt;/span&gt; ci consente di avere ogni thumbnail accanto all’altra in fila, mentre la larghezza ci dà maggiore spaziatura orizzontale.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;4.2&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Visualizzazione dell’immagine ingrandita con jQuery&lt;/span&gt;&lt;br /&gt;Il piano è questo:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;inserire un &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;div&amp;gt;&lt;/span&gt; tra il titolo della pagina &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;h3&amp;gt;&lt;/span&gt; e la lista &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;ul&amp;gt;&lt;/span&gt;, dove visualizzare l’immagine grande con il suo titolo, collegati al bijou rappresentato&lt;/li&gt;&lt;li&gt;caricare subito l’ingrandimento della prima thumbnail&lt;/li&gt;&lt;li&gt;collegare il click su ogni thumbnail con l’aggiornamento dell’immagine, sostituendo quella corrente con quella relativa alla thumbnail cliccata.&lt;/li&gt;&lt;/ol&gt;Finalmente si passa a jQuery, e si procede in questo modo: prima di tutto si devono salvare i dati che ci servono, che sono:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;il link al nodo di destinazione&lt;/li&gt;&lt;li&gt;il path dell’immagine grande da caricare&lt;/li&gt;&lt;li&gt;il titolo del nodo da visualizzare insieme all’immagine grande.&lt;/li&gt;&lt;/ol&gt;Si parte con il primo elemento della lista, perché vogliamo che il suo ingrandimento sia visualizzato al caricamento della pagina. Basta accedere al suo attributo href:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js;" name="code"&gt;var item = $('.views-row-first a:first').attr('href');&lt;/pre&gt;&lt;br /&gt;Gli altri due parametri li avevamo inseriti nel &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;title&lt;/span&gt; dello &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;span&amp;gt;&lt;/span&gt; creato con il customfield, ma siccome è una sola stringa con due attributi, prima di poterli utilizzare vanno separati. Ecco come si fa:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js;" name="code"&gt;var rel = $('.views-row-first').find('.img-link').attr('title');&lt;br /&gt;var split = rel.split("|");&lt;br /&gt;var title = split[0];&lt;br /&gt;var imglink = split[1];&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Il metodo Javascript &lt;a href="http://www.w3schools.com/jsref/jsref_split.asp"&gt;split&lt;/a&gt;, data una stringa, restituisce un array con i risultati della suddivisione. Il carattere “|” ci è servito come indicatore del punto di suddivisione.&lt;br /&gt;&lt;br /&gt;A questo punto basta inserire il contenitore dove caricare l’immagine, che chiamiamo “zoom”:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js;" name="code"&gt;$('h3').after('&amp;lt;div id="zoom"&amp;gt;&amp;lt;a href="' + item + '"&amp;gt;&amp;lt;img class="zoom" src="/' + imglink + '" alt="" /&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;a class="desc" href="' + item + '"&amp;gt;' + title + '&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;');&lt;br /&gt;&lt;/pre&gt;Il &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;div#zoom&lt;/span&gt; lo formattiamo con questo CSS:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: css;" name="code"&gt;#zoom{&lt;br /&gt; width: 400px; /* la larghezza esatta dell’immagine grande data da Imagecache */&lt;br /&gt; height: 270px;&lt;br /&gt; margin: 5px auto;&lt;br /&gt; position: relative;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Al suo interno abbiamo aggiunto due tag &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;lt;a&amp;gt;&lt;/span&gt;: il primo contiene l’immagine, il secondo (&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;.desc&lt;/span&gt;) il suo titolo, che formatteremo con un’etichetta, così:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: css;" name="code"&gt;.desc{&lt;br /&gt; background: url(&amp;lt;?php print $base_path.$directory; ?&amp;gt;/images/fold.png) top left no-repeat; color: #d00000;&lt;br /&gt; font: 1em Monika, 'Monika italic', "trebuchet ms", sans-serif;&lt;br /&gt; text-align: center;&lt;br /&gt; text-decoration: none;&lt;br /&gt; position: absolute;&lt;br /&gt; bottom: 50px; right: -3em;&lt;br /&gt; padding: 1em;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;Il php nella proprietà background serve per stampare il percorso fino alla cartella del tema, dove c’è l’immagine di sfondo con la “piega” dell’etichetta.&lt;br /&gt;&lt;br /&gt;La font “Monika” è un carattere calligrafico molto in sintonia con l’argomento: “Monika italic” è la font che ho creato con &lt;a href="http://www.fontsquirrel.com/"&gt;Font Squirrel&lt;/a&gt; per importarla con il metodo &lt;a href="http://www.miltonbayer.com/font-face/"&gt;@font-face&lt;/a&gt;, mentre il primo “Monika” è il nome standard della font (così se qualcuno ce l’ha già installata sul proprio computer, utilizziamo quella, che di solito viene renderizzata meglio).&lt;br /&gt;&lt;br /&gt;Il posizionamento assoluto è relativamente al contenitore &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;div#zoom&lt;/span&gt;, che abbiamo dichiarato appositamente come &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;position: relative&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Adesso la pagina visualizza appena caricata l’ingrandimento della prima thumbnail, con un’etichetta col titolo. Ambedue linkano al nodo visualizzato.&lt;br /&gt;&lt;br /&gt;Per estendere la funzione d’ingrandimento anche alle altre thumbnail, basta replicare il codice al click di ogni thumb, con qualche piccola modifica:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js; highlight[07,09]" name="code"&gt;$('.views-row a').click(function(){&lt;br /&gt; var itemlink = $(this).attr('href');&lt;br /&gt; var rel = $(this).parents('.views-row').find('.img-link').attr('title');&lt;br /&gt; var split = rel.split("|");&lt;br /&gt; var imglink = split[1];&lt;br /&gt; var title = split[0];&lt;br /&gt; $('.zoom').fadeOut(250);&lt;br /&gt; $('#zoom').html('&amp;lt;a href="' + itemlink + '"&amp;gt;&amp;lt;img class="zoom" src="/' + imglink + '" alt="" /&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;a class="desc" href="' + itemlink + '"&amp;gt;' + title + '&amp;lt;/a&amp;gt;');&lt;br /&gt; $('.zoom').hide().fadeIn(500);&lt;br /&gt; return false;&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Come transizione tra due fotografie, abbiamo inserito un fade out/fade in (in pratica: si nasconde l’immagine facendola dissolvere nel nulla; mentre è nascosta cambiamo l’immagine visualizzata e poi la facciamo ricomparire bella nuova); per il resto lo script è identico nel suo funzionamento.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;Return false;&lt;/span&gt; serve per impedire al browser di seguire il link alla pagina del nodo: le thumbnail servono solo per ingrandire l’immagine.&lt;br /&gt;&lt;br /&gt;Ora la pagina ha tutto ciò che le serve per il funzionamento di base.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;4.3&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Effetti per la film strip&lt;/span&gt;&lt;br /&gt;Aggiungiamo adesso qualche semplice effetto di hover e selezione per le thumbnail. Ecco cosa implementerò:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Le thumbnail, da un’opacità dell’80%, diventeranno completamente opache al passaggio del mouse&lt;/li&gt;&lt;li&gt;Contemporaneamente, si creerà sfumando un bordo rosso&lt;/li&gt;&lt;li&gt;La thumbnail dell’immagine correntemente visualizzata avrà queste due caratteristiche fisse su di sé.&lt;/li&gt;&lt;/ol&gt;Innanzitutto, un po’ di CSS per l’aspetto di default delle thumbs:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: css;" name="code"&gt;.views-row a img{&lt;br /&gt; opacity: .8;&lt;br /&gt; -moz-opacity: .8;&lt;br /&gt; filter: alpha(opacity=80);&lt;br /&gt; padding: 1px;&lt;br /&gt;}&lt;br /&gt;.views-row a{&lt;br /&gt; outline: none;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Qualche dichiarazione cross-browser per l’opacità e un padding per creare il “bordo”, che per far prima sarà solo un cambio di &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;background-color&lt;/span&gt;. Ho tolto l’outline dai link delle thumb perché è antiestetico quando un link non fa lasciare la pagina.&lt;br /&gt;&lt;br /&gt;Passiamo al comportamento delle thumb quando il puntatore ci passa sopra. Ecco il codice jQuery, basta anteporlo a quello che abbiamo scritto prima per la visualizzazione dell’immagine ingrandita:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js;" name="code"&gt;$('.views-row a').hover(&lt;br /&gt; function(){&lt;br /&gt;  $(this).children('img').animate({&lt;br /&gt;   opacity: 1,&lt;br /&gt;   backgroundColor: "#d00000"&lt;br /&gt;  }, 300);&lt;br /&gt; },&lt;br /&gt; function(){&lt;br /&gt;  $(this).children('img').animate({&lt;br /&gt;   opacity: .8,&lt;br /&gt;   backgroundColor: "#000"&lt;br /&gt;  }, 300);&lt;br /&gt; }&lt;br /&gt;);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;L’unica cosa da notare qui è che per far funzionare l’animazione del &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;background-color&lt;/span&gt; (che grazie al padding di cui sopra ci dà l’illusione di creare un bordo attorno all’immagine) è necessario inserire il plugin &lt;a href="http://github.com/jquery/jquery-color"&gt;jquery.color&lt;/a&gt;, ad esempio inserendo nel file .info del tema Drupal la seguente dichiarazione (in questo modo però verrà caricato in ogni pagina – cosa che nel mio progetto è sicuramente desiderabile):&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js;" name="code"&gt;scripts[] = scripts/jquery.color.min.js&lt;/pre&gt;&lt;br /&gt;(ovviamente dopo aver messo il file dichiarato nella sottocartella indicata della directory del tema, che nel mio caso è “scripts”).&lt;br /&gt;&lt;br /&gt;La versione del plugin che ho indicato è ottimale perché funziona anche con Safari (altre non vanno).&lt;br /&gt;Adesso, per cambiare le proprietà della thumbnail relativa all’immagine corrente, creiamo una classe CSS che appiopperemo di volta in volta alla thumb cliccata:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: css;" name="code"&gt;.current img{&lt;br /&gt; opacity: 1 !important;&lt;br /&gt; -moz-opacity: 1 !important;&lt;br /&gt; filter: alpha(opacity=100) !important;&lt;br /&gt; background-color: #d00000 !important;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;Le dichiarazioni &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;!important&lt;/span&gt; ci servono per passar sopra ai settaggi imposti da altre operazioni dello script jQuery.&lt;br /&gt;&lt;br /&gt;Per attaccarla/staccarla dalle thumb man mano che vengono cliccate usiamo i metodi jQuery addClass/removeClass.&amp;nbsp;Per prima cosa si attribuisce alla prima thumbnail, quella dell’immagine che è visualizzata di default:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js;" name="code"&gt;$('.views-row-first a').addClass('current');&lt;br /&gt;var item = $('.views-row-first a').attr('href');&lt;br /&gt;/* [...] */&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;e poi nell’evento click di ciascun thumb:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js;" name="code"&gt;.click(function(){&lt;br /&gt; $('.views-row').find('.current').removeClass('current');&lt;br /&gt; $(this).addClass('current');&lt;br /&gt; var itemlink = $(this).attr('href');&lt;br /&gt;/* [...] */&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Con questo abbiamo finito!&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;5&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;Script completo&lt;/span&gt;&lt;br /&gt;Ecco quindi lo script completo che abbiamo costruito passo passo:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js;" name="code"&gt;$(document).ready(function(){&lt;br /&gt;&lt;br /&gt;$('.views-row-first a').addClass('current');&lt;br /&gt;var item = $('.views-row-first a').attr('href');&lt;br /&gt;var rel = $('.views-row:first').find('.img-link').attr('title');&lt;br /&gt;var split = rel.split("|");&lt;br /&gt;var imglink = split[1];&lt;br /&gt;var title = split[0];&lt;br /&gt;$('h3').after('&amp;lt;div id="zoom"&amp;gt;&amp;lt;a href="' + item + '"&amp;gt;&amp;lt;img class="zoom" src="/' + imglink + '" alt="" /&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;a class="desc" href="' + item + '"&amp;gt;' + title + '&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;');&lt;br /&gt;&lt;br /&gt;$('.views-row a').hover(&lt;br /&gt; function(){&lt;br /&gt;  $(this).children('img').animate({&lt;br /&gt;   opacity: 1,&lt;br /&gt;   backgroundColor: "#d00000"&lt;br /&gt;  }, 300);&lt;br /&gt; },&lt;br /&gt; function(){&lt;br /&gt;  $(this).children('img').animate({&lt;br /&gt;   opacity: .8,&lt;br /&gt;   backgroundColor: "#000"&lt;br /&gt;  }, 300);&lt;br /&gt; }&lt;br /&gt;).click(function(){&lt;br /&gt; $('.views-row').find('.current').removeClass('current');&lt;br /&gt; $(this).addClass('current');&lt;br /&gt; var itemlink = $(this).attr('href');&lt;br /&gt; var rel = $(this).parents('.views-row').find('.img-link').attr('title');&lt;br /&gt; var split = rel.split("|");&lt;br /&gt; var imglink = split[1];&lt;br /&gt; var title = split[0];&lt;br /&gt; $('.zoom').fadeOut(250);&lt;br /&gt; $('#zoom').html('&amp;lt;a href="' + itemlink + '"&amp;gt;&amp;lt;img class="zoom" src="/' + imglink + '" alt="" /&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;a class="desc" href="' + itemlink + '"&amp;gt;' + title + '&amp;lt;/a&amp;gt;');&lt;br /&gt; $('.zoom').hide().fadeIn(500);&lt;br /&gt; return false;&lt;br /&gt;});&lt;br /&gt;&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;Ed ecco anche il CSS:&lt;br /&gt;&lt;pre class="brush: css;" name="code"&gt;.views-row{&lt;br /&gt; display: inline-table;&lt;br /&gt; width: 100px;&lt;br /&gt;}&lt;br /&gt;.views-row a{&lt;br /&gt; outline: none;&lt;br /&gt;}&lt;br /&gt;.views-row a img{&lt;br /&gt; opacity: .8;&lt;br /&gt; -moz-opacity: .8;&lt;br /&gt; filter: alpha(opacity=80);&lt;br /&gt; padding: 1px;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#zoom{&lt;br /&gt; width: 400px;&lt;br /&gt; height: 270px;&lt;br /&gt; margin: 5px auto;&lt;br /&gt; position: relative;&lt;br /&gt;}&lt;br /&gt;.desc{&lt;br /&gt; background: url(&amp;lt;?php print $base_path.$directory; ?&amp;gt;/images/fold.png) top left no-repeat; color: #d00000;&lt;br /&gt; font: 1em Monika, 'Monika italic', "trebuchet ms", sans-serif;&lt;br /&gt; text-align: center;&lt;br /&gt; text-decoration: none;&lt;br /&gt; position: absolute;&lt;br /&gt; bottom: 50px; right: -3em;&lt;br /&gt; padding: 1em;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.current img{&lt;br /&gt; opacity: 1 !important;&lt;br /&gt; -moz-opacity: 1 !important;&lt;br /&gt; filter: alpha(opacity=100) !important;&lt;br /&gt; background-color: #d00000 !important;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2179030760266299422-1633348668414437948?l=myblackteapot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/1633348668414437948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/1633348668414437948'/><link rel='alternate' type='text/html' href='http://myblackteapot.blogspot.com/2010/12/drupal-jquery-galleria-fotografica.html' title='Drupal + jQuery: galleria fotografica stile ‘filmstrip’'/><author><name>blacktealover</name><uri>http://www.blogger.com/profile/07009043319199847342</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_1pfelnO3RgA/S1A4EyIvp3I/AAAAAAAAAdk/djFPE4BjWxk/S220/dadacat.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_1pfelnO3RgA/TRIk48b9OlI/AAAAAAAAAt4/_XfzQ6kbtfo/s72-c/voilalebijou.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2179030760266299422.post-983132151708051256</id><published>2010-12-17T21:09:00.000+01:00</published><updated>2010-12-17T21:09:35.145+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='neve'/><category scheme='http://www.blogger.com/atom/ns#' term='fotografia'/><title type='text'>beloved snow</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_1pfelnO3RgA/TQvCXSf1RNI/AAAAAAAAArs/NU1C3R-H7hI/s1600/snowy01.jpg" imageanchor="1" rel="lightbox[snowy]" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="266" src="http://4.bp.blogspot.com/_1pfelnO3RgA/TQvCXSf1RNI/AAAAAAAAArs/NU1C3R-H7hI/s400/snowy01.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_1pfelnO3RgA/TQvCiXpUk_I/AAAAAAAAAr0/9p7vQPbIrew/s1600/snowy02.jpg" imageanchor="1" rel="lightbox[snowy]" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="266" src="http://3.bp.blogspot.com/_1pfelnO3RgA/TQvCiXpUk_I/AAAAAAAAAr0/9p7vQPbIrew/s400/snowy02.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_1pfelnO3RgA/TQvClUcBCHI/AAAAAAAAAr8/uaG7MAoxakI/s1600/snowy03.jpg" imageanchor="1" rel="lightbox[snowy]" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="266" src="http://4.bp.blogspot.com/_1pfelnO3RgA/TQvClUcBCHI/AAAAAAAAAr8/uaG7MAoxakI/s400/snowy03.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_1pfelnO3RgA/TQvCoW0GUrI/AAAAAAAAAsE/rxu1RiBrxZI/s1600/snowy04.jpg" imageanchor="1" rel="lightbox[snowy]" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://1.bp.blogspot.com/_1pfelnO3RgA/TQvCoW0GUrI/AAAAAAAAAsE/rxu1RiBrxZI/s400/snowy04.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_1pfelnO3RgA/TQvCrgtA5gI/AAAAAAAAAsM/UKSpNiVLM_A/s1600/snowy05.jpg" imageanchor="1" rel="lightbox[snowy]" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="266" src="http://4.bp.blogspot.com/_1pfelnO3RgA/TQvCrgtA5gI/AAAAAAAAAsM/UKSpNiVLM_A/s400/snowy05.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_1pfelnO3RgA/TQvCvWFp_ZI/AAAAAAAAAsU/hbbEjNhjeko/s1600/snowy06.jpg" imageanchor="1" rel="lightbox[snowy]" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="266" src="http://4.bp.blogspot.com/_1pfelnO3RgA/TQvCvWFp_ZI/AAAAAAAAAsU/hbbEjNhjeko/s400/snowy06.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_1pfelnO3RgA/TQvC1hEdPzI/AAAAAAAAAsc/xWYWlNtfSGY/s1600/snowy07.jpg" imageanchor="1" rel="lightbox[snowy]" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="266" src="http://1.bp.blogspot.com/_1pfelnO3RgA/TQvC1hEdPzI/AAAAAAAAAsc/xWYWlNtfSGY/s400/snowy07.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_1pfelnO3RgA/TQvC4tH0cRI/AAAAAAAAAsk/Kv_M4OnWnSY/s1600/snowy08.jpg" imageanchor="1" rel="lightbox[snowy]" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="266" src="http://4.bp.blogspot.com/_1pfelnO3RgA/TQvC4tH0cRI/AAAAAAAAAsk/Kv_M4OnWnSY/s400/snowy08.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_1pfelnO3RgA/TQvC7ljG_jI/AAAAAAAAAss/KYSYE9aNDPo/s1600/snowy09.jpg" imageanchor="1" rel="lightbox[snowy]" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://2.bp.blogspot.com/_1pfelnO3RgA/TQvC7ljG_jI/AAAAAAAAAss/KYSYE9aNDPo/s400/snowy09.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_1pfelnO3RgA/TQvC-769OBI/AAAAAAAAAs0/JjjB6DdhWds/s1600/snowy10.jpg" imageanchor="1" rel="lightbox[snowy]" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://2.bp.blogspot.com/_1pfelnO3RgA/TQvC-769OBI/AAAAAAAAAs0/JjjB6DdhWds/s400/snowy10.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_1pfelnO3RgA/TQvDDXOfz9I/AAAAAAAAAs8/2Uh9PAbUPUI/s1600/snowy11.jpg" imageanchor="1" rel="lightbox[snowy]" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="266" src="http://2.bp.blogspot.com/_1pfelnO3RgA/TQvDDXOfz9I/AAAAAAAAAs8/2Uh9PAbUPUI/s400/snowy11.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_1pfelnO3RgA/TQvDGdp0AaI/AAAAAAAAAtE/a1YpCf3DjEg/s1600/snowy12.jpg" imageanchor="1" rel="lightbox[snowy]" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="266" src="http://3.bp.blogspot.com/_1pfelnO3RgA/TQvDGdp0AaI/AAAAAAAAAtE/a1YpCf3DjEg/s400/snowy12.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_1pfelnO3RgA/TQvDJvXct7I/AAAAAAAAAtM/F-RUlooh-zs/s1600/snowy13.jpg" imageanchor="1" rel="lightbox[snowy]" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="225" src="http://4.bp.blogspot.com/_1pfelnO3RgA/TQvDJvXct7I/AAAAAAAAAtM/F-RUlooh-zs/s400/snowy13.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_1pfelnO3RgA/TQvDNc5XHII/AAAAAAAAAtU/9VbaSW_Iezc/s1600/snowy14.jpg" imageanchor="1" rel="lightbox[snowy]" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="225" src="http://2.bp.blogspot.com/_1pfelnO3RgA/TQvDNc5XHII/AAAAAAAAAtU/9VbaSW_Iezc/s400/snowy14.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;Oggi ho passato il mio non-pomeriggio intrappolato in auto cercando di andare da A a B.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2179030760266299422-983132151708051256?l=myblackteapot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/983132151708051256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/983132151708051256'/><link rel='alternate' type='text/html' href='http://myblackteapot.blogspot.com/2010/12/beloved-snow.html' title='beloved snow'/><author><name>blacktealover</name><uri>http://www.blogger.com/profile/07009043319199847342</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_1pfelnO3RgA/S1A4EyIvp3I/AAAAAAAAAdk/djFPE4BjWxk/S220/dadacat.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_1pfelnO3RgA/TQvCXSf1RNI/AAAAAAAAArs/NU1C3R-H7hI/s72-c/snowy01.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2179030760266299422.post-274079391317322698</id><published>2010-10-12T12:25:00.001+02:00</published><updated>2010-10-12T12:26:29.260+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ilford'/><category scheme='http://www.blogger.com/atom/ns#' term='Holga'/><category scheme='http://www.blogger.com/atom/ns#' term='fotografia'/><category scheme='http://www.blogger.com/atom/ns#' term='viaggio'/><title type='text'>a Holga trip of sorts (II)</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox[holgatrip2]" href="http://2.bp.blogspot.com/_1pfelnO3RgA/TLQ293hfy1I/AAAAAAAAAoQ/QmBTBLHIveQ/s1600/holga11-1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="314" src="http://2.bp.blogspot.com/_1pfelnO3RgA/TLQ293hfy1I/AAAAAAAAAoQ/QmBTBLHIveQ/s320/holga11-1.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox[holgatrip2]" href="http://1.bp.blogspot.com/_1pfelnO3RgA/TLQ3AZ-tIqI/AAAAAAAAAoU/wOoZYTASU6Y/s1600/holga11-2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="303" src="http://1.bp.blogspot.com/_1pfelnO3RgA/TLQ3AZ-tIqI/AAAAAAAAAoU/wOoZYTASU6Y/s320/holga11-2.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox[holgatrip2]" href="http://2.bp.blogspot.com/_1pfelnO3RgA/TLQ3CgEhXmI/AAAAAAAAAoY/vqhhvXk5ojc/s1600/holga11-3.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="303" src="http://2.bp.blogspot.com/_1pfelnO3RgA/TLQ3CgEhXmI/AAAAAAAAAoY/vqhhvXk5ojc/s320/holga11-3.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox[holgatrip2]" href="http://4.bp.blogspot.com/_1pfelnO3RgA/TLQ3D5EnBnI/AAAAAAAAAoc/7Sjcf633hKA/s1600/holga11-4.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="314" src="http://4.bp.blogspot.com/_1pfelnO3RgA/TLQ3D5EnBnI/AAAAAAAAAoc/7Sjcf633hKA/s320/holga11-4.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox[holgatrip2]" href="http://3.bp.blogspot.com/_1pfelnO3RgA/TLQ3FQGy4HI/AAAAAAAAAog/S6Q56dENCcI/s1600/holga11-5.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="311" src="http://3.bp.blogspot.com/_1pfelnO3RgA/TLQ3FQGy4HI/AAAAAAAAAog/S6Q56dENCcI/s320/holga11-5.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox[holgatrip2]" href="http://1.bp.blogspot.com/_1pfelnO3RgA/TLQ3GvfgvcI/AAAAAAAAAok/HUe102e60JA/s1600/holga11-6.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="311" src="http://1.bp.blogspot.com/_1pfelnO3RgA/TLQ3GvfgvcI/AAAAAAAAAok/HUe102e60JA/s320/holga11-6.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox[holgatrip2]" href="http://4.bp.blogspot.com/_1pfelnO3RgA/TLQ3IAhpMKI/AAAAAAAAAoo/rIX28oS8KzQ/s1600/holga11-7.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="314" src="http://4.bp.blogspot.com/_1pfelnO3RgA/TLQ3IAhpMKI/AAAAAAAAAoo/rIX28oS8KzQ/s320/holga11-7.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox[holgatrip2]" href="http://1.bp.blogspot.com/_1pfelnO3RgA/TLQ3JaFEMnI/AAAAAAAAAos/XO_RbgEbmc4/s1600/holga11-8.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="311" src="http://1.bp.blogspot.com/_1pfelnO3RgA/TLQ3JaFEMnI/AAAAAAAAAos/XO_RbgEbmc4/s320/holga11-8.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2179030760266299422-274079391317322698?l=myblackteapot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/274079391317322698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/274079391317322698'/><link rel='alternate' type='text/html' href='http://myblackteapot.blogspot.com/2010/10/holga-trip-of-sorts-ii.html' title='a Holga trip of sorts (II)'/><author><name>blacktealover</name><uri>http://www.blogger.com/profile/07009043319199847342</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_1pfelnO3RgA/S1A4EyIvp3I/AAAAAAAAAdk/djFPE4BjWxk/S220/dadacat.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_1pfelnO3RgA/TLQ293hfy1I/AAAAAAAAAoQ/QmBTBLHIveQ/s72-c/holga11-1.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2179030760266299422.post-118177160881311408</id><published>2010-07-26T10:15:00.001+02:00</published><updated>2010-07-26T10:16:13.065+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Wordpress'/><category scheme='http://www.blogger.com/atom/ns#' term='web design'/><title type='text'>Pistoia Festival 2010</title><content type='html'>Collaborando con gli amici &lt;a href="http://www.mauroluccarini.com/"&gt;&lt;b&gt;Mauro Luccarini&lt;/b&gt;&lt;/a&gt; e &lt;b&gt;Chiara Belliti&lt;/b&gt; di &lt;a href="http://www.cervelliriuniti.it/"&gt;Cervelli Riuniti&lt;/a&gt;, abbiamo creato il blog ufficiale del &lt;b&gt;Pistoia Festival 2010&lt;/b&gt;, &lt;a href="http://www.pistoiafestival.it/"&gt;www.pistoiafestival.it&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Su design di Mauro (che ha creato anche il logo del Festival e tutta l'immagine coordinata), io mi sono occupato dello sviluppo web, mettendo su un bel blog Wordpress.&lt;br /&gt;&lt;br /&gt;L'idea è quella di avere ogni giorno un post che descriva il programma del giorno stesso, così da fornire una base d'informazioni attendibile e sempre aggiornata. La redazione (formata da Chiara, &lt;b&gt;Alessio Innocenti&lt;/b&gt; e &lt;b&gt;Donella Menichini&lt;/b&gt;) si occupa anche di creare approfondimenti sui vari personaggi del Festival (come ad esempio su alcuni dei protagonisti del &lt;b&gt;Pistoia Blues&lt;/b&gt;) e sono state realizzate varie interviste, sia a personaggi noti che a gente comune.&lt;br /&gt;&lt;br /&gt;Io invece, rivesto anche il ruolo di fotografo ufficiale, seguendo eventi e documentando interviste e curiosità. Tutto questo per dare uno spaccato più completo e vivo della manifestazione, che dovrebbe coinvolgere la vita estiva di ogni pistoiese.&lt;br /&gt;&lt;br /&gt;Eppoi, vale la pena ricordare che&amp;nbsp;è stato possibile realizzare&amp;nbsp;questo blog soltanto grazie ai nostri sponsor locali, che hanno creduto in un'iniziativa per cui le istituzioni non avevano fondi:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.pistoiafestival.it/studio-vincenzo-la-scala"&gt;Studio Vincenzo La Scala&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.pistoiafestival.it/gastronomia-capecchi"&gt;Gastronomia CAPECCHI&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.pistoiafestival.it/ristorante-sancho-panza"&gt;Ristorante SANCHO PANZA&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.pistoiafestival.it/rosticceria-da-fernando"&gt;Rosticceria FERNANDO&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.pistoiafestival.it/market-centro-spesa"&gt;Market CENTRO SPESA&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.pistoiafestival.it/"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_1pfelnO3RgA/TE1EIe3rTmI/AAAAAAAAAm8/QrV_J77sv1U/s320/pistoiafestival.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2179030760266299422-118177160881311408?l=myblackteapot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/118177160881311408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/118177160881311408'/><link rel='alternate' type='text/html' href='http://myblackteapot.blogspot.com/2010/07/pistoia-festival-2010.html' title='Pistoia Festival 2010'/><author><name>blacktealover</name><uri>http://www.blogger.com/profile/07009043319199847342</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_1pfelnO3RgA/S1A4EyIvp3I/AAAAAAAAAdk/djFPE4BjWxk/S220/dadacat.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_1pfelnO3RgA/TE1EIe3rTmI/AAAAAAAAAm8/QrV_J77sv1U/s72-c/pistoiafestival.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2179030760266299422.post-1869584224741476962</id><published>2010-06-16T15:11:00.000+02:00</published><updated>2010-06-16T15:11:55.102+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tipografia'/><category scheme='http://www.blogger.com/atom/ns#' term='web design'/><title type='text'>Case study: CSDO.it</title><content type='html'>Ieri ho finalmente lanciato la nuova veste grafica e strutturale della homepage del &lt;a href="http://www.csdo.it"&gt;&lt;b&gt;Centro Studi Discipline Orientali&lt;/b&gt;&lt;/a&gt; di Vinci (FI), una Scuola di arti marziali e discipline taoiste.&lt;br /&gt;&lt;br /&gt;L'idea iniziale era quella di mantenere bene o male i colori della versione precedente, perché identificativi della Scuola. In realtà, il testo nero su sfondo arancio dell'originale aveva secondo me dei problemi di leggibilità. La sfida è stata quindi trasformare l'effetto finale del sito mantenendone i parametri generali, e credo proprio di esserci riuscito.&lt;br /&gt;&lt;br /&gt;Innanzitutto ho studiato a fondo il tema di colori da utilizzare per tutta la progettazione del sito, sfruttando &lt;a href="http://kuler.adobe.com/"&gt;kuler&lt;/a&gt; (una web app della Adobe molto utile per sviluppare degli "accordi cromatici", per dirla con la terminologia di Johannes Itten), dove ho creato un accordo a 5 colori, mantenendo l'arancio originale (solo un po' più brillante).&lt;br /&gt;&lt;br /&gt;Ecco i colori scelti:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox" href="http://1.bp.blogspot.com/_1pfelnO3RgA/TBi4HDEOReI/AAAAAAAAAm0/avBPa-39FR4/s1600/chord2.jpg" imageanchor="1" rel="lightbox" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="167" src="http://1.bp.blogspot.com/_1pfelnO3RgA/TBi4HDEOReI/AAAAAAAAAm0/avBPa-39FR4/s400/chord2.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="background: #FF8830; height: 20px;"&gt;&lt;/td&gt;&lt;td style="background: #A6B06D; height: 20px;"&gt;&lt;/td&gt;&lt;td style="background: #589482; height: 20px;"&gt;&lt;/td&gt;&lt;td style="background: #8C2423; height: 20px;"&gt;&lt;/td&gt;&lt;td style="background: #C72B10; height: 20px;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="padding: 2px;"&gt;FF8830&lt;/td&gt;&lt;td style="padding: 2px;"&gt;A6B06D&lt;/td&gt;&lt;td style="padding: 2px;"&gt;589482&lt;/td&gt;&lt;td style="padding: 2px;"&gt;8C2423&lt;/td&gt;&lt;td style="padding: 2px;"&gt;C72B10&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Osservandoli tutti insieme, si nota come il blu-verde centrale sia il più "profondo" di tutti, seguito dal rosso scuro e dal verde, e infine dall'arancio e dal rosso che sono i più brillanti e che svettano sopra tutti gli altri.&lt;br /&gt;&lt;br /&gt;Avendo deciso per un layout a tre colonne, alla luce della considerazione di cui sopra ho deciso di usare l'arancio per lo sfondo della colonna principale, per farla svettare sulle altre, e il rosso scuro per quelle sui lati. Su sfondo arancio ho usato testo nero, sulle colonne laterali testo bianco: questo gioco di contrasti dà la giusta importanza anche alle colonne laterali, che sono ben leggibili ed evidenti, ma lascia la supremazia a quella centrale dov'è il contenuto principale.&lt;br /&gt;&lt;br /&gt;Il blu-verde, per sua natura, si presta benissimo come colore di sfondo generico della pagina.&lt;br /&gt;&lt;br /&gt;Per i link invece, si può usare i rossi per il testo principale e l'arancio ed il verde per le colonne laterali.&lt;br /&gt;&lt;br /&gt;Per aumentare la leggibilità del testo, è stato sufficiente applicare un minimo di buonsenso tipografico: il carattere Times New Roman non è veramente confortevole sul web, e l'ho cambiato con un &lt;i&gt;Georgia&lt;/i&gt;, che è una delle typeface più eleganti e versatili per i testi online.&lt;br /&gt;&lt;br /&gt;Per le dimensioni, ecco la dichiarazione della proprietà CSS font:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: css;" name="code"&gt;#main{&lt;br /&gt;  font: .875em Georgia, Palatino, serif;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Su una grandezza di default di 100% (corrispondente generalmente a 16px), impostare una dimensione pari a 0.875em corrisponde ad avere un carattere su schermo di dimensioni pari a 14px.&lt;br /&gt;&lt;span class="small"&gt;Per approfondire, questo &lt;a href="http://www.alistapart.com/articles/howtosizetextincss/"&gt;vecchio articolo&lt;/a&gt; su A List Apart può essere utile.&lt;/span&gt;&lt;br /&gt;L'ultimo accorgimento per migliorare radicalmente la leggibilità dei testi del sito (che spesso sono molto nutriti e approfonditi) è stata fondamentale la suddivisione in paragrafi. A mio avviso questo accorgimento è obbligatorio sul web, dove non stiamo pubblicando testi ma bensì &lt;i&gt;ipertesti&lt;/i&gt;, e dove il lettore molto difficilmente legge tutta una pagina da cima a fondo (come invece farebbe con un libro da lui acquistato).&lt;br /&gt;&lt;br /&gt;Per questo tipo di lettura gli &lt;i&gt;appigli visivi&lt;/i&gt; sono fondamentali, e suddividere un testo con delle righe bianche di stacco è molto riposante per l'occhio. Oltre a questo, anche usare il grassetto sui termini e le espressioni più caratteristiche semplifica molto l'orientamento del lettore.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Per le barre laterali invece, ho scelto caratteri senza grazie: nella fattispecie, il Geneva:&lt;/span&gt;&lt;br /&gt;&lt;pre class="brush: css;" name="code"&gt;#right{&lt;br /&gt;  font: .75em geneva, helvetica, verdana, sans-serif;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;con una grandezza equivalente di 12px. Il Georgia l'ho tenuto per i titoli e per qualche altro elemento particolare.&lt;br /&gt;&lt;br /&gt;Infine, per gli heading principali (h1 e h2) ho utilizzato il &lt;i&gt;Trajan&lt;/i&gt;, un carattere stupendo che ho introdotto come standard nei design per il Centro Studi. Disegnato da Carol Twombly per la Adobe nel 1989, esso trae origine dai segni alfabetici della Colonna Traiana a Roma, ed ha un'eleganza ed una chiarezza veramente fuori del comune; è disponibile solo in versione maiuscola (normal e bold) e si presta particolarmente bene per dei titoli che si stagliano in cima alle pagine.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2179030760266299422-1869584224741476962?l=myblackteapot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/1869584224741476962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/1869584224741476962'/><link rel='alternate' type='text/html' href='http://myblackteapot.blogspot.com/2010/06/case-study-csdoit.html' title='Case study: CSDO.it'/><author><name>blacktealover</name><uri>http://www.blogger.com/profile/07009043319199847342</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_1pfelnO3RgA/S1A4EyIvp3I/AAAAAAAAAdk/djFPE4BjWxk/S220/dadacat.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_1pfelnO3RgA/TBi4HDEOReI/AAAAAAAAAm0/avBPa-39FR4/s72-c/chord2.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2179030760266299422.post-8514096721249262343</id><published>2010-05-28T10:09:00.004+02:00</published><updated>2010-05-28T10:13:19.043+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web design'/><category scheme='http://www.blogger.com/atom/ns#' term='tao'/><title type='text'>TaoTeChing.it</title><content type='html'>Sulla scia del "successo" della versione online delle &lt;i&gt;101 Storie Zen&lt;/i&gt; (vedi &lt;a href="http://myblackteapot.blogspot.com/2010/03/101-storie-zen.html"&gt;post precedente&lt;/a&gt;) ho costruito, sotto la guida del Maestro di filosofia taoista &lt;b&gt;Marco Montagnani&lt;/b&gt;, una nuova versione italiana del &lt;b&gt;Tao Te Ching&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Stavolta l'intenzione era quella di dare libero accesso ad una risorsa completa ed affidabile sull'opera in questione, per chiunque si interessi di questa splendida Filosofia.&lt;br /&gt;&lt;br /&gt;Pertanto abbiamo affiancato ad una traduzione senza diritti d'autore (a cura di Luciano Parinetto, 1995) la &lt;i&gt;versione cinese originale&lt;/i&gt; (con testo scritto dall'alto in basso, da destra a sinistra) e anche una &lt;i&gt;traslitterazione Pinyin con originale a fronte&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;Tutti questi contributi testuali sono stati controllati e sono pertanto attendibili senza problemi.&lt;br /&gt;&lt;br /&gt;Stavolta, visto che ci sono tre versioni per ogni capitolo (italiana, originale e traslitterata) ho implementato un sistema di navigazione da tastiera per rendere più snella la consultazione.&lt;br /&gt;&lt;br /&gt;Il lettore ha tutto a disposizione sotto le dita della mano destra: con il tasto 'o' si accede all'&lt;i&gt;o&lt;/i&gt;riginale cinese, con 'i' alla versione &lt;i&gt;i&lt;/i&gt;taliana, con il 'p' alla traslitterazione &lt;i&gt;p&lt;/i&gt;inyin; mentre con 'k' e 'l' si va indietro o&amp;nbsp;avanti&amp;nbsp;nei capitoli, e con 'j' si torna all'indice generale. Io lo trovo molto comodo, poi ciascuno giudicherà per sè.&lt;br /&gt;&lt;br /&gt;Ovviamente c'è anche una navigazione più tradizionale con link a scomparsa, ma celata dietro un simbolo, perché la mia intenzione era quella di lasciar respirare il testo il più possibile, lasciarlo brillare della sua forza imperitura che da millenni rimane inalterata.&lt;br /&gt;&lt;br /&gt;Questo libro è davvero un capolavoro di concisione, forza e ritmo. Basta dare un'occhiata alla versione traslitterata per rendersi conto delle armonie e dei ritmi su cui il testo si basa, con suoni per noi desueti ma non per questo meno capaci di penetrare in profondità. E quando questi ritmi si spezzano, si aprono sezioni libere di grande forza.&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Cambria; font-size: 16px;"&gt;È&lt;/span&gt;&amp;nbsp;sempre difficile (quando non impossibile) rendere accessibile lo spirito originale di un'opera allorché viene tradotta in altri idiomi. Quest'operazione è pressoché impossibile per il Tao Te Ching, dato il suo carattere oscuro ed ellittico, ma si spera che questa versione così completa possa comunque trasmettere qualcosa di concreto all'avventuroso lettore.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.taoteching.it/"&gt;www.taoteching.it&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_1pfelnO3RgA/S_97Fjjw_LI/AAAAAAAAAmk/92IuwvKUwmc/s1600/laotzu.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_1pfelnO3RgA/S_97Fjjw_LI/AAAAAAAAAmk/92IuwvKUwmc/s320/laotzu.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2179030760266299422-8514096721249262343?l=myblackteapot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/8514096721249262343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/8514096721249262343'/><link rel='alternate' type='text/html' href='http://myblackteapot.blogspot.com/2010/05/taotechingit.html' title='TaoTeChing.it'/><author><name>blacktealover</name><uri>http://www.blogger.com/profile/07009043319199847342</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_1pfelnO3RgA/S1A4EyIvp3I/AAAAAAAAAdk/djFPE4BjWxk/S220/dadacat.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_1pfelnO3RgA/S_97Fjjw_LI/AAAAAAAAAmk/92IuwvKUwmc/s72-c/laotzu.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2179030760266299422.post-8547782045971516862</id><published>2010-03-14T15:25:00.000+01:00</published><updated>2010-03-14T15:25:55.634+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web design'/><category scheme='http://www.blogger.com/atom/ns#' term='zen'/><title type='text'>101 storie zen</title><content type='html'>Le &lt;b&gt;"101 storie zen"&lt;/b&gt; è sempre stato uno dei miei libri preferiti: la semplicità e la scarna eloquenza di quelle storielle mi hanno sempre colpito, fin dalla prima volta che il libretto capitò tra le mie mani un giorno d'estate di vari anni fa, al ritorno in treno da Firenze.&lt;br /&gt;Da allora è stato compagno di viaggio fedele, sia in senso figurato (perché quelle storielle possono essere lette su tanti livelli diversi) sia letterale, perché credo che sia il libro che più facilmente scivola nella mia tasca da viaggiatore, al momento della partenza.&lt;br /&gt;&lt;br /&gt;Più che un libro, è una raccolta di aneddoti a tema &lt;b&gt;Zen&lt;/b&gt; (una setta di Buddhismo giapponese, derivante dal &lt;b&gt;Buddhismo Chan&lt;/b&gt; cinese) ma che svela molto del modo di pensare orientale di tutti i giorni. Questo perché l'ambiente in cui sono maturate queste storie era intriso di queste filosofie fin nei minimi dettagli della vita quotidiana.&amp;nbsp;È filosofia applicata alla vita quotidiana, come sempre dovrebbe essere per non scadere nello sterile esercizio intellettuale.&amp;nbsp;Lo si vede anche nello humour di certi episodi, o nella paradossalità di certe situazioni o di certe azioni. Di sicuro, è un libro che mi diverte molto.&lt;br /&gt;&lt;br /&gt;Insomma, ho una specie di debito di gratitudine verso questo libretto, che adesso ho ripagato facendone una versione web.&lt;br /&gt;&lt;br /&gt;Il mini-progetto è nato sviluppando il menu per La Buca (vedi il &lt;a href="http://myblackteapot.blogspot.com/2010/03/un-menu-per-la-buca.html"&gt;post precedente&lt;/a&gt;) dove avevo inventato, daccordo con Hermann, il fantomatico &lt;i&gt;"piatto Zen"&lt;/i&gt;: una noce sgusciata al centro di un piattone da pizza, con allegata una storiella delle 101 stampata su un singolo A5, a mo' di biglietto della fortuna cinese. Preparando la stampa di queste storielle mi sono accorto che non ce n'è una versione italiana online (a differenza di quella inglese, www.101zenstories.com) e siccome mi avrebbe fatto particolarmente comodo per questo lavoro, ne ho proprio sentito la mancanza.&lt;br /&gt;&lt;br /&gt;Come per tutti i libri, una versione online non potrà mai soppiantare quella cartacea, lo sfogliare le pagine, l'aprire a caso, l'averlo in tasca, tutto spiegazzato, i segni dell'uso, ecc.&amp;nbsp;Però può servire per avvicinarsi a queste scintillanti gemme di saggezza imperitura, che ormai sono patrimonio dell'umanità intera.&lt;br /&gt;&lt;br /&gt;Quindi, ecco qua.&lt;br /&gt;&lt;a href="http://www.101storiezen.com/" title="101 storie Zen"&gt;www.101storiezen.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.101storiezen.com/" title="101 storie Zen"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_1pfelnO3RgA/S5zw1BR6xhI/AAAAAAAAAic/jAaHLMyvxUA/s320/101storiezen.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2179030760266299422-8547782045971516862?l=myblackteapot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/8547782045971516862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/8547782045971516862'/><link rel='alternate' type='text/html' href='http://myblackteapot.blogspot.com/2010/03/101-storie-zen.html' title='101 storie zen'/><author><name>blacktealover</name><uri>http://www.blogger.com/profile/07009043319199847342</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_1pfelnO3RgA/S1A4EyIvp3I/AAAAAAAAAdk/djFPE4BjWxk/S220/dadacat.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_1pfelnO3RgA/S5zw1BR6xhI/AAAAAAAAAic/jAaHLMyvxUA/s72-c/101storiezen.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2179030760266299422.post-6736919866110665767</id><published>2010-03-06T13:55:00.003+01:00</published><updated>2010-03-19T15:02:51.810+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='graphic design'/><category scheme='http://www.blogger.com/atom/ns#' term='la buca'/><category scheme='http://www.blogger.com/atom/ns#' term='menu'/><title type='text'>un Menu per La Buca</title><content type='html'>Martedì scorso ho portato finalmente il menu finito al buon Hermann del &lt;a href="http://publabuca.blogspot.com/"&gt;&lt;b&gt;pub La Buca&lt;/b&gt;&lt;/a&gt; (di Pescia, PT), che abbiamo sviluppato nell'ultimo paio di settimane.&lt;br /&gt;&lt;br /&gt;È un &lt;b&gt;menu pieghevole&lt;/b&gt; in tre parti, formato A3, plastificato in modo da renderlo &lt;i&gt;immortale&lt;/i&gt; anche con i clienti più maneschi.&lt;br /&gt;&lt;br /&gt;Il lavoro è venuto proprio bene e mi sono divertito un sacco a farlo, perché ho avuto praticamente carta bianca e ho potuto concentrarmi su un design moderno e vivace, in linea con una clientela giovane e dinamica.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_1pfelnO3RgA/S5JNnSHHyXI/AAAAAAAAAg8/Zin_huUCm-0/s1600-h/menu-labuca-1.jpg" imageanchor="1" rel="lightbox[buca]" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_1pfelnO3RgA/S5JNnSHHyXI/AAAAAAAAAg8/Zin_huUCm-0/s320/menu-labuca-1.jpg" /&gt;&lt;/a&gt;&lt;a href="http://4.bp.blogspot.com/_1pfelnO3RgA/S5JN9srN6RI/AAAAAAAAAhE/02H08_k7p0I/s1600-h/menu-labuca-2.jpg" imageanchor="1" rel="lightbox[buca]" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_1pfelnO3RgA/S5JN9srN6RI/AAAAAAAAAhE/02H08_k7p0I/s320/menu-labuca-2.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_1pfelnO3RgA/S5JOAh6IRkI/AAAAAAAAAhM/Tll70Dipzmo/s1600-h/menu-labuca-3.jpg" imageanchor="1" rel="lightbox[buca]" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_1pfelnO3RgA/S5JOAh6IRkI/AAAAAAAAAhM/Tll70Dipzmo/s320/menu-labuca-3.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_1pfelnO3RgA/S5JODJ1At5I/AAAAAAAAAhU/EfjTya6qLuI/s1600-h/menu-labuca-4.jpg" imageanchor="1" rel="lightbox[buca]" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_1pfelnO3RgA/S5JODJ1At5I/AAAAAAAAAhU/EfjTya6qLuI/s320/menu-labuca-4.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_1pfelnO3RgA/S5JOF83tVJI/AAAAAAAAAhc/dR0IvETd9ks/s1600-h/menu-labuca-5.jpg" imageanchor="1" rel="lightbox[buca]" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_1pfelnO3RgA/S5JOF83tVJI/AAAAAAAAAhc/dR0IvETd9ks/s320/menu-labuca-5.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_1pfelnO3RgA/S5JOI6x6v5I/AAAAAAAAAhk/qo5CWn9Uay4/s1600-h/menu-labuca-esterno.png" imageanchor="1" rel="lightbox[buca]" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_1pfelnO3RgA/S5JOI6x6v5I/AAAAAAAAAhk/qo5CWn9Uay4/s320/menu-labuca-esterno.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_1pfelnO3RgA/S5JOMbSvs1I/AAAAAAAAAhs/mYDstgA_7v8/s1600-h/menu-labuca-interno.png" imageanchor="1" rel="lightbox[buca]" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_1pfelnO3RgA/S5JOMbSvs1I/AAAAAAAAAhs/mYDstgA_7v8/s320/menu-labuca-interno.png" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;span class="small"&gt;Le foto di cui sopra sono della bozza di stampa... alcuni errori di margine sono stati corretti!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ho sviluppato il tutto con InDesign, creando le immagini in Photoshop (ed esportandole con la trasparenza). Ecco uno screenshot della finestra di lavoro in InDesign:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_1pfelnO3RgA/S5JOPGNQJPI/AAAAAAAAAh0/JEMgJE5_cAI/s1600-h/menu-labuca-indesign.png" imageanchor="1" rel="lightbox" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_1pfelnO3RgA/S5JOPGNQJPI/AAAAAAAAAh0/JEMgJE5_cAI/s320/menu-labuca-indesign.png" /&gt;&lt;/a&gt;&lt;/div&gt;Molte delle icone le ho disegnate in Illustrator. I segni a "pennarello" che sembrano fatti a mano libera... sono proprio così, con una tavoletta grafica Wacom. Il ritratto di Hermann è opera mia, con fotografia + tradizionale matita, poi inchiostrato in Illustrator e colorato in Photoshop.&lt;br /&gt;&lt;br /&gt;Tutto questo rientra poi in un progetto un po' più ampio che ha coinvolto anche il design di un &lt;a href="http://publabuca.blogspot.com/"&gt;Blogger per il pub&lt;/a&gt;, e precedentemente di un volantino: il tutto nello stesso stile grafico, che contrasta in modo grazioso con l'aspetto tradizionale del pub, ma che si allinea bene con il personaggio che lo gestisce e con buona parte degli avventori.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2179030760266299422-6736919866110665767?l=myblackteapot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/6736919866110665767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/6736919866110665767'/><link rel='alternate' type='text/html' href='http://myblackteapot.blogspot.com/2010/03/un-menu-per-la-buca.html' title='un Menu per La Buca'/><author><name>blacktealover</name><uri>http://www.blogger.com/profile/07009043319199847342</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_1pfelnO3RgA/S1A4EyIvp3I/AAAAAAAAAdk/djFPE4BjWxk/S220/dadacat.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_1pfelnO3RgA/S5JNnSHHyXI/AAAAAAAAAg8/Zin_huUCm-0/s72-c/menu-labuca-1.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2179030760266299422.post-2492132635098819782</id><published>2010-02-11T12:38:00.001+01:00</published><updated>2010-02-11T12:42:08.240+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fotografia'/><title type='text'>Amarcord di una serata</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox[amarcord]" href="http://lh5.ggpht.com/_1pfelnO3RgA/S3Pq9vlzKtI/AAAAAAAAAfQ/wyjal63508s/ricordo01.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://lh5.ggpht.com/_1pfelnO3RgA/S3Pq9vlzKtI/AAAAAAAAAfQ/wyjal63508s/ricordo01.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;a href="http://lh6.ggpht.com/_1pfelnO3RgA/S3Pq9j1c_ZI/AAAAAAAAAfU/gKHm8mXuG6A/ricordo02.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" rel="lightbox[amarcord]"&gt;&lt;img border="0" height="320" src="http://lh6.ggpht.com/_1pfelnO3RgA/S3Pq9j1c_ZI/AAAAAAAAAfU/gKHm8mXuG6A/ricordo02.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;a href="http://lh5.ggpht.com/_1pfelnO3RgA/S3Pq98TCF3I/AAAAAAAAAfY/BsIHtZSXlCk/ricordo03.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" rel="lightbox[amarcord]"&gt;&lt;img border="0" height="320" src="http://lh5.ggpht.com/_1pfelnO3RgA/S3Pq98TCF3I/AAAAAAAAAfY/BsIHtZSXlCk/ricordo03.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;a href="http://lh6.ggpht.com/_1pfelnO3RgA/S3Pq-DxSMFI/AAAAAAAAAfc/LUqIoWMvbFg/ricordo04.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" rel="lightbox[amarcord]"&gt;&lt;img border="0" height="320" src="http://lh6.ggpht.com/_1pfelnO3RgA/S3Pq-DxSMFI/AAAAAAAAAfc/LUqIoWMvbFg/ricordo04.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;a href="http://lh6.ggpht.com/_1pfelnO3RgA/S3Pq-qvo9mI/AAAAAAAAAfg/7iyh6-KhTLQ/ricordo05.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" rel="lightbox[amarcord]"&gt;&lt;img border="0" height="320" src="http://lh6.ggpht.com/_1pfelnO3RgA/S3Pq-qvo9mI/AAAAAAAAAfg/7iyh6-KhTLQ/ricordo05.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;a href="http://lh3.ggpht.com/_1pfelnO3RgA/S3PrE9u82aI/AAAAAAAAAfo/Owa1VdOuDiI/ricordo06.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" rel="lightbox[amarcord]"&gt;&lt;img border="0" height="320" src="http://lh3.ggpht.com/_1pfelnO3RgA/S3PrE9u82aI/AAAAAAAAAfo/Owa1VdOuDiI/ricordo06.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;a href="http://lh4.ggpht.com/_1pfelnO3RgA/S3PrFdSrsVI/AAAAAAAAAfs/Pjl8jFriDMI/ricordo07.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" rel="lightbox[amarcord]"&gt;&lt;img border="0" height="320" src="http://lh4.ggpht.com/_1pfelnO3RgA/S3PrFdSrsVI/AAAAAAAAAfs/Pjl8jFriDMI/ricordo07.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;a href="http://lh3.ggpht.com/_1pfelnO3RgA/S3PrFn35soI/AAAAAAAAAfw/xAHfRZ5F2QE/ricordo08.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" rel="lightbox[amarcord]"&gt;&lt;img border="0" height="320" src="http://lh3.ggpht.com/_1pfelnO3RgA/S3PrFn35soI/AAAAAAAAAfw/xAHfRZ5F2QE/ricordo08.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2179030760266299422-2492132635098819782?l=myblackteapot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/2492132635098819782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/2492132635098819782'/><link rel='alternate' type='text/html' href='http://myblackteapot.blogspot.com/2010/02/amarcord-di-una-serata.html' title='Amarcord di una serata'/><author><name>blacktealover</name><uri>http://www.blogger.com/profile/07009043319199847342</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_1pfelnO3RgA/S1A4EyIvp3I/AAAAAAAAAdk/djFPE4BjWxk/S220/dadacat.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_1pfelnO3RgA/S3Pq9vlzKtI/AAAAAAAAAfQ/wyjal63508s/s72-c/ricordo01.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2179030760266299422.post-3304114046704897672</id><published>2009-12-29T15:43:00.011+01:00</published><updated>2010-01-11T14:13:13.053+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Wordpress'/><category scheme='http://www.blogger.com/atom/ns#' term='web design'/><category scheme='http://www.blogger.com/atom/ns#' term='xiu zhen dao'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>Wordpress + jQuery: Newsletter widget</title><content type='html'>Oggi vedremo un modo estremamente semplice di implementare (&lt;em&gt;from scratch&lt;/em&gt;) un &lt;b&gt;piccolo widget&lt;/b&gt; in un qualsiasi &lt;b&gt;tema Wordpress&lt;/b&gt;, che consente agli utenti di iscrivere un indirizzo e-mail ad un servizio di &lt;b&gt;newsletter&lt;/b&gt;. Il tutto sarà realizzato con &lt;b&gt;jQuery&lt;/b&gt;, e non è altro che un'applicazione semplificata di quello che ho affrontato nel post precedente, sulla &lt;a href="http://myblackteapot.blogspot.com/2009/12/jquery-custom-form-validation.html"&gt;validazione di form con jQuery&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Ciò che andremo a creare l'ho sviluppato per la nuova versione dinamica del sito del &lt;a href="http://www.xiuzhendao.it/"&gt;Metodo Xiu Zhen Dao&lt;/a&gt;, che usa appunto Wordpress come CMS: il widget in questione è visibile nella barra laterale destra, in una qualsiasi pagina:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox" href="http://1.bp.blogspot.com/_1pfelnO3RgA/SznujcHs6iI/AAAAAAAAAYw/L9sQ-sEzGLY/s1600-h/xzd_news.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_1pfelnO3RgA/SznujcHs6iI/AAAAAAAAAYw/L9sQ-sEzGLY/s400/xzd_news.gif" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;In questo caso, per rendere la vita semplice a noi e agli utenti, c'è un solo campo da riempire con il proprio indirizzo e-mail, e il widget riesce a validare correttamente questo campo, ad esempio controllando che sia presente il simbolo '@' e almeno un punto '.' (tutto questo sarà approfondito sotto):&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox" href="http://4.bp.blogspot.com/_1pfelnO3RgA/Szn81AQ0apI/AAAAAAAAAY4/AQ6XR5ECWK0/s1600-h/xzd_news_err.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" title="esempio di validazione non passata"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_1pfelnO3RgA/Szn81AQ0apI/AAAAAAAAAY4/AQ6XR5ECWK0/s320/xzd_news_err.gif" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;I punti nodali sono due:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Creare la struttura del form in un widget testuale&lt;/li&gt;&lt;li&gt;Inserire il codice necessario al funzionamento del widget tramite un file esterno, da aggiungere al file &lt;span class="inlinecode"&gt;header.php&lt;/span&gt;.&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-size: large;"&gt;1. Markup HTML&lt;/span&gt;&lt;br /&gt;Si deve innanzitutto creare la struttura HTML del form, e va inserita in un widget nuovo, di tipo testo: si va nel pannello di amministrazione di Wordpress, nella sezione Aspetto → Widget, e si sceglie la tipologia &lt;i&gt;Testo&lt;/i&gt; ("Testo o HTML libero"). Ecco qua il mio widget compilato:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox" href="http://4.bp.blogspot.com/_1pfelnO3RgA/SzoAZyuMqbI/AAAAAAAAAZA/0XxPye1b_OQ/s1600-h/xzd_news_widget.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_1pfelnO3RgA/SzoAZyuMqbI/AAAAAAAAAZA/0XxPye1b_OQ/s400/xzd_news_widget.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Il campo titolo del widget deve essere riempito a parte, mentre nel corpo del testo ho inserito il codice di un form assolutamente di base:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: xml;" name="code"&gt;&amp;lt;div id="newsletter_form"&amp;gt;&lt;br /&gt; Iscriviti alla newsletter del Metodo XiuZhenDao&lt;br /&gt; &amp;lt;form action="" method="post" id="form_news"&amp;gt;&lt;br /&gt;  &amp;lt;fieldset&amp;gt;&lt;br /&gt;   &amp;lt;input id="email_news" name="email_news" type="text" value="la tua e-mail" /&amp;gt;&lt;br /&gt;   &amp;lt;input id="submit_news" type="submit" value="iscriviti" /&amp;gt;&lt;br /&gt;  &amp;lt;/fieldset&amp;gt;&lt;br /&gt; &amp;lt;/form&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;/pre&gt;Il CSS utilizzato per formattare il form è praticamente trascurabile, perché basta poco oltre a ciò che è già presente nello stile del tema Wordpress, dove generalmente gli input box e i pulsanti sono già stilati. Questo stile può essere inserito nel documento &lt;span class="inlinecode"&gt;.css&lt;/span&gt; principale del tema, o in un qualunque altro foglio di stile incluso nella pagina dove si inserirà il widget.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: css;" name="code"&gt;/* newsletter widget */&lt;br /&gt;#newsletter_form #email_news{&lt;br /&gt; width: 130px;&lt;br /&gt;}&lt;br /&gt;#newsletter_form #submit_news{&lt;br /&gt; margin-top: 5px;&lt;br /&gt; padding: 2px;&lt;br /&gt; cursor: pointer;&lt;br /&gt;}&lt;br /&gt;#newsletter_form .catched{&lt;br /&gt; font-style: italic;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;La classe &lt;span class="inlinecode"&gt;.catched&lt;/span&gt; ci servirà dopo, nel messaggio di successo.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;2. validazione jQuery&lt;/span&gt;&lt;br /&gt;È tempo di scrivere lo script di validazione: è sostanzialmente identico a quello che ho usato nel&lt;a href="http://myblackteapot.blogspot.com/2009/12/jquery-custom-form-validation.html"&gt; post precedente&lt;/a&gt;, ma in più stavolta implementeremo una validazione più professionale per il nostro campo e-mail (visto che è l'unico che abbiamo, stavolta!)&lt;br /&gt;&lt;br /&gt;Ecco cosa fa lo script: quando l'utente clicca il pulsante "iscriviti" controlla che il campo sia stato riempito correttamente. Se ciò non si verifica, colora di rosso il campo; altrimenti invia un'e-mail all'amministratore con l'indirizzo inserito e visualizza un messaggio di successo.&lt;br /&gt;&lt;pre class="brush: js;" name="code"&gt;(function($){&lt;br /&gt;    $(document).ready(function(){&lt;br /&gt;    &lt;br /&gt;    // newsletter widget&lt;br /&gt; $('#email_news').click(function() {&lt;br /&gt;  $(this).attr('value', '');&lt;br /&gt; });&lt;br /&gt; &lt;br /&gt; $("#submit_news").click(function() {&lt;br /&gt; &lt;br /&gt; // stile errore&lt;br /&gt; var errorclass = {&lt;br /&gt;  'background' : '#ff435b',&lt;br /&gt;  'color' : '#000',&lt;br /&gt;  'borderColor' : '#000'&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; // analisi del dato inserito&lt;br /&gt; var email_news = $("input#email_news").val();&lt;br /&gt; var ln = email_news.length;&lt;br /&gt; var atpos = email_news.indexOf("@");&lt;br /&gt; var dotpos = email_news.lastIndexOf(".");&lt;br /&gt; &lt;br /&gt; // validazione campo e-mail&lt;br /&gt; if ((atpos &amp;lt; 1)||((dotpos - atpos) &amp;lt; 2)||(dotpos == ln-1)) {&lt;br /&gt;  $("input#email_news").css(errorclass).focus();&lt;br /&gt;     return false;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; // passaggio dati, invio e-mail e messaggio di successo&lt;br /&gt; var dataString = 'email_news=' + email_news;  &lt;br /&gt; //alert (dataString); return false;&lt;br /&gt; $.ajax({  &lt;br /&gt;  type: "POST",  &lt;br /&gt;  url: "newsletter.php",  &lt;br /&gt;  data: dataString,  &lt;br /&gt;  success: function() {&lt;br /&gt;   $('#newsletter_form').html("&lt;div id='message_news'&gt;&lt;/div&gt;");  &lt;br /&gt;   $('#message_news').html('&lt;p&gt;Grazie! Hai iscritto &lt;span class="catched"&gt;&lt;/span&gt; alla newsletter&lt;/p&gt;').append('&lt;img src="images/logo_newsletter.jpg" style="border: 0;" width="40" height="40" /&gt;').hide();&lt;br /&gt;   $('#message_news .catched').html(email_news);&lt;br /&gt;   $('#message_news').fadeIn('slow');&lt;br /&gt;  }  &lt;br /&gt; });  &lt;br /&gt; return false;   &lt;br /&gt; &lt;br /&gt; });&lt;br /&gt; &lt;br /&gt;});&lt;br /&gt;})(jQuery);&lt;br /&gt;&lt;/pre&gt;Diamo una scorsa alla prima parte del codice:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;La prima istruzione (righe 5-7) serve soltanto per cancellare automaticamente il testo del campo quando l'utente ci clicca sopra per scrivere il suo dato.&lt;/li&gt;&lt;li&gt;La riga 9 intercetta l'evento del click sul pulsante d'invio per dare inizio alle procedure di validazione.&lt;/li&gt;&lt;li&gt;Le righe 12-16 definiscono una classe CSS che serve per modificare l'aspetto del campo input nel caso di errore.&lt;/li&gt;&lt;/ol&gt;La validazione del campo e-mail controlla che il dato inserito soddisfi le seguenti condizioni:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Non deve essere nullo&lt;/li&gt;&lt;li&gt;Deve contenere almeno un carattere '@' e almeno un punto '.'&lt;/li&gt;&lt;li&gt;Il carattere '@' non deve essere all'inizio del dato inserito&lt;/li&gt;&lt;li&gt; Il punto '.' deve essere ad almeno un carattere di distanza dopo '@' ma non può stare per ultimo.&lt;/li&gt;&lt;/ol&gt;Per fa questo, prima di tutto si memorizza il dato inserito dall'utente col metodo &lt;a href="http://docs.jquery.com/Attributes/val"&gt;&lt;span class="inlinecode"&gt;val()&lt;/span&gt;&lt;/a&gt;, e poi si esamina:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;se ne calcola la lunghezza col metodo &lt;span class="inlinecode"&gt;&lt;a href="http://www.w3schools.com/jsref/jsref_length_string.asp"&gt;length&lt;/a&gt;&lt;/span&gt; (riga 20)&lt;/li&gt;&lt;li&gt;si individua la posizione del carattere '@' col metodo &lt;span class="inlinecode"&gt;&lt;a href="http://www.w3schools.com/jsref/jsref_IndexOf.asp"&gt;indexOf()&lt;/a&gt;&lt;/span&gt; (riga 21)&lt;/li&gt;&lt;li&gt;si individua la posizione dell'ultimo punto '.' inserito col metodo &lt;span class="inlinecode"&gt;&lt;a href="http://www.w3schools.com/jsref/jsref_lastIndexOf.asp"&gt;lastIndexOf()&lt;/a&gt;&lt;/span&gt; (riga 22).&lt;/li&gt;&lt;/ol&gt;A questo punto, si può effettuare la validazione: le condizioni sono tutte singolarmente sufficienti a rendere errato un indirizzo e-mail, quindi sono collegate tra loro con un OR (&lt;span class="inlinecode"&gt;||&lt;/span&gt;).&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Poiché il metodo &lt;span class="inlinecode"&gt;indexOf()&lt;/span&gt;&amp;nbsp;restituisce &lt;span class="inlinecode"&gt;-1&lt;/span&gt; se il carattere non è presente e &lt;span class="inlinecode"&gt;0&lt;/span&gt; se è in prima posizione, con il controllo &lt;span class="inlinecode"&gt;atpos &amp;lt; 1&lt;/span&gt; si vede subito sia se '@' esiste o se è per primo&lt;/li&gt;&lt;li&gt;Con &lt;span class="inlinecode"&gt;dotpos - atpos &amp;lt; 2&lt;/span&gt; ci si assicura che '@' e '.' non siano consecutivi, e che l'ultimo '.' sia a destra di '@'&lt;/li&gt;&lt;li&gt;Con l'ultima condizione, &lt;span class="inlinecode"&gt;dotpos == ln-1&lt;/span&gt;, si controlla invece se il punto '.' è in ultima posizione.&lt;/li&gt;&lt;/ol&gt;&lt;span class="small"&gt;Questa validazione è molto simile a quella suggerita da &lt;a href="http://www.w3schools.com/"&gt;w3schools.com&lt;/a&gt; nell'articolo &lt;a href="http://www.w3schools.com/js/js_form_validation.asp"&gt;JavaScript Form Validation&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Se la validazione non passa, si colora di rosso il campo applicandogli la classe &lt;span class="inlinecode"&gt;.errorclass&lt;/span&gt; (riga 26).&lt;br /&gt;&lt;br /&gt;Tutto quello che viene dopo riguarda il passaggio dei dati ad uno script php per l'invio dell'e-mail, ed è stato affrontato nel dettaglio nel post sulla &lt;a href="http://myblackteapot.blogspot.com/2009/12/jquery-custom-form-validation.html"&gt;validazione di form con jQuery&lt;/a&gt;.&lt;br /&gt;In sostanza, si usa il metodo &lt;a href="http://docs.jquery.com/Ajax/jQuery.ajax#options"&gt;&lt;span class="inlinecode"&gt;$.ajax&lt;/span&gt;&lt;/a&gt;, che ci consente anche di visualizzare un messaggio di successo, senza dover ricaricare questa o altre pagine.&lt;br /&gt;Degno di nota, questa volta, l'inclusione del dato memorizzato nel messaggio di successo per l'utente, a conferma di quanto da lui inserito: basta inserire uno &lt;span class="inlinecode"&gt;&amp;lt;span&amp;gt;&lt;/span&gt; con una classe per riconoscerlo (nel mio caso &lt;span class="inlinecode"&gt;.catched&lt;/span&gt;) e passargli il valore memorizzato, col metodo &lt;span class="inlinecode"&gt;&lt;a href="http://docs.jquery.com/Attributes/html#val"&gt;html(val)&lt;/a&gt;&lt;/span&gt; (riga 40).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;3. script PHP&lt;/span&gt;&lt;br /&gt;L'ultima cosa da vedere è lo script che invia l'e-mail, e questo sì che è &lt;em&gt;davvero&lt;/em&gt; minimale! Io l'ho scritto così:&lt;br /&gt;&lt;pre class="brush: php;" name="code"&gt;&amp;lt;?php&lt;br /&gt;&lt;br /&gt;$body = "indirizzo e-mail iscritto: ".$_POST['email_news'];&lt;br /&gt;$header = "From: ".$_POST['email_news'];&lt;br /&gt; &lt;br /&gt;mail("indirizzo@email.dominio", "Newsletter widget", $body, $header);&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;4. file da includere&lt;/span&gt;&lt;br /&gt;Ricapitolando, dopo aver inserito il codice HTML nel widget (sopra al punto 1), si deve inserire un file contenente&amp;nbsp;lo script jQuery che abbiamo visto sopra (al punto 2)&amp;nbsp;nel template &lt;span class="inlinecode"&gt;header.php&lt;/span&gt; (e comunque all'interno dello &lt;span class="inlinecode"&gt;&amp;lt;head&amp;gt;&lt;/span&gt; di ogni pagina su cui sarà visualizzato il widget), ad esempio in questo modo:&lt;br /&gt;&lt;pre class="brush: xml;" name="code"&gt; &lt;br /&gt; &amp;lt;script type="text/javascript" src="newsletter_validation.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/pre&gt;Poi si deve mettere lo script php all'indirizzo specificato nel campo url del metodo &lt;span class="inlinecode"&gt;$.ajax&lt;/span&gt; (forse la cosa più comoda è inserire un url assoluto dopo aver piazzato il file, ad esempio nella directory del tema di Wordpress).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2179030760266299422-3304114046704897672?l=myblackteapot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/3304114046704897672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/3304114046704897672'/><link rel='alternate' type='text/html' href='http://myblackteapot.blogspot.com/2009/12/wordpress-newsletter-widget.html' title='Wordpress + jQuery: Newsletter widget'/><author><name>blacktealover</name><uri>http://www.blogger.com/profile/07009043319199847342</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_1pfelnO3RgA/S1A4EyIvp3I/AAAAAAAAAdk/djFPE4BjWxk/S220/dadacat.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_1pfelnO3RgA/SznujcHs6iI/AAAAAAAAAYw/L9sQ-sEzGLY/s72-c/xzd_news.gif' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2179030760266299422.post-8329261445433066660</id><published>2009-12-06T15:40:00.014+01:00</published><updated>2010-06-16T15:15:25.126+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web design'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>jQuery: custom form validation</title><content type='html'>Avrei anche potuto intitolare questo post "principi di form validation", perché quello che vedremo è come sia possibile scriversi un semplice script di validazione form partendo da zero.&lt;br /&gt;È possibile utilizzare il famoso plugin di jQuery chiamato appunto &lt;a href="http://bassistance.de/jquery-plugins/jquery-plugin-validation/" title="Validation jQuery plugin su Bassistance.de"&gt;Validation&lt;/a&gt; creato da &lt;a href="http://bassistance.de/"&gt;Jörn Zaeferrer&lt;/a&gt;, che aggiunge in maniera molto semplice delle funzioni personalizzabili per validare un form.&lt;br /&gt;Noi qui non utilizzeremo questa strada, ma guarderemo da vicino quali sono i problemi e le necessità cui si va incontro se si vuole validare un form con jQuery, e ne ricaveremo la flessibilità che si ottiene da una maggiore comprensione.&lt;br /&gt;&lt;br /&gt;Il nostro scopo finale è avere un form che viene validato senza il bisogno di caricare un'altra pagina e che invii un'email formattata arbitrariamente, e che al contempo sia sufficientemente flessibile da supportare delle variazioni alla ricetta generale.&lt;br /&gt;&lt;br /&gt;L'esempio viene dal form contatti che ho implementato nella "tirata a lucido" del sito &lt;a href="http://www.bfelettrotecnica.it/" title="azienda di sviluppo componenti elettronici e impiantistica"&gt;www.bfelettrotecnica.it&lt;/a&gt;, e la base da cui partiremo è pari pari quella proposta in &lt;a href="http://net.tutsplus.com/tutorials/javascript-ajax/submit-a-form-without-page-refresh-using-jquery/" title="Submit A Form Without Page Refresh using jQuery"&gt;questo tutorial&lt;/a&gt; di &lt;a href="http://net.tutsplus.com/" title="articoli e tutorial per sviluppatori web"&gt;Net Tuts+&lt;/a&gt; (a opera di &lt;a href="http://www.renkai.com/" title="Renkai Designs"&gt;Eric&lt;/a&gt;), e che consiglio di leggere comunque, prima di cominciare.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox" title="form contatti di www.bfelettrotecnica.it" href="http://1.bp.blogspot.com/_1pfelnO3RgA/SqV7RR4orLI/AAAAAAAAAT8/P_B1jMiq-nE/s1600-h/BFformsnap.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_1pfelnO3RgA/SqV7RR4orLI/AAAAAAAAAT8/P_B1jMiq-nE/s320/BFformsnap.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;1. Markup HTML&lt;/span&gt;&lt;br /&gt;Come si vede dall'immagine, il form contiene numerosi campi, molti obbligatori (ma non tutti), un select, una textarea e anche due radio per una selezione esclusiva: si consente all'utente di scegliere se rappresenta un privato oppure un'azienda, e di riempire dei campi che variano in base a questa scelta.&lt;br /&gt;&lt;br /&gt;Ecco il codice del form:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: xml;" name="code"&gt;&amp;lt;div id="contactform"&amp;gt;&lt;br /&gt;&amp;lt;form action="#" method="post"&amp;gt;&lt;br /&gt; &amp;lt;fieldset&amp;gt;&lt;br /&gt;  &amp;lt;legend&amp;gt;Richiesta Informazioni&amp;lt;/legend&amp;gt;&lt;br /&gt;  &amp;lt;ol&amp;gt;&lt;br /&gt;   &amp;lt;li&amp;gt;&lt;br /&gt;    &amp;lt;input id="privato" type="radio" value="privato" name="tipologia" /&amp;gt; &amp;lt;span class="radioin"&amp;gt;Privato&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;    &amp;lt;label for="nome"&amp;gt;Nome e cognome &amp;lt;i&amp;gt;*&amp;lt;/i&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;    &amp;lt;input id="nome" name="nome" type="text" class="obb" /&amp;gt;&lt;br /&gt;    &amp;lt;label id='nome_err' class='error'&amp;gt;inserisci il tuo nominativo&amp;lt;/label&amp;gt;&lt;br /&gt;   &amp;lt;/li&amp;gt;&lt;br /&gt;&lt;br /&gt;   &amp;lt;li&amp;gt;&lt;br /&gt;    &amp;lt;input id="societa" type="radio" value="azienda" name="tipologia" /&amp;gt; &amp;lt;span class="radioin"&amp;gt;Azienda&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;    &amp;lt;label for="azienda"&amp;gt;Ragione sociale &amp;lt;i&amp;gt;*&amp;lt;/i&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;    &amp;lt;input id="azienda" name="azienda" type="text" class="obb" /&amp;gt;&lt;br /&gt;    &amp;lt;label id='azienda_err' class='error'&amp;gt;inserisci la ragione sociale&amp;lt;/label&amp;gt;&lt;br /&gt;    &amp;lt;label for="referente"&amp;gt;Referente &amp;lt;i&amp;gt;*&amp;lt;/i&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;    &amp;lt;input id="referente" name="referente" type="text" class="obb" /&amp;gt;&lt;br /&gt;    &amp;lt;label id='referente_err' class='error'&amp;gt;inserisci il nominativo di un referente&amp;lt;/label&amp;gt;&lt;br /&gt;   &amp;lt;/li&amp;gt;&lt;br /&gt;            &lt;br /&gt;   &amp;lt;li style="margin-top: 15px;"&amp;gt;&lt;br /&gt;    &amp;lt;label for="indirizzo"&amp;gt;Indirizzo &amp;lt;i&amp;gt;*&amp;lt;/i&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;    &amp;lt;input id="indirizzo" name="indirizzo" type="text" class="obb" /&amp;gt;&lt;br /&gt;    &amp;lt;label id='indirizzo_err' class='error'&amp;gt;inserisci l'indirizzo dell'attivit&amp;agrave;&amp;lt;/label&amp;gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;    &amp;lt;label style="width: 75px;" for="cap"&amp;gt;CAP &amp;lt;i&amp;gt;*&amp;lt;/i&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;    &amp;lt;input style="width: 50px" id="cap" name="cap" type="text" class="obb" /&amp;gt;&lt;br /&gt;    &amp;lt;label id='cap_err' class='error'&amp;gt;inserisci il codice di avviamento postale&amp;lt;/label&amp;gt;&lt;br /&gt;   &amp;lt;/li&amp;gt;&lt;br /&gt;&lt;br /&gt;   &amp;lt;li&amp;gt;&lt;br /&gt;    &amp;lt;label for="citta"&amp;gt;Citt&amp;agrave; &amp;lt;i&amp;gt;*&amp;lt;/i&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;    &amp;lt;input id="citta" name="citta" type="text" class="obb" /&amp;gt;&lt;br /&gt;    &amp;lt;label id='citta_err' class='error'&amp;gt;inserisci il nome della citt&amp;agrave;&amp;lt;/label&amp;gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;    &amp;lt;label style="width: 75px;" for="provincia"&amp;gt;Provincia &amp;lt;i&amp;gt;*&amp;lt;/i&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;    &amp;lt;input style="width: 50px;" id="provincia" name="provincia" type="text" class="obb" /&amp;gt;&lt;br /&gt;    &amp;lt;label id='provincia_err' class='error'&amp;gt;inserisci la sigla della provincia&amp;lt;/label&amp;gt;&lt;br /&gt;   &amp;lt;/li&amp;gt;&lt;br /&gt;            &lt;br /&gt;   &amp;lt;li&amp;gt;&lt;br /&gt;    &amp;lt;label for="telefono"&amp;gt;Telefono&amp;lt;/label&amp;gt;&lt;br /&gt;    &amp;lt;input id="telefono" name="telefono" type="text" /&amp;gt;&lt;br /&gt;   &amp;lt;/li&amp;gt;&lt;br /&gt;&lt;br /&gt;   &amp;lt;li&amp;gt;&lt;br /&gt;    &amp;lt;label for="email"&amp;gt;e-mail &amp;lt;i&amp;gt;*&amp;lt;/i&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;    &amp;lt;input id="email" name="email" type="text" class="obb" /&amp;gt;&lt;br /&gt;    &amp;lt;label id='email_err' class='error'&amp;gt;inserisci il tuo indirizzo e-mail&amp;lt;/label&amp;gt;&lt;br /&gt;   &amp;lt;/li&amp;gt;&lt;br /&gt;&lt;br /&gt;   &amp;lt;li&amp;gt;&lt;br /&gt;    &amp;lt;label for="area"&amp;gt;Area d'interesse&amp;lt;/label&amp;gt;&lt;br /&gt;    &amp;lt;select id="area" name="area"&amp;gt;&lt;br /&gt;     &amp;lt;option value="void"&amp;gt;&amp;nbsp;&amp;lt;/option&amp;gt;&lt;br /&gt;     &amp;lt;option value="centraline"&amp;gt;Centraline di Controllo&amp;lt;/option&amp;gt;&lt;br /&gt;     &amp;lt;option value="plc"&amp;gt;Programmazione PLC&amp;lt;/option&amp;gt;&lt;br /&gt;     &amp;lt;option value="Automazione"&amp;gt;Automazione Industriale&amp;lt;/option&amp;gt;&lt;br /&gt;     &amp;lt;option value="Quadri Elettrici"&amp;gt;Quadri Elettrici&amp;lt;/option&amp;gt;&lt;br /&gt;     &amp;lt;option value="Impianti Elettrici"&amp;gt;Impianti Elettrici&amp;lt;/option&amp;gt;&lt;br /&gt;    &amp;lt;/select&amp;gt;&lt;br /&gt;   &amp;lt;/li&amp;gt;&lt;br /&gt;&lt;br /&gt;   &amp;lt;li&amp;gt;&lt;br /&gt;    &amp;lt;label for="messaggio"&amp;gt;Messaggio: &amp;lt;i&amp;gt;*&amp;lt;/i&amp;gt;&amp;lt;/label&amp;gt;&lt;br /&gt;    &amp;lt;textarea id="messaggio" name="messaggio" rows="5" cols="38" class="obb"&amp;gt;&amp;lt;/textarea&amp;gt;&lt;br /&gt;    &amp;lt;label id='messaggio_err' class='error'&amp;gt;scrivi la tua richiesta&amp;lt;/label&amp;gt;&lt;br /&gt;   &amp;lt;/li&amp;gt;&lt;br /&gt;  &amp;lt;/ol&amp;gt;&lt;br /&gt; &amp;lt;/fieldset&amp;gt;&lt;br /&gt; &amp;lt;span id="input"&amp;gt;&amp;lt;input id="submit" type="submit" value="Invia Messaggio" /&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt; &amp;lt;span style="font-style: italic;"&amp;gt;I dati personali verranno trattati nel rispetto della normativa sulla privacy.&amp;lt;/span&amp;gt;&lt;br /&gt;&amp;lt;/form&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I punti degni di nota sono:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Nella prima riga, &lt;span class="inlinecode"&gt;action="#"&lt;/span&gt;, poiché utilizzeremo jQuery per gestire tutta la parte relativa al passaggio dei dati allo script php che invierà l'email finale.&lt;/li&gt;&lt;li&gt;I tag &lt;span class="inlinecode"&gt;&amp;lt;label&amp;gt;&lt;/span&gt; dalla classe &lt;span class="inlinecode"&gt;error&lt;/span&gt; sono dei messaggi di errore che verranno visualizzati qualora il rispettivo campo obbligatorio non sia stato compilato. Essi sono nascosti di default.&lt;/li&gt;&lt;li&gt;I campi obbligatori sono denotati come al solito dall'asterisco (*), inserito in un tag corsivo &lt;span class="inlinecode"&gt;&amp;lt;i&amp;gt;&lt;/span&gt;, e dalla classe &lt;span class="inlinecode"&gt;obb&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Il tag &lt;span class="inlinecode"&gt;&amp;lt;div&amp;gt;&lt;/span&gt; che racchiude tutto il form si renderà necessario quando visualizzeremo un messaggio di successo per l'utente.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;La classe "error" è dedicata ai messaggi d'errore, mentre la classe "errorinput" è per i campi riempiti erroneamente. Serve qualcosa che salti all'occhio, e in questi casi il colore d'elezione è il rosso. Io ho usato qualcosa di questo tipo, passato attraverso il CSS della pagina:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: css;" name="code"&gt;.error{&lt;br /&gt; color: red;&lt;br /&gt; font-style: italic;&lt;br /&gt; float: left;&lt;br /&gt;}&lt;br /&gt;.errorinput{&lt;br /&gt; border: 1px solid red;&lt;br /&gt; background: #ffcbcb;&lt;br /&gt; color: #000;&lt;br /&gt; margin-bottom: .5em;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span class="small"&gt;La proprietà &lt;span class="inlinecode"&gt;float&lt;/span&gt; mi è necessaria nelle righe con due tag input, per non distruggere il layout del form.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;2. jQuery: form validation&lt;/span&gt;&lt;br /&gt;&lt;b&gt;2.0 validazione di base&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;La prima cosa da fare è nascondere i messaggi d'errore e prender possesso dell'evento click sul pulsante di invio del form, per poter eseguire le nostre validazioni, invece di inviare subito i dati:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="brush: js;"&gt;$(document).ready(function(){&lt;br /&gt;&lt;br /&gt;$('.error').hide();&lt;br /&gt;&lt;br /&gt;$("#submit").click(function() {&lt;br /&gt;&lt;br /&gt;// qui ci va tutta la validazione che si attiva quando l'utente intende inviare il messaggio&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;E fin qui siamo praticamente pari pari il tutorial di &lt;i&gt;Net Tuts+&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;La validazione che viene ora, prevede di controllare ciascun campo input, e se esso risulta vuoto, visualizzare il corrispondente messaggio d'errore.&lt;br /&gt;&lt;i&gt;Net Tuts+&lt;/i&gt; ha solo tre campi, e quindi scrive la funzione di validazione tre volte, una per ciascun campo: siccome io ho &lt;em&gt;un sacco&lt;/em&gt; di campi, ho velocizzato il tutto con un bel ciclo.&lt;br /&gt;&lt;br /&gt;Per prima cosa, si inizializza una variabile, &lt;span class="inlinecode"&gt;dataString&lt;/span&gt;, che andrà a contenere tutti i dati da passare allo script mail php, e sarà nella forma:&lt;br /&gt;&lt;pre name="code" class="brush: js;"&gt;dataString = [nome_campo_1=] + [valore_campo_1] + [&amp;nome_campo_2=] + [valore_campo_2] + ... + [&amp;nome_campo_n=] + [valore_campo_n];&lt;/pre&gt;&lt;!-- &lt;span class="small"&gt;Come da specifiche del metodo GET del php.&lt;/span&gt; --&gt;&lt;br /&gt;&lt;br /&gt;Poi, per analizzare ogni elemento &lt;span class="inlinecode"&gt;&amp;lt;input&amp;gt;&lt;/span&gt; iterando, si usa il metodo &lt;span class="inlinecode"&gt;&lt;a href="http://docs.jquery.com/Core/each#callback" title="documentazione ufficiale jQuery"&gt;each(callback)&lt;/a&gt;&lt;/span&gt;: per ogni tag &lt;span class="inlinecode"&gt;&amp;lt;input&amp;gt;&lt;/span&gt; (che non sia il pulsante d'invio o uno dei due radio all'inizio, e che non sia uno dei campi disabilitati, come vedremo al punto 4, sotto) e per la textarea lo script deve salvare due informazioni: il suo valore (col dato inserito dall'utente), che si ottiene con il metodo &lt;span class="inlinecode"&gt;val()&lt;/span&gt;, e il suo ID. Con quest'ultimo andiamo subito a creare l'ID del corrispondente messaggio d'errore, aggiungendo il suffisso "_err".&lt;br /&gt;&lt;br /&gt;Ecco lo script per queste prime operazioni:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="brush: js;"&gt;$("#submit").click(function() {&lt;br /&gt;&lt;br /&gt;$('.error').hide();&lt;br /&gt;&lt;br /&gt;var dataString = "";&lt;br /&gt;&lt;br /&gt;$('input[id!=submit][type!=radio], textarea, select').not('input[disabled]').each(function (i){&lt;br /&gt; var val = $(this).val();&lt;br /&gt; var id = $(this).attr("id");&lt;br /&gt; var err = id + "_err";&lt;br /&gt;});&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span class="small"&gt;Ho inserito l'istruzione che nasconde i messaggi d'errore anche qui per resettare la validazione ogni volta che si preme il pulsante d'invio.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ora, la validazione in sé: se il campo è vuoto (&lt;span class="inlinecode"&gt;val == ""&lt;/span&gt;) e il campo è obbligatorio (cioè detiene la classe &lt;span class="inlinecode"&gt;obb&lt;/span&gt;), è necessario fare due azioni:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Assegnare la classe d'errore "errorinput" (vista prima) al tag &lt;span class="inlinecode"&gt;&amp;lt;input&amp;gt;&lt;/span&gt; per colorarlo di rosso,&lt;/li&gt;&lt;li&gt;Visualizzare il corrispondente messaggio d'errore, tramite l'ID manipolato poc'anzi.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Se la validazione passa, si memorizza il dato inserito dall'utente accodandolo alla variabile &lt;span class="inlinecode"&gt;dataString&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Inserendo queste operazioni, il ciclo completo diventa come segue:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="brush: js;"&gt;$("#submit").click(function() {&lt;br /&gt;&lt;br /&gt;var dataString = "";&lt;br /&gt;&lt;br /&gt;$('input[id!=submit][type!=radio], textarea, select').not('input[disabled]').each(function (i){&lt;br /&gt; var val = $(this).val();&lt;br /&gt; var id = $(this).attr("id");&lt;br /&gt; var err = id + "_err";&lt;br /&gt;&lt;br /&gt;// notifica dell'errore per i campi obbligatori&lt;br /&gt; if ((val == "") &amp;&amp; ($(this).is('.obb'))) {&lt;br /&gt;  $(this).addClass('errorinput').focus();&lt;br /&gt;  $("label[id=" + err + "]").slideDown();&lt;br /&gt;     return true;&lt;br /&gt; } else {&lt;br /&gt;  $(this).removeClass('errorinput'); // rimozione cautelare della classe errore&lt;br /&gt;&lt;br /&gt;// memorizzazione dato valutato&lt;br /&gt;  if (i==0) {&lt;br /&gt;   dataString = id + '=' + val;&lt;br /&gt;  } else {  &lt;br /&gt;   dataString = dataString + '&amp;' + id + '=' + val;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;});&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Note su quanto inserito:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Sono necessarie due dichiarazioni per la variabile dataString, perché alla prima iterazione (&lt;span class="inlinecode"&gt;i==0&lt;/span&gt;) non si deve anteporre il simbolo '&amp;' al nome del dato che si memorizza.&lt;/li&gt;&lt;li&gt;Il messaggio d'errore, nel mio form, è individuale per ciascun campo. Se avessimo usato un unico tipo di messaggio per tutti i campi, il classico "questo campo è obbligatorio" (come fa Net Tuts+), si sarebbe potuto generarlo in questo punto dello script, risparmiando markup nel corpo della pagina.&lt;/li&gt;&lt;li&gt;Inserire un &lt;span class="inlinecode"&gt;return true&lt;/span&gt; in questo punto significa dire al calcolatore di proseguire con le altre iterazioni del ciclo, senza fermarsi qui (cosa che si sarebbe ottenuta dichiarando &lt;span class="inlinecode"&gt;return false&lt;/span&gt;): a livello pratico, questo vuol dire che tutti gli errori verranno visualizzati contemporaneamente (tutti i campi incompleti diventano rossi e si visualizzano i messaggi corrispondenti). Con &lt;span class="inlinecode"&gt;return false&lt;/span&gt; si evidenzia un errore alla volta, come nel caso del tutorial di Net Tuts+.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Quanto visto finora è sufficiente a validare un form con un qualsiasi numero di campi, riuscendo a distinguere tra valori obbligatori o meno.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;2.1 Radio buttons&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Adesso si deve implementare la funzione dei pulsanti "radio" che consentono di scegliere tra "privato" e "azienda".&lt;br /&gt;Il concetto è che l'uno esclude l'altro, e quindi se si riempie il campo di "privato" non si riempiono quelli di "azienda", e viceversa. Farlo capire al validatore è importante, perché sono tutti campi obbligatori!&lt;br /&gt;&lt;br /&gt;In questo caso lo script deve solo ricordare all'utente di effettuare la scelta, la validazione dei campi risultanti è già stata implementata sopra.&lt;br /&gt;&lt;br /&gt;Pertanto aggiungiamo un paio di righe all'inizio della funzione:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="brush: js;"&gt;$("#submit").click(function() {&lt;br /&gt;&lt;br /&gt;var dataString = "";&lt;br /&gt;&lt;br /&gt;if ( (! $('#privato').is(':checked')) &amp;&amp; (! $('#societa').is(':checked')) ) {&lt;br /&gt; $('.radioin').css('color' , 'red').append('&lt;span&gt;&amp;amp;nbsp;&amp;amp;larr;&lt;/span&gt;');&lt;br /&gt; $('ol li:first').after('&lt;span class="error" id="radioerror"&gt;scegli se rappresenti un privato o un\'azienda&lt;/span&gt;');&lt;br /&gt; $('#radioerror').hide().slideDown('normal');&lt;br /&gt; return false;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//segue ciclo di validazione come visto sopra&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Lo script non fa che controllare se nessuno dei radio è cliccato, allorché colora di rosso i titoli (e ci appende pure una freccia per meglio evidenziarli) e visualizza un messaggio.&lt;br /&gt;Il &lt;span class="inlinecode"&gt;return false&lt;/span&gt; fa sì che lo script si interrompa e nessun'altra validazione venga effettuata se l'utente prima non compie la sua scelta: i campi da validare infatti cambiano, come abbiamo detto.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large"&gt;3: Invio email&lt;/span&gt;&lt;br /&gt;&lt;b&gt;3.0 Preliminari&lt;/b&gt;&lt;br /&gt;La parte di invio dell'email tramite un file php esterno è esattamente uguale a quella esposta nel tutorial di Net Tuts+, che fa utilizzo del metodo &lt;span class="inlinecode"&gt;&lt;a href="http://docs.jquery.com/Ajax/jQuery.ajax#options"&gt;$.ajax&lt;/a&gt;&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Prima però di passare i dati al php, si deve inserire un'istruzione che blocchi lo script se esistono ancora errori nella compilazione del form:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="brush: js;"&gt;if ($('.error').is(':visible')) {&lt;br /&gt; return false;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Poi, in fase di sviluppo, è utilissimo il suggerimento di Net Tuts+ di inserire un alert che stampi il contenuto di &lt;span class="inlinecode"&gt;dataString&lt;/span&gt;, per controllare che siano stati memorizzati correttamente tutti i dati necessari:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="brush: js;"&gt;alert (dataString); return false;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span class="small"&gt;Questa riga verrà ovviamente commentata nella versione finale dello script!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3.1 Posting dei dati con jQuery&lt;/b&gt;&lt;br /&gt;Adesso possiamo finalmente vedere come passare i dati all'invio email e visualizzare un messaggio di "successo" per l'utente:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="brush: js;"&gt;$.ajax({&lt;br /&gt; type: "POST",  &lt;br /&gt; url: "email.php",  &lt;br /&gt; data: dataString,  &lt;br /&gt; success: function() {&lt;br /&gt;  $('#contact_form').html('&lt;div id="successo"&gt;&lt;/div&gt;');  &lt;br /&gt;  $('#successo').html('&lt;h4 style="margin-bottom: 0;"&gt;messaggio inoltrato correttamente&lt;/h4&gt;')&lt;br /&gt;  .append('&lt;p&gt;sarai contattato appena possibile.&lt;/p&gt;').hide().fadeIn('slow');&lt;br /&gt; }&lt;br /&gt;});&lt;br /&gt;&lt;br /&gt;return false;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;L'opzione &lt;span class="inlinecode"&gt;type&lt;/span&gt; corrisponde in questo caso all'attributo &lt;span class="inlinecode"&gt;method&lt;/span&gt; del tag &lt;span class="inlinecode"&gt;&amp;lt;form&amp;gt;&lt;/span&gt;, e viene settata a POST.&lt;br /&gt;L'indirizzo del file php è relativo alla pagina html dove viene eseguito lo script.&lt;br /&gt;&lt;br /&gt;L'opzione &lt;span class="inlinecode"&gt;success&lt;/span&gt; ci consente di scrivere una semplice funzione che genera un messaggio di "inoltro corretto", e si fa semplicemente svuotando il &lt;span class="inlinecode"&gt;&amp;lt;div&amp;gt;&lt;/span&gt; che racchiude il form, sostituendo quest'ultimo con un paio di righe: il metodo &lt;span class="inlinecode"&gt;&lt;a href="http://docs.jquery.com/Attributes/html#val" title="documentazione ufficiale jQuery"&gt;html(val)&lt;/a&gt;&lt;/span&gt; sostituisce tutto il contenuto dell'elemento selezionato con dell'HTML specificato. Nel nostro caso ci mettiamo un blocco che riempiamo con il messaggio scelto. L'ID assegnata al blocco ci consente di stilarlo con del CSS.&lt;br /&gt;&lt;br /&gt;Il &lt;span class="inlinecode"&gt;return false&lt;/span&gt; che chiude il nostro script di validazione serve per impedire al pulsante submit di eseguire la sua azione: tanto abbiamo già fatto tutto noi!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3.2 Script php&lt;/b&gt;&lt;br /&gt;Lo script php è davvero semplice:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="brush: php;"&gt;&amp;lt;?php&lt;br /&gt;&lt;br /&gt;if ($_POST['azienda']) {&lt;br /&gt; $body = "Tipologia: Azienda\n\nRagione sociale: ".$_POST['azienda']."\nReferente: ".$_POST['referente'];&lt;br /&gt;} else {&lt;br /&gt; $body = "Tipologia: privato\n\nNominativo: ".$_POST['nome'];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$body .= "\n\nIndirizzo: ".$_POST['indirizzo']."\n".$_POST['cap']." ".$_POST['citta']." (".$_POST['provincia'].")\n\nTelefono: ".$_POST['telefono']."\n\nArea d'interesse: ".$_POST['area']."\n\nMessaggio: ".$_POST['messaggio'];&lt;br /&gt;&lt;br /&gt;$header = "From: ".$_POST['email'];&lt;br /&gt;&lt;br /&gt;mail("indirizzo@email.dominio", "modulo contatti", $body, $header);&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;La condizione serve soltanto per formattare l'email in modo diverso a seconda che sia stato scelto "privato" oppure "azienda"; poi si aggiungono tutti gli altri campi, che non cambiano.&lt;br /&gt;&lt;br /&gt;Quello che è elencato in &lt;span class="inlinecode"&gt;body&lt;/span&gt; va a finire nel corpo dell'email, mentre lo &lt;span class="inlinecode"&gt;header&lt;/span&gt; ci consente di specificare l'indirizzo email dell'utente, che il client email userà ad esempio per "rispondere" al messaggio.&lt;br /&gt;&lt;br /&gt;Con la funzione &lt;span class="inlinecode"&gt;&lt;a href="http://it2.php.net/manual/en/function.mail.php" title="documentazione su php.net"&gt;mail&lt;/a&gt;&lt;/span&gt; si invia l'email all'indirizzo specificato. Il secondo parametro è il subject dell'email, mentre il terzo ed il quarto passano i dati arrangiati prima.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;4: Tocchi finali&lt;/span&gt;&lt;br /&gt;L'unica cosa indispensabile da fare ancora è disabilitare i campi cui l'utente rinuncia effettuando la scelta tra "privato" e "azienda", perché usiamo questo attributo per escluderli dalla validazione.&lt;br /&gt;E poi, visto che ci siamo, aggiungere qualche funzionalità in più a quei radio buttons non guasta.&lt;br /&gt;&lt;br /&gt;Poiché questo deve avvenire prima della validazione, queste istruzioni saranno inserite nello script prima dell'evento click sviluppato nei punti precedenti.&lt;br /&gt;&lt;br /&gt;L'evento ideale da intercettare è il cambiamento di stato dei pulsanti, e il metodo &lt;span class="inlinecode"&gt;&lt;a href="http://docs.jquery.com/Events/change#fn" title="documentazione ufficiale jQuery"&gt;change()&lt;/a&gt;&lt;/span&gt; è proprio quello che fa al caso nostro; vediamo ad esempio cosa succede quando l'utente clicca sul pulsante per scegliere la categoria "privato":&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="brush: js;"&gt;$('#societa').change(function () {&lt;br /&gt; $('#nome').removeClass('obb').removeClass('errorinput').attr('disabled' , 'disabled');&lt;br /&gt; $('label[for=nome] i').empty();&lt;br /&gt; $('label[for=nome]').css('color' , '#999');&lt;br /&gt; $('#azienda, #referente').addClass('obb').removeAttr("disabled");&lt;br /&gt; $('label[for=azienda] i, label[for=referente] i').html('*');&lt;br /&gt; $('label[for=azienda], label[for=referente]').css('color' , '#000'); &lt;br /&gt; $('.radioin').css('color' , '#000');&lt;br /&gt; $('.radioin span').remove();&lt;br /&gt; $('fieldset li:eq(0) .error, #radioerror').slideUp();&lt;br /&gt;})&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Le righe 2, 3 e 4 agiscono sui campi &lt;em&gt;cui si rinuncia&lt;/em&gt;: essi diventano facoltativi e disabilitati (non ci si può scrivere); per maggiore chiarezza cancello anche l'asterisco e rendo la scritta più "sbiadita" con del grigio, e tolgo eventuali errori di validazione.&lt;br /&gt;Le righe 4, 5 e 6 ripristinano lo stato obbligatorio dei campi prescelti (che potevano essere diventati facoltativi per un'altra scelta privato/azienda).&lt;br /&gt;Le righe 7, 8 e 9 infine resettano eventuali notifiche di errore da parte della validazione.&lt;br /&gt;In questo modo l'utente può cambiare idea quando vuole, e la validazione si adegua.&lt;br /&gt;&lt;br /&gt;La stessa funzione, invertendo i riferimenti, si ricopia per l'altro pulsante, e il gioco è fatto.&lt;br /&gt;&lt;br /&gt;Un extra interessante da inserire è la disabilitazione del pulsante d'invio mentre lo script sta processando i dati, così, nel tempo tra la pressione del pulsante e la visualizzazione del messaggio di successo, nessun utente particolarmente impaziente potrà inviare il form più di una volta.&lt;br /&gt;&lt;span class="small"&gt;Questo è proprio un voler essere perfezionisti, perché con script del genere il tempo di attesa è praticamente nullo! Confesso che questo me lo ha fatto venire in mente un commento al tutorial di Net Tuts+...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Basta disabilitare il pulsante prima della chiamata di &lt;span class="inlinecode"&gt;$.ajax()&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="brush: js;"&gt;$('#submit').attr('disabled' , 'disabled');&lt;/pre&gt;&lt;br /&gt;&amp;Egrave; bene però riabilitarlo se la pagina viene ricaricata, per consentire all'utente di inviare un nuovo messaggio: questo si fa inserendo l'istruzione come prima cosa nel codice jQuery: &lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="brush: js;"&gt;$(document).ready(function(){&lt;br /&gt;&lt;br /&gt;$('#submit').removeAttr("disabled");&lt;br /&gt;&lt;br /&gt;// e segue tutto il resto...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;5: script completo&lt;/span&gt;&lt;br /&gt;Ed ecco infine lo script completo, ottenuto mettendo insieme tutti i segmenti esaminati.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="brush: js;"&gt;$(document).ready(function(){&lt;br /&gt;&lt;br /&gt;/* form validation */&lt;br /&gt;&lt;br /&gt;$('#submit').removeAttr("disabled");&lt;br /&gt;$('.error').hide();&lt;br /&gt;&lt;br /&gt;$('#privato').change(function () {&lt;br /&gt; $('#azienda, #referente').removeClass('obb').removeClass('errorinput').attr('disabled' , 'disabled');&lt;br /&gt; $('label[for=azienda] i, label[for=referente] i').empty();&lt;br /&gt; $('label[for=azienda], label[for=referente]').css('color' , '#999');&lt;br /&gt; $('#nome').addClass('obb').removeAttr("disabled"); &lt;br /&gt; $('label[for=nome] i').html('*');&lt;br /&gt; $('label[for=nome]').css('color' , '#000');&lt;br /&gt; $('.radioin').css('color' , '#000');&lt;br /&gt; $('.radioin span').remove();&lt;br /&gt; $('fieldset li:eq(1) .error, #radioerror').slideUp();&lt;br /&gt;})&lt;br /&gt;$('#societa').change(function () {&lt;br /&gt; $('#nome').removeClass('obb').removeClass('errorinput').attr('disabled' , 'disabled');&lt;br /&gt; $('label[for=nome] i').empty();&lt;br /&gt; $('label[for=nome]').css('color' , '#999');&lt;br /&gt; $('#azienda, #referente').addClass('obb').removeAttr("disabled");&lt;br /&gt; $('label[for=azienda] i, label[for=referente] i').html('*');&lt;br /&gt; $('label[for=azienda], label[for=referente]').css('color' , '#000'); &lt;br /&gt; $('.radioin').css('color' , '#000');&lt;br /&gt; $('.radioin span').remove();&lt;br /&gt; $('fieldset li:eq(0) .error, #radioerror').slideUp();&lt;br /&gt;})&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;$("#submit").click(function() {&lt;br /&gt;&lt;br /&gt;$('.error').hide();&lt;br /&gt;&lt;br /&gt;var dataString = "";&lt;br /&gt;&lt;br /&gt;if ( (! $('#privato').is(':checked')) &amp;&amp; (! $('#societa').is(':checked')) ) {&lt;br /&gt; $('.radioin').css('color' , 'red').append('&lt;span&gt;&amp;amp;nbsp;&amp;amp;larr;&lt;/span&gt;');&lt;br /&gt; $('ol li:first').after('&lt;span class="error" id="radioerror"&gt;scegli se rappresenti un privato o un\'azienda&lt;/span&gt;');&lt;br /&gt; $('#radioerror').hide().slideDown('normal');&lt;br /&gt; return false;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$('input[id!=submit][type!=radio], textarea, select').not('input[disabled]').each(function (i){&lt;br /&gt; var val = $(this).val();&lt;br /&gt; var id = $(this).attr("id");&lt;br /&gt; var err = id + "_err";&lt;br /&gt; if ((val == "") &amp;&amp; ($(this).is('.obb'))) {&lt;br /&gt;  $(this).addClass('errorinput').focus();&lt;br /&gt;  $("label[id=" + err + "]").slideDown();&lt;br /&gt;     return true;&lt;br /&gt; } else {&lt;br /&gt;  $(this).removeClass('errorinput');&lt;br /&gt;  if (i==0) {&lt;br /&gt;   dataString = id + '=' + val;&lt;br /&gt;  } else {  &lt;br /&gt;   dataString = dataString + '&amp;' + id + '=' + val;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;});&lt;br /&gt;if ($('.error').is(':visible')) {&lt;br /&gt; return false;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//alert (dataString); return false;&lt;br /&gt;&lt;br /&gt;$('#submit').attr('disabled' , 'disabled');&lt;br /&gt;&lt;br /&gt;$.ajax({&lt;br /&gt; type: "POST",  &lt;br /&gt; url: "email.php",  &lt;br /&gt; data: dataString,  &lt;br /&gt; success: function() {&lt;br /&gt;  $('#contactform').html('&lt;div id="successo"&gt;&lt;/div&gt;');  &lt;br /&gt;  $('#successo').html('&lt;h3 style="margin-bottom: 0;"&gt;messaggio inoltrato correttamente&lt;/h3&gt;')&lt;br /&gt;  .append('&lt;p&gt;una risposta sar&amp;agrave; inviata prima possibile.&lt;/p&gt;')&lt;br /&gt;  .append('&lt;img src="images/contatti/bf.jpg" height="160" width="497" alt="" /&gt;')&lt;br /&gt;  .hide().fadeIn('slow');&lt;br /&gt; }&lt;br /&gt;});&lt;br /&gt;&lt;br /&gt;return false;&lt;br /&gt;&lt;br /&gt;});&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Ultima raccomandazione&lt;/b&gt;&lt;br /&gt;Utilizzare esclusivamente l'ultima versione di jQuery, perché ad esempio nella versione 1.3.2 c'è un bug con IE8 (e chi se non lui?) che interpreta alla rovescia il check sulla visibilità degli errori, rendendo lo script inutile.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Ulteriori sviluppi&lt;/b&gt;&lt;br /&gt;Per andare avanti da qui, si può passare alla validazione avanzata, ad esempio com'è implementata dal plugin Validation, che distingue campi numerici, email, url, ecc. e avverte l'utente quando i dati inseriti non sono conformi al formato atteso.&lt;br /&gt;Il bello di questo è che avviene mentre l'utente sta digitando, e non c'è bisogno di aspettare la pressione del pulsante d'invio.&lt;br /&gt;Questi sono ulteriori passi avanti nell'ottica del &lt;i&gt;web 2.0&lt;/i&gt;, ma una volta inquadrati i concetti di base di cui sopra, non è difficile crearsi un prodotto su misura per le proprie necessità.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2179030760266299422-8329261445433066660?l=myblackteapot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/8329261445433066660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/8329261445433066660'/><link rel='alternate' type='text/html' href='http://myblackteapot.blogspot.com/2009/12/jquery-custom-form-validation.html' title='jQuery: custom form validation'/><author><name>blacktealover</name><uri>http://www.blogger.com/profile/07009043319199847342</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_1pfelnO3RgA/S1A4EyIvp3I/AAAAAAAAAdk/djFPE4BjWxk/S220/dadacat.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_1pfelnO3RgA/SqV7RR4orLI/AAAAAAAAAT8/P_B1jMiq-nE/s72-c/BFformsnap.gif' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2179030760266299422.post-7371230533793330509</id><published>2009-11-30T23:30:00.008+01:00</published><updated>2009-12-01T09:06:35.903+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='poster'/><category scheme='http://www.blogger.com/atom/ns#' term='disegno'/><category scheme='http://www.blogger.com/atom/ns#' term='xiu zhen dao'/><category scheme='http://www.blogger.com/atom/ns#' term='graphic design'/><title type='text'>Minimal poster design</title><content type='html'>Ho cominciato a creare una serie di poster minimali, con l'intenzione di comunicare un solo concetto per volta, spogliandolo di ogni complessità decorativa o tecnica, e di ogni compiacimento estetico superfluo.&lt;br /&gt;&lt;br /&gt;I concetti che cerco di esprimere qui sono legati alla filosofia taoista, perché a loro ben si adatta, per la caratteristica "semplicità" quasi austera del ricercato ritorno alla natura primaria, un metodo di comunicazione più che altro non verbale e spoglio di orpelli.&lt;br /&gt;&lt;span class="small"&gt;Poi in realtà se andiamo a vedere le opere d'arte figuativa originali della Cina antica, esse sono particolarmente cariche di dettagli minuti e precisissimi, e sono tutt'altro che minimali, in tal senso. Ma la loro essenzialità non è quella che si intende oggi quando parliamo di "design".&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;La filosofia taoista cui mi ricollego qui è quella che studio seguendo il &lt;a href="http://www.xiuzhendao.it/"&gt;Metodo XiuZhenDao&lt;/a&gt;, per cui mi occupo, tra l'altro, della parte web.&lt;br /&gt;&lt;br /&gt;Più o meno negli stessi giorni in cui ho dato inizio a questa serie, ho scoperto &lt;a href="http://www.powertotheposter.org/"&gt;powertotheposter.org&lt;/a&gt; (dopo aver visto l'interessantissimo documentario &lt;a href="http://www.thecorporation.com/"&gt;The Corporation&lt;/a&gt;), e alcuni dei lavori che sono lì hanno alle spalle un concetto di design simile.&lt;br /&gt;&lt;br /&gt;Ad esempio, ho riadattato un &lt;acronym title="What Is America? di Justin Kemerling"&gt;poster ivi pubblicato&lt;/acronym&gt; per esprimere una delle frasi più famose del Tao Tê Ching:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p&gt;L'Uno generò il Due,&lt;br /&gt;il Due generò il Tre,&lt;br /&gt;il Tre generò le diecimila creature.&lt;br /&gt;&lt;span&gt;Tao Tê Ching, &lt;a href="http://www.liberliber.it/biblioteca/l/lao_tzu/tao_te_ching/html/47.htm" title="le trasformazioni del Tao"&gt;XLII&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;div class="separator" style="float: left; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_1pfelnO3RgA/SxPkKrm9ECI/AAAAAAAAAYE/Cn6s03Wbo8A/s1600/1tomany.png" imageanchor="1" rel="lightbox" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_1pfelnO3RgA/SxPkKrm9ECI/AAAAAAAAAYE/Cn6s03Wbo8A/s200/1tomany.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;Nel mio poster, l'Uno è il foglio bianco, nel quale si divide il due, Yin e Yang, che nella loro relazione determinano il Tre (rappresentata dalla linea ondulata che li separa e li unisce). Le "diecimila creature", cioè le essenze del mondo manifestato, sono le innumerevoli freccie, proiettate in ogni direzione.&lt;br /&gt;&lt;span class="small"&gt;Questo si ricollega ai vari miti cosmogonici, come Prajapati che viene fatto a pezzi e lanciato in ogni direzione dello spazio, e in questo caso alla leggenda cinese che vuole che gli uomini siano stati plasmati da una coppia di dei dalle sabbie di diverso colore del Fiume Giallo.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Questo poster è per forza di cose il primo della serie.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="float: right; text-align: center;"&gt;&lt;a rel="lightbox" href="http://4.bp.blogspot.com/_1pfelnO3RgA/SxRC61jqNTI/AAAAAAAAAYM/3wlygtxLhGU/s1600/armonia.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_1pfelnO3RgA/SxRC61jqNTI/AAAAAAAAAYM/3wlygtxLhGU/s200/armonia.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;Un altro, cerca di esprimere l'equilibrio di un uomo che si sia ricongiunto con l'armonia della natura, e raffigura un personaggio che sta seduto in tranquillità alla sommità di un monte, incurante delle nuvole minacciose al di sopra di lui e dell'oceano al di sotto, che minaccia di inghiottirlo.&lt;br /&gt;A testimonianza del suo equilibrio il fatto che l'uomo si trova nel centro, a metà tra cielo e terra (come vuole la Grande Triade), al suo posto naturale.&lt;br /&gt;&lt;br /&gt;Uno dei concetti più importanti del taoismo è quello di "vuoto": uno dei poster cerca di comunicare questo concetto sfruttando la famosa metafora della tazza, che finché è vuota può ricevere il tè. Mi rifaccio qui alla famosissima storia del Maestro zen e dell'uomo di scienza, che, non a caso, è anche la prima delle "101 storie zen":&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p&gt;Nan-in, un maestro giapponese dell'èra Meiji (1868-1912), ricevette la visita di un professore universitario che era andato da lui per interrogarlo sullo Zen.&lt;/p&gt;&lt;p&gt;Nan-in servì il tè. Colmò la tazza del suo ospite, e poi continuò a versare.&lt;/p&gt;&lt;p&gt;Il professore guardò traboccare il tè, poi non riuscì più a contenersi. «È ricolma. Non ce n'entra più!»&lt;/p&gt;&lt;p&gt;«Come questa tazza,» disse Nan-in, «tu sei ricolmo delle tue opinioni e congetture. Come posso spiegarti lo Zen, se prima non vuoti la tua tazza?»&lt;br /&gt;&lt;span&gt;101 Storie Zen, &lt;a href="http://www.101zenstories.com/index.php?story=1" title="versione originale della storia"&gt;1&lt;/a&gt;, ed. Piccola Biblioteca Adelphi&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;div class="separator" style="float: left; text-align: center;"&gt;&lt;a rel="lightbox" href="http://3.bp.blogspot.com/_1pfelnO3RgA/SxRGuQLLAOI/AAAAAAAAAYU/vvUNmsv5WdI/s1600/emptiness.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_1pfelnO3RgA/SxRGuQLLAOI/AAAAAAAAAYU/vvUNmsv5WdI/s200/emptiness.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;In questo poster ho ritratto la mia piccola teierina di terracotta (quella che uso per i tè pu-erh pressati). Tutti questi poster, a parte il primo, sono disegnati a mano, poi scannerizzati e quindi ricomposti e "inchiostrati" digitalmente.&lt;br /&gt;&lt;br /&gt;Per ricreare l'effetto impreciso dell'inchiostrazione manuale, in Photoshop, ho creato delle selezioni dei contorni dell'area da colorare e poi le ho modificate con il comando "refine edge" (alt+cmd+R) usando i massimi valori di smusso e di espansione del bordo.&lt;br /&gt;&lt;br /&gt;La selezione risultante viene traformata in un livello di riempimento a tinta unita, magari in blend mode "moltiplica" per un effetto di sovrapposizione degli strati d'inchiostro con i contorni del disegno.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox" title="Fiorite ovunque voi siate, non vi curate &amp;quot;dove&amp;quot;" href="http://3.bp.blogspot.com/_1pfelnO3RgA/SxRK3WAzE-I/AAAAAAAAAYk/q7PZcx-McTM/s1600/humility.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_1pfelnO3RgA/SxRK3WAzE-I/AAAAAAAAAYk/q7PZcx-McTM/s200/humility.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2179030760266299422-7371230533793330509?l=myblackteapot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/7371230533793330509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/7371230533793330509'/><link rel='alternate' type='text/html' href='http://myblackteapot.blogspot.com/2009/11/minimal-poster-design.html' title='Minimal poster design'/><author><name>blacktealover</name><uri>http://www.blogger.com/profile/07009043319199847342</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_1pfelnO3RgA/S1A4EyIvp3I/AAAAAAAAAdk/djFPE4BjWxk/S220/dadacat.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_1pfelnO3RgA/SxPkKrm9ECI/AAAAAAAAAYE/Cn6s03Wbo8A/s72-c/1tomany.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2179030760266299422.post-2592194181102212223</id><published>2009-10-22T00:10:00.001+02:00</published><updated>2010-01-11T14:12:42.005+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='post romantic empire'/><category scheme='http://www.blogger.com/atom/ns#' term='fotografia'/><category scheme='http://www.blogger.com/atom/ns#' term='musica'/><title type='text'>Post Romantic Empire Final Fest</title><content type='html'>Questo weekend, il 17 e il 18 Ottobre, ero a Roma in qualità di inviato speciale di &lt;a href="http://www.gothicnetwork.org/"&gt;gothicNetwork&lt;/a&gt; al &lt;b&gt;Final Fest&lt;/b&gt; del &lt;a href="http://www.postromantic.com/"&gt;Post Romantic Empire&lt;/a&gt;: una maratona di 30 ore consecutive di musica, dalle 18 di sabato a notte fonda di domenica, presso l'&lt;a href="http://www.initroma.com/"&gt;Init&lt;/a&gt;, locale a ridosso di un acquedotto romano e accanto alla ferrovia della stazione Tuscolana. Con tanto di pranzo (o &lt;i&gt;Dead Banquet&lt;/i&gt;, come dicevano loro) domenicale a base di leccornie frugali varie e alcuni squisiti pomodorini datterini.&lt;br /&gt;&lt;br /&gt;La musica presente spaziava &lt;b&gt;dal cantautoriale al dark contemporaneo&lt;/b&gt;, con una massiccia presenza di &lt;b&gt;elettronica sperimentale&lt;/b&gt;, e un sentore improvvisativo spontaneo e creativo che fa tanto evento indipendente, slegato dalle logiche monetarie più spinte.&lt;br /&gt;&lt;br /&gt;Comunque, presto ci sarà uno speciale di gothicNetwork a proposito del Fest, e tutto sarà più chiaro per tutti.&lt;br /&gt;&lt;br /&gt;Nel frattempo volevo condividere una diecina di foto fatte durante l'evento: un gioioso necrologio nero e rosa dall'&lt;b&gt;atmosfera amichevole e rilassata&lt;/b&gt; come poche volte mi è capitato di sentire in casi del genere, dove artisti e spettatori erano tutti insieme a godersi la festa.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox[pre]" href="http://1.bp.blogspot.com/_1pfelnO3RgA/St-E40WMcWI/AAAAAAAAAW0/vF8Imydz8Zw/s1600-h/pre01.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_1pfelnO3RgA/St-E40WMcWI/AAAAAAAAAW0/vF8Imydz8Zw/s320/pre01.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox[pre]" href="http://4.bp.blogspot.com/_1pfelnO3RgA/St-E_yw_z_I/AAAAAAAAAW8/zTniftjns5k/s1600-h/pre02.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_1pfelnO3RgA/St-E_yw_z_I/AAAAAAAAAW8/zTniftjns5k/s320/pre02.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox[pre]" href="http://4.bp.blogspot.com/_1pfelnO3RgA/St-FDVOJDxI/AAAAAAAAAXE/VQnuATBt9FU/s1600-h/pre03.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_1pfelnO3RgA/St-FDVOJDxI/AAAAAAAAAXE/VQnuATBt9FU/s320/pre03.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox[pre]" href="http://2.bp.blogspot.com/_1pfelnO3RgA/St-FKuguQQI/AAAAAAAAAXM/4NHKiLIJAfY/s1600-h/pre04.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" title="Baby Dee's boots"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_1pfelnO3RgA/St-FKuguQQI/AAAAAAAAAXM/4NHKiLIJAfY/s320/pre04.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox[pre]" href="http://4.bp.blogspot.com/_1pfelnO3RgA/St-FOFPq-_I/AAAAAAAAAXU/8Jdj0EQNX8Y/s1600-h/pre05.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" title="Matt Howden"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_1pfelnO3RgA/St-FOFPq-_I/AAAAAAAAAXU/8Jdj0EQNX8Y/s320/pre05.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox[pre]" href="http://3.bp.blogspot.com/_1pfelnO3RgA/St-FRBq9i6I/AAAAAAAAAXc/10y_BLUEFWc/s1600-h/pre06.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" title="Andrew Liles"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_1pfelnO3RgA/St-FRBq9i6I/AAAAAAAAAXc/10y_BLUEFWc/s320/pre06.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox[pre]" href="http://3.bp.blogspot.com/_1pfelnO3RgA/St-FVbDEvRI/AAAAAAAAAXk/2lncCfywx24/s1600-h/pre07.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" title="Fabrizio Modonese Palumbo"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_1pfelnO3RgA/St-FVbDEvRI/AAAAAAAAAXk/2lncCfywx24/s320/pre07.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox[pre]" href="http://2.bp.blogspot.com/_1pfelnO3RgA/St-FYIXEKXI/AAAAAAAAAXs/UG4R43fGITs/s1600-h/pre08.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" title="Lavinia Blackwall"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_1pfelnO3RgA/St-FYIXEKXI/AAAAAAAAAXs/UG4R43fGITs/s320/pre08.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox[pre]" href="http://3.bp.blogspot.com/_1pfelnO3RgA/St-Fa5yei2I/AAAAAAAAAX0/icQEXgUlrPA/s1600-h/pre09.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" title="Ernesto Tomasini"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_1pfelnO3RgA/St-Fa5yei2I/AAAAAAAAAX0/icQEXgUlrPA/s320/pre09.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox[pre]" href="http://3.bp.blogspot.com/_1pfelnO3RgA/St-Fd53i9BI/AAAAAAAAAX8/ax1FDEdW1sQ/s1600-h/pre10.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" title="David Tibet"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_1pfelnO3RgA/St-Fd53i9BI/AAAAAAAAAX8/ax1FDEdW1sQ/s320/pre10.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2179030760266299422-2592194181102212223?l=myblackteapot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/2592194181102212223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/2592194181102212223'/><link rel='alternate' type='text/html' href='http://myblackteapot.blogspot.com/2009/10/post-romantic-empire-final-fest.html' title='Post Romantic Empire Final Fest'/><author><name>blacktealover</name><uri>http://www.blogger.com/profile/07009043319199847342</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_1pfelnO3RgA/S1A4EyIvp3I/AAAAAAAAAdk/djFPE4BjWxk/S220/dadacat.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_1pfelnO3RgA/St-E40WMcWI/AAAAAAAAAW0/vF8Imydz8Zw/s72-c/pre01.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2179030760266299422.post-7413034467948726964</id><published>2009-10-09T10:43:00.007+02:00</published><updated>2009-10-09T11:13:49.037+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ilford'/><category scheme='http://www.blogger.com/atom/ns#' term='Holga'/><category scheme='http://www.blogger.com/atom/ns#' term='fotografia'/><category scheme='http://www.blogger.com/atom/ns#' term='viaggio'/><title type='text'>a Holga trip of sorts (I)</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox" href="http://1.bp.blogspot.com/_1pfelnO3RgA/Ss73BONcVdI/AAAAAAAAAVs/SgUp7Hzk3Nw/s1600-h/Holga604.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_1pfelnO3RgA/Ss73BONcVdI/AAAAAAAAAVs/SgUp7Hzk3Nw/s320/Holga604.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox" href="http://2.bp.blogspot.com/_1pfelnO3RgA/Ss73HPRBGuI/AAAAAAAAAV0/A2DewEByWgA/s1600-h/Holga603.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_1pfelnO3RgA/Ss73HPRBGuI/AAAAAAAAAV0/A2DewEByWgA/s320/Holga603.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox" href="http://4.bp.blogspot.com/_1pfelnO3RgA/Ss73LPP_WAI/AAAAAAAAAV8/BGiga9Q9SVI/s1600-h/Holga605.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_1pfelnO3RgA/Ss73LPP_WAI/AAAAAAAAAV8/BGiga9Q9SVI/s320/Holga605.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox" href="http://4.bp.blogspot.com/_1pfelnO3RgA/Ss73OsQpD3I/AAAAAAAAAWE/yDcacv0IZm0/s1600-h/Holga606.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_1pfelnO3RgA/Ss73OsQpD3I/AAAAAAAAAWE/yDcacv0IZm0/s320/Holga606.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox" href="http://1.bp.blogspot.com/_1pfelnO3RgA/Ss73R8bJbmI/AAAAAAAAAWM/GUXWqEMq4Mw/s1600-h/Holga607.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_1pfelnO3RgA/Ss73R8bJbmI/AAAAAAAAAWM/GUXWqEMq4Mw/s320/Holga607.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox" href="http://2.bp.blogspot.com/_1pfelnO3RgA/Ss73UhZrfgI/AAAAAAAAAWU/23a8ohvSKlY/s1600-h/Holga608.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_1pfelnO3RgA/Ss73UhZrfgI/AAAAAAAAAWU/23a8ohvSKlY/s320/Holga608.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox" href="http://2.bp.blogspot.com/_1pfelnO3RgA/Ss73XEp5IgI/AAAAAAAAAWc/_RdlHkWvR74/s1600-h/Holga609.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_1pfelnO3RgA/Ss73XEp5IgI/AAAAAAAAAWc/_RdlHkWvR74/s320/Holga609.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox" href="http://1.bp.blogspot.com/_1pfelnO3RgA/Ss73hPiYETI/AAAAAAAAAWk/jv3rhTKOfAQ/s1600-h/Holga610.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_1pfelnO3RgA/Ss73hPiYETI/AAAAAAAAAWk/jv3rhTKOfAQ/s320/Holga610.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox" href="http://1.bp.blogspot.com/_1pfelnO3RgA/Ss73kLZ43jI/AAAAAAAAAWs/VJzolnTibVI/s1600-h/Holga611.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_1pfelnO3RgA/Ss73kLZ43jI/AAAAAAAAAWs/VJzolnTibVI/s320/Holga611.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2179030760266299422-7413034467948726964?l=myblackteapot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/7413034467948726964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/7413034467948726964'/><link rel='alternate' type='text/html' href='http://myblackteapot.blogspot.com/2009/10/blog-post.html' title='a Holga trip of sorts (I)'/><author><name>blacktealover</name><uri>http://www.blogger.com/profile/07009043319199847342</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_1pfelnO3RgA/S1A4EyIvp3I/AAAAAAAAAdk/djFPE4BjWxk/S220/dadacat.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_1pfelnO3RgA/Ss73BONcVdI/AAAAAAAAAVs/SgUp7Hzk3Nw/s72-c/Holga604.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2179030760266299422.post-1464907500821891901</id><published>2009-10-07T10:09:00.023+02:00</published><updated>2009-10-10T20:48:10.994+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='soundcloud'/><category scheme='http://www.blogger.com/atom/ns#' term='chitarra'/><category scheme='http://www.blogger.com/atom/ns#' term='improvvisazione'/><category scheme='http://www.blogger.com/atom/ns#' term='musica'/><title type='text'>Asleep, struggling to awake</title><content type='html'>&lt;i&gt;analisi di un'improvvisazione quasi ragionata&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&amp;Egrave; successo un fatto strano. Ho pubblicato 4 brani su &lt;a href="http://soundcloud.com/blacktealover" title="il mio account su SoundCloud"&gt;SoundCloud&lt;/a&gt; nei mesi scorsi, giusto per provare il servizio e pubblicare qualcosa che secondo me era ingiustamente stato relegato all'oblio, e uno di questi è stato ascoltato ad oggi più di 500 volte, andando ben oltre ogni mia aspettativa, vista la mancanza di pubblicità di questo materiale.&lt;br /&gt;&lt;br /&gt;Ho deciso quindi di analizzare questo pezzo, giusto per mostrare com'è nato. Intanto eccolo:&lt;br /&gt;&lt;br /&gt;&lt;object height="81" width="100%"&gt;&lt;param name="movie" value="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fsoundcloud.com%2Fblacktealover%2Fasleep-struggling-to-awake"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed allowscriptaccess="always" height="81" src="http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fsoundcloud.com%2Fblacktealover%2Fasleep-struggling-to-awake" type="application/x-shockwave-flash" width="100%"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;span&gt;&lt;a href="http://soundcloud.com/blacktealover/asleep-struggling-to-awake"&gt;Asleep, struggling to awake&lt;/a&gt; di &lt;a href="http://soundcloud.com/blacktealover"&gt;blacktealover&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Questo brano faceva parte di quelli che creai per un progetto collaborativo ormai abbandonato di arte visiva + musica (per altre informazioni vedi il &lt;a href="http://myblackteapot.blogspot.com/2009/07/in-maze-of-memories.html" title="si chiamava 'in a maze of memories'"&gt;primo post&lt;/a&gt; di questo blog).&lt;br /&gt;&lt;br /&gt;Il tema del pezzo lo definisce il titolo &lt;i&gt;Asleep, struggling to awake&lt;/i&gt;: è il &lt;em&gt;sonno&lt;/em&gt;, il &lt;em&gt;torpore&lt;/em&gt; che non si riesce a spezzare e che tanta parte occupa delle nostre esistenze. Non mi riferisco soltanto, infatti, al sonno notturno, al riposo più o meno meritato (e spesso abusato) nel proprio letto o sul proprio divano; ma bensì a quella sensazione &amp;mdash; a volte subdola, a volte quasi drammatica &amp;mdash; di essere addormentati di fronte alla realtà, di vivere il momento presente in modo distante, oltre una coltre di nebbia.&lt;br /&gt;&lt;br /&gt;Moltissimi autori e tradizioni parlano di questo stato di mancanza di presenza a sé: &lt;acronym class="sleepquote" title="en passant, non ricordo dove... forse nel Lupo della Steppa?"&gt;Herman Hesse&lt;/acronym&gt;, &lt;acronym class="sleepquote" title="dovunque. ad esempio: &amp;quot;L'uomo non vede il mondo reale. Esso gli è nascosto dal muro della sua immaginazione. Egli vive nel sonno. Dorme&amp;quot;"&gt;Gurdjieff&lt;/acronym&gt;, il &lt;acronym class="sleepquote" title="&amp;quot;Attento fra i disattenti, ben sveglio fra gli addormentati, l'uomo accorto, giudizioso, procede distanziando gli altri come un corsiere il ronzino&amp;quot;"&gt;Buddha&lt;/acronym&gt;, i &lt;acronym class="sleepquote" title="&amp;quot;Mentre pregava il suo volto fu trasfigurato, e la sua veste divenne candida e trasparente. Intanto Pietro e i suoi compagni erano presi dal sonno.&amp;quot;"&gt;Vangeli&lt;/acronym&gt;... in ogni epoca vi sono stati uomini che si sono accorti di questo stato e che hanno cercato di superarlo.&lt;br /&gt;&lt;br /&gt;Il pezzo non vuole arrivare assolutamente a queste altezze psicologiche, filosofiche e spirituali! &amp;Egrave; stato creato in un'oretta seguendo un impulso sovra-razionale (come tutte le esperienze creative reali), che solo a posteriori ho potuto ricondurre a queste coordinate concettuali, in base alle sensazioni provate durante la creazione del brano e al suo successivo riascolto.&lt;br /&gt;&lt;br /&gt;Il pezzo è davvero semplice: solo due linee di chitarra elettrica, di cui una "di contorno". La prima linea, la più importante, si basa su un semplice giro iniziale a nota singola sulla scala di La- Lidio (quarto grado di Mi-). L'effetto di delay stereofonico è stato aggiunto per conferire il senso di straniamento e alienazione, ed è (più o meno) in tempo con la musica.&lt;br /&gt;&lt;br /&gt;Tutta la prima parte del pezzo si basa su una semplice figura ritmica cadenzata, per dar spazio al delay e per coltivare la sensazione di torpore, quasi paralizzante, di muoversi in una nebbia densa. La musica non progredisce, né va verso una qualsiasi risoluzione. Le sequenze degli accordi, molto semplici, sono cicliche e possono essere ripetute indefinitamente.&lt;br /&gt;Questo è l'aspetto della ripetizione banale e noiosa di questa modalità dell'esistenza: tutto si ripete come in un dramma teatrale che ogni volta ricomincia daccapo.&lt;br /&gt;L'unico modo per spezzare questa piatta continuità è una risoluzione che cerchi di romperne la ciclicità &amp;mdash; e questo è ciò che avviene al minuto 1:23.&lt;br /&gt;&lt;br /&gt;Passando all'accordo di Mi- (dominante di La-) in prima posizione, il tentativo di rompere il muro del sonno è rappresentato da degli accenti, colpi vigorosi e ripetuti sulle corde della chitarra, inflitti con molta forza (un &lt;i&gt;fortissimo&lt;/i&gt;, in terminologia classica ...ho letteralmente "picchiato" la chitarra e le corde qui!).&lt;br /&gt;&lt;br /&gt;La risoluzione e la disperazione del tentativo si rafforzano grazie al fatto che l'accordo viene cambiato solo dopo due battute, risolvendo in Do maggiore che, avendo soltanto una nota di differenza rispetto al Mi- (il Si che passa a Do salendo di un solo semitono) mi consente di mantenere la stessa intensità espressiva ed estetica ma al contempo di sfruttare il passaggio melodico al VI grado, sempre di grande effetto.&lt;br /&gt;&lt;br /&gt;Tutta questa breve sezione dovrebbe essere davvero intensa, e forte da togliere il fiato, perché questi momenti si vivono proprio così.&lt;br /&gt;&lt;br /&gt;La cadenza lenta degli accenti sottolinea la difficoltà del tentativo, e la grande fatica che comporta. Gli accordi che seguono infatti, sono sempre forti, ma molto più radi, dovuti alla stanchezza e alla disillusione accumulate.&lt;br /&gt;&lt;br /&gt;Questa, alla fine, fa sì che tutto ritorni come prima: il progressivo e malinconico ritorno al tema iniziale che comincia al minuto 2:12 simboleggia proprio questo progressivo riabbandonarsi al sonno.&lt;br /&gt;Quando ci si riaddormenta poi, c'è una breve pausa e subito riprende il tema del "sonno" iniziale, che porta il brano ad una conclusione.&lt;br /&gt;&lt;br /&gt;La seconda linea di chitarra è stata improvvisata sulla prima, e consta quasi esclusivamente di una nota di Mi (particolarmente il Mi del XII tasto sulla prima corda) suonata con un tempo di metronomo differente da quello della linea principale. Nella sezione del 2:12 suono le terze degli accordi (la nota che determina la natura "maggiore" o "minore" di un accordo) per poter giocare sull'emotività del maggiore/minore.&lt;br /&gt;&lt;br /&gt;Ambedue le linee sono improvvisate e sono state registrate in unico take (mi pare il secondo), con una chitarra elettrica collegata direttamente alla scheda sonora.&lt;br /&gt;Gli effetti sono stati aggiunti postumi: più che altro uno stereo-delay e un po' di riverbero.&lt;br /&gt;&lt;br /&gt;Purtroppo, a causa della natura improvvisata e della velocità con cui è stato creato, non ho mai scritto lo spartito di questo piccolo pezzettino.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2179030760266299422-1464907500821891901?l=myblackteapot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/1464907500821891901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/1464907500821891901'/><link rel='alternate' type='text/html' href='http://myblackteapot.blogspot.com/2009/10/asleep-struggling-to-awake.html' title='Asleep, struggling to awake'/><author><name>blacktealover</name><uri>http://www.blogger.com/profile/07009043319199847342</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_1pfelnO3RgA/S1A4EyIvp3I/AAAAAAAAAdk/djFPE4BjWxk/S220/dadacat.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-2179030760266299422.post-5304988572283703344</id><published>2009-10-06T11:38:00.011+02:00</published><updated>2010-01-11T14:13:13.056+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fancybox'/><category scheme='http://www.blogger.com/atom/ns#' term='web design'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='tooltip'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>jQuery: integrazione Fancybox &amp; Tooltip</title><content type='html'>Questo post tratta l'integrazione di due ottimi plugin jQuery:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://fancybox.net/" title="Fancybox homepage"&gt;Fancybox&lt;/a&gt; – un clone di Lightbox dall'interfaccia più accattivante e con alcune funzioni ben implementate,&lt;/li&gt;&lt;li&gt;&lt;a href="http://bassistance.de/jquery-plugins/jquery-plugin-tooltip/" title="Tooltip è un plugin di Bassistance"&gt;Tooltip&lt;/a&gt; – un plugin molto versatile per customizzare i tooltip che normalmente si hanno in base all'attributo &lt;span class="inlinecode"&gt;title&lt;/span&gt; dei tag &lt;span class="inlinecode"&gt;&amp;lt;a&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;Questi due plugin si suppongono quindi già installati e configurati.&lt;br /&gt;&lt;br /&gt;Lo scopo di questo &lt;i&gt;hack&lt;/i&gt; è quello di avere una galleria Fancybox con i &lt;b&gt;titoli delle immagini che possono ospitare link e che mostrano un "tooltip"&lt;/b&gt;: è quello che ho fatto per la galleria di &lt;i&gt;graphic design&lt;/i&gt; su &lt;a href="http://www.nada-design.net/"&gt;Nâda-Design&lt;/a&gt;, in cui alcune immagini hanno un link verso la relativa pagina dell'account &lt;a href="http://blacktealover.deviantart.com/"&gt;deviantArt&lt;/a&gt;.&lt;br /&gt;Per far capire all'utente che il link punta verso una pagina deviantART ho inserito un tooltip che mostra il logo della community.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox" href="http://4.bp.blogspot.com/_1pfelnO3RgA/Ssr74KcPGUI/AAAAAAAAAVE/yS2UpXVWi7c/s1600-h/fancytooltip.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" title="per provare una versione funzionante vai su www.nada-design.net"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_1pfelnO3RgA/Ssr74KcPGUI/AAAAAAAAAVE/yS2UpXVWi7c/s400/fancytooltip.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Il fine è quello di poter inserire dell'HTML nel titolo mostrato da Fancybox, e potervi così collegare un link e un tooltip, e nel contempo far anche validare la pagina come XHTML Strict!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;1. Inserimento del link nel titolo dell'immagine&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Il titolo dell'immagine nella galleria Fancybox è estratto dall'attributo &lt;span class="inlinecode"&gt;title&lt;/span&gt; del link che lancia l'immagine stessa: poiché &lt;span class="inlinecode"&gt;title&lt;/span&gt; supporta come valore una stringa di testo generica, è possibile, in linea di principio, inserirvi dell'HTML (avendo ovviamente cura di sostituire tutti i caratteri speciali con le relative entità), ad esempio:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: xml;" name="code"&gt;&amp;lt;a href="#img1.jpg" rel="[fancybox]" title="&amp;amp;lt;a href=&amp;amp;quot;link_esterno&amp;amp;quot; target=&amp;amp;quot;_blank&amp;amp;quot; title=&amp;amp;quot;titolo&amp;amp;quot;&amp;amp;gt;testo_link&amp;amp;lt;/a&amp;amp;gt;&amp;amp;quot;&amp;amp;gt;&amp;amp;lt;img /&amp;amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;In pratica si è inserito un altro tag &lt;span class="inlinecode"&gt;&amp;lt;a&amp;gt;&lt;/span&gt; completo all'interno dell'attributo &lt;span class="inlinecode"&gt;title&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Il problema di questo procedimento è che il browser interpreterà comunque l'attributo, e visualizzerà il suo tooltip predefinito con tutti i dati che vi abbiamo inserito... con un effetto particolarmente disdicevole!&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox" href="http://4.bp.blogspot.com/_1pfelnO3RgA/Ssr-W808x1I/AAAAAAAAAVM/xdy7accWqBI/s1600-h/fancytooltip1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;" title="il problema di avere codice HTML nell'attributo title"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_1pfelnO3RgA/Ssr-W808x1I/AAAAAAAAAVM/xdy7accWqBI/s400/fancytooltip1.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Ma poiché questa è una funzione non disattivabile esternamente, non ci rimane altro da fare che abbandonare l'attributo &lt;span class="inlinecode"&gt;title&lt;/span&gt;, e sceglierne un altro: e questa decisione, ovviamente, ci complicherà enormemente la vita...&lt;br /&gt;&lt;br /&gt;Non possiamo scegliere l'attributo &lt;span class="inlinecode"&gt;id&lt;/span&gt;, perché supporta solo valori univoci senza caratteri speciali. Scegliamo dunque &lt;b&gt;l'attributo &lt;span class="inlinecode"&gt;rev&lt;/span&gt;&lt;/b&gt;: esso, da definizione &lt;a href="http://www.w3schools.com/TAGS/att_a_rev.asp" title="pagina delle specifiche dell'attributo rev su W3Schools.com"&gt;W3Schools&lt;/a&gt;, "specifica la relazione esistente tra il documento linkato e il documento corrente".&lt;br /&gt;&lt;br /&gt;Ma le caratteristiche che ce lo fanno scegliere sono essenzialmente due:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Può contenere una stringa di testo,&lt;/li&gt;&lt;li&gt;Non è interpretato da nessuno dei browser principali.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Questo vuol dire che possiamo inserirci tutto quello che vogliamo senza che i browser se ne accorgano, e mantenendo la validazione della pagina.&lt;br /&gt;&lt;span class="small"&gt;Comunque anche se il documento valida, non si può certo parlare di contenuto aderente agli standard!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Quindi alla fine un mio tag &lt;span class="inlinecode"&gt;&amp;lt;a&amp;gt;&lt;/span&gt; avrà quest'aspetto:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: xml;" name="code"&gt;&amp;lt;a rel="[fancybox]" rev="&amp;amp;lt;a href=&amp;amp;quot;http://blacktealover.deviantart.com/art/Reincarnation-118622078&amp;amp;quot; target=&amp;amp;quot;_blank&amp;amp;quot; title=&amp;amp;quot;.&amp;amp;quot;&amp;amp;gt;reincarnation&amp;amp;lt;/a&amp;amp;gt;" title="reincarnation" href="images/graphics/large/reincarnation.gif"&amp;gt;&amp;lt;img src="images/graphics/reincarnation.gif" alt="reincarnation" width="160" height="80"/&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span class="small"&gt;Il &lt;span class="inlinecode"&gt;title&lt;/span&gt; del link "aggiuntivo" deve essere non vuoto se vogliamo che il tooltip venga mostrato.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;2. Hack di Fancybox&lt;/span&gt;&lt;br /&gt;A questo punto si deve andare a modificare il codice di Fancybox per fargli prendere l'attributo &lt;span class="inlinecode"&gt;rev&lt;/span&gt; invece del &lt;span class="inlinecode"&gt;title&lt;/span&gt; come fa normalmente.&lt;br /&gt;&lt;br /&gt;Le modifiche sono semplicissime: ci interessa soltanto la sezione di codice dalla linea 60 alla 97 del file &lt;span class="inlinecode"&gt;jquery.fancybox-1.2.1.js&lt;/span&gt;; in particolare andiamo a sostituire la riga 63:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js;" name="code"&gt;var item = {href: elem.href, title: elem.title};&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;con il seguente codice:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js;" name="code"&gt;if ($(elem).attr("rev")){&lt;br /&gt; var item = {href: elem.href, title: elem.rev};&lt;br /&gt;} else {&lt;br /&gt; var item = {href: elem.href, title: elem.title};&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;e la linea che &lt;em&gt;originariamente&lt;/em&gt; era la 78&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js;" name="code"&gt;item = {href: subGroup[i].href, title: subGroup[i].title};&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;con questo:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js;" name="code"&gt;if ($(subGroup[i]).attr("rev")){&lt;br /&gt; item = {href: subGroup[i].href, title: subGroup[i].rev};&lt;br /&gt;} else {&lt;br /&gt; item = {href: subGroup[i].href, title: subGroup[i].title};&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span class="small"&gt;Le due sezioni di codice sono rispettivamente per un'immagine singola e per un gruppo d'immagini.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ho inserito il check sull'esistenza dell'attributo &lt;span class="inlinecode"&gt;rev&lt;/span&gt; perché così nel caso si decida di non inserire nulla di aggiuntivo nel titolo dell'immagine, Fancybox si comporta come di consueto, andando a pescare il contenuto del &lt;span class="inlinecode"&gt;title&lt;/span&gt;. In questo modo non ci bruciamo la terra dietro le spalle.&lt;br /&gt;&lt;br /&gt;Affinché il link funzioni è necessario disabilitare l'opzione &lt;span class="inlinecode"&gt;hideOnContentClick&lt;/span&gt; (che si trova nella lista delle funzioni, in fondo al file dello script) settandola su &lt;span class="inlinecode"&gt;false&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Adesso, per completare questa prima parte dedicata a Fancybox, basta andare a stilare il nostro link, con del CSS.&lt;br /&gt;Il selettore che ci interessa per andare a colpire il link nel titolo dell'immagine è &lt;span class="inlinecode"&gt;#fancy_title&lt;/span&gt;; ad esempio:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: css;" name="code"&gt;#fancy_title a{&lt;br /&gt; color: #f9c587;&lt;br /&gt; text-decoration: none;&lt;br /&gt;}&lt;br /&gt;#fancy_title a:hover{&lt;br /&gt; color: #fad5a7;&lt;br /&gt; text-decoration: underline;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;3. Inserimento del tooltip&lt;/span&gt;&lt;br /&gt;Per richiamare un tooltip sul link appena inserito, il modo migliore è usare la &lt;b&gt;funzione di callback&lt;/b&gt; di Fancybox.&lt;br /&gt;&lt;br /&gt;In fondo al file di Fancybox, &lt;span class="inlinecode"&gt;jquery.fancybox-1.2.1.js&lt;/span&gt;, andiamo ad inserire la funzione che genererà il tooltip, e che chiameremo semplicemente "fancyboxCallback".&lt;br /&gt;Andiamo a dichiararla nell'opzione di callback:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js;" name="code"&gt;callbackOnShow : tooltipCallback,&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;e poi, subito sotto, la definiamo:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js; highlight: [8,9,10,11,12,13,14,15]" name="code"&gt;function tooltipCallback(){&lt;br /&gt;  $('#fancy_title a').tooltip({&lt;br /&gt;   track: true,&lt;br /&gt;   delay: 0,&lt;br /&gt;   fade: 50,&lt;br /&gt;   showURL: false,&lt;br /&gt;   fixPNG: true,&lt;br /&gt;   extraClass: "datip",&lt;br /&gt;   bodyHandler: function() {&lt;br /&gt;    return $("&lt;img/&gt;").attr({&lt;br /&gt;     src: "balloon_da.png",&lt;br /&gt;     width: "30",&lt;br /&gt;     height: "33"&lt;br /&gt;    });&lt;br /&gt;   },&lt;br /&gt;   top: -40,&lt;br /&gt;   left: 0&lt;br /&gt;  });&lt;br /&gt; };&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;La riga 2 definisce l'elemento su cui creiamo questo tooltip; degli attributi è importante la &lt;span class="inlinecode"&gt;extraClass&lt;/span&gt;, che useremo dopo per assegnare delle proprietà fondamentali, e la funzione passata tramite &lt;span class="inlinecode"&gt;bodyHandler&lt;/span&gt;. &amp;Egrave con questo parametro che si può iniettare nel tooltip dell'HTML qualsiasi: in questo caso si riempie il blocco con una immagine.&lt;br /&gt;&lt;br /&gt;Nel mio caso, infatti, non voglio che il tooltip visualizzi il testo del &lt;span class="inlinecode"&gt;title&lt;/span&gt; del mio link, ma un'unica immagine (sempre la stessa per questa galleria) che rappresenta il logo di deviantART. Negli attributi che passo al tag &lt;span class="inlinecode"&gt;&amp;lt;img /&amp;gt;&lt;/span&gt; c'è l'immagine precedentemente creata (+ le sue dimensioni).&lt;br /&gt;&lt;br /&gt;Per finire, andiamo a sviluppare la classe dedicata, &lt;span class="inlinecode"&gt;datip&lt;/span&gt;: essa si inserisce nel file &lt;span class="inlinecode"&gt;jquery.tooltip.css&lt;/span&gt; e nel mio caso è:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: css;" name="code"&gt;#tooltip.datip{&lt;br /&gt; background: 0;&lt;br /&gt; width: 30px; height: 33px;&lt;br /&gt; padding: 0;&lt;br /&gt;}&lt;br /&gt;#tooltip.datip img{&lt;br /&gt; position: absolute;&lt;br /&gt; top: 0; left: 0;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;La prima parte del codice CSS elimina l'eventuale sfondo presente del tooltip generico della pagina e setta le dimensioni esatte dell'immagine che verrà inserita nel blocco.&lt;br /&gt;La seconda parte riguarda il contenuto del tooltip, che in questo caso è un'immagine, e serve per ottenere un posizionamento perfetto.&lt;br /&gt;&lt;br /&gt;&amp;Egrave; ovvio, data la versatilità di Tooltip e il modo generico in cui abbiamo modificato Fancybox, che in linea di principio è possibile sbizzarrirsi inserendo nel titolo dell'immagine dell'HTML vario e mostrare tooltip con di tutto di più; ad esempio una didascalia estesa con molto testo e/o immagini, o altro.&lt;br /&gt;&lt;br /&gt;Come al solito, il limite sono la fantasia e l'estro di ciascuno.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2179030760266299422-5304988572283703344?l=myblackteapot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/5304988572283703344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/5304988572283703344'/><link rel='alternate' type='text/html' href='http://myblackteapot.blogspot.com/2009/10/jquery-integrazione-fancybox-tooltip.html' title='jQuery: integrazione Fancybox &amp; Tooltip'/><author><name>blacktealover</name><uri>http://www.blogger.com/profile/07009043319199847342</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_1pfelnO3RgA/S1A4EyIvp3I/AAAAAAAAAdk/djFPE4BjWxk/S220/dadacat.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_1pfelnO3RgA/Ssr74KcPGUI/AAAAAAAAAVE/yS2UpXVWi7c/s72-c/fancytooltip.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2179030760266299422.post-3695268439749293035</id><published>2009-10-01T15:42:00.010+02:00</published><updated>2009-10-06T23:01:05.134+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fotografia'/><category scheme='http://www.blogger.com/atom/ns#' term='viaggio'/><category scheme='http://www.blogger.com/atom/ns#' term='poladroid'/><title type='text'>a traveller's guide in seven steps</title><content type='html'>&lt;div style="margin: 0pt auto; text-align: center;"&gt;&lt;span style="font-size: large;"&gt;&lt;sup&gt;1&lt;/sup&gt;Aim beyond&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox" title="1 - Aim beyond" href="http://1.bp.blogspot.com/_1pfelnO3RgA/SsSci5w3_9I/AAAAAAAAAUE/WOow0VkCIwc/s1600-h/aim-beyond.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_1pfelnO3RgA/SsSci5w3_9I/AAAAAAAAAUE/WOow0VkCIwc/s320/aim-beyond.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;i&gt;Niente è mai troppo distante. Se miri alle stelle forse raggiungi solo un lampione, ma almeno ti stacchi dal suolo. Non ci sono distanze che non meritino d'esser percorse.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;sup&gt;2&lt;/sup&gt;Always flow spontaneously&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox" title="2 - Always flow spontaneously" href="http://1.bp.blogspot.com/_1pfelnO3RgA/SsSwM-IHipI/AAAAAAAAAUM/FSaVw7MpB4U/s1600-h/always-flow-spontaneously.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_1pfelnO3RgA/SsSwM-IHipI/AAAAAAAAAUM/FSaVw7MpB4U/s320/always-flow-spontaneously.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-size: large;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;i&gt;Come fa l'acqua, segui la via della natura. Non pensare troppo, le occasioni non stanno ad aspettare.&lt;/i&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p style="text-align: left;"&gt;L'acqua non è mai inoperosa, né di giorno né di notte. [...] Se le si oppone una diga, si ferma; se le si apre una chiusa, scorre. Si adatta a qualsiasi recipiente, sia esso rotondo, quadrato, o d'altra forma.&lt;br /&gt;&lt;span&gt;Ko Chang Sheng, commento al cap. VIII del Tao Te Ching&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;sup&gt;3&lt;/sup&gt;Follow the signs in the stars&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox" title="3 - Follow the signs in the stars" href="http://1.bp.blogspot.com/_1pfelnO3RgA/SsSwTwXL1iI/AAAAAAAAAUU/lJGwbJOcC5U/s1600-h/follow-the-signs-in-the-stars.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_1pfelnO3RgA/SsSwTwXL1iI/AAAAAAAAAUU/lJGwbJOcC5U/s320/follow-the-signs-in-the-stars.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-size: large;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;i&gt;Lascia che il caso ti sorprenda: non forzare il tuo punto di vista, cambia i tuoi piani. Stupisciti senza timore.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;sup&gt;4&lt;/sup&gt;Find solace in movement&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox" title="4 - Find solace in movement" href="http://4.bp.blogspot.com/_1pfelnO3RgA/SsSw5fKoqGI/AAAAAAAAAUc/23U5PCdc8r4/s1600-h/find-solace-in-movement.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_1pfelnO3RgA/SsSw5fKoqGI/AAAAAAAAAUc/23U5PCdc8r4/s320/find-solace-in-movement.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-size: large;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;i&gt;Fa' che il movimento sia il tuo riposo e il tuo conforto. Giosci del mondo mentre scorre di fronte al tuo volto.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;sup&gt;5&lt;/sup&gt;Look for crossroads and singularities&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox" title="5 - Look for crossroads and singularities" href="http://4.bp.blogspot.com/_1pfelnO3RgA/SsSw8d1MhMI/AAAAAAAAAUk/RS4OjFCWVPI/s1600-h/look-for-crossroads-and-singularity.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_1pfelnO3RgA/SsSw8d1MhMI/AAAAAAAAAUk/RS4OjFCWVPI/s320/look-for-crossroads-and-singularity.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-size: large;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;i&gt;L'inusuale è perenne fonte di delizia per il viaggiatore. Stimola l'imprevisto cercando le circostanze adatte, e rafforza la tua capacità di adattamento.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;sup&gt;6&lt;/sup&gt;Wear out your shoes&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox" title="6 - Wear out your shoes" href="http://4.bp.blogspot.com/_1pfelnO3RgA/SsSw_2se0ZI/AAAAAAAAAUs/bbxl_4-V2Fs/s1600-h/wear-out-your-shoes.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_1pfelnO3RgA/SsSw_2se0ZI/AAAAAAAAAUs/bbxl_4-V2Fs/s320/wear-out-your-shoes.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-size: large;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;i&gt;Non rimanere mai fermo, non smetter mai di vagare. La polvere sulle calzature è la medaglia del girovago.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;sup&gt;7&lt;/sup&gt;Never give up&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a rel="lightbox" title="7 - Never give up" href="http://4.bp.blogspot.com/_1pfelnO3RgA/SsSxC6-aWuI/AAAAAAAAAU0/nnlRy_ROQOM/s1600-h/never-give-up.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_1pfelnO3RgA/SsSxC6-aWuI/AAAAAAAAAU0/nnlRy_ROQOM/s320/never-give-up.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-size: large;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;i&gt;Dietro ogni angolo c'è una delizia sconosciuta. La stanchezza non ci interessa: se non stiamo camminando, stiamo dormendo; in ambedue i casi, che sia sogno o realtà, stiamo viaggiando. O al limite stiamo bevendo una birra.&lt;/i&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Queste foto sono tutte state scattate durante un unico viaggio. I concetti che esse accompagnano, invece, si applicano sempre, in ogni momento e in ogni luogo: sono principi che ispirano molte delle mie azioni. Devo per forza tirar fuori la stravecchia metafora dell'esistenza come viaggio? Che noia, sempre a filosofeggiare sulle stesse idee trite e ritrite... questi piccoli suggerimenti vogliono solo essere qualcosa di concreto, che faccia godere al meglio il viaggio in sé, senza perder troppo tempo a pensarci su. Che le occasioni tornano anche, ma dopo un sacco di tempo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2179030760266299422-3695268439749293035?l=myblackteapot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/3695268439749293035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/3695268439749293035'/><link rel='alternate' type='text/html' href='http://myblackteapot.blogspot.com/2009/10/travellers-guide-in-seven-steps.html' title='a traveller&apos;s guide in seven steps'/><author><name>blacktealover</name><uri>http://www.blogger.com/profile/07009043319199847342</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_1pfelnO3RgA/S1A4EyIvp3I/AAAAAAAAAdk/djFPE4BjWxk/S220/dadacat.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_1pfelnO3RgA/SsSci5w3_9I/AAAAAAAAAUE/WOow0VkCIwc/s72-c/aim-beyond.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2179030760266299422.post-2431487102839659767</id><published>2009-08-30T17:21:00.060+02:00</published><updated>2010-01-11T14:13:13.057+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web design'/><category scheme='http://www.blogger.com/atom/ns#' term='Nada-Design'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>jQuery: sistema di finestre stile windows</title><content type='html'>Per l'ultima versione di &lt;a href="http://www.nada-design.net/" title="design, web, grafica, fotografia"&gt;Nâda-Design&lt;/a&gt;, ho voluto mantenere l'impostazione ad una sola pagina, ma stavolta rendendola davvero succinta.&lt;br /&gt;C'è un &lt;acronym title="l'ho scansionato personalmente dal mio libro 'il Museo Ermetico' della Taschen"&gt;Ouroboros&lt;/acronym&gt; (che in questo caso, tralasciando parzialmente il suo simbolismo tradizionale, sta a raffigurare la &lt;i&gt;creatività&lt;/i&gt;, che sempre rinasce e si rinnova) da cui si originano i tre link principali dedicati alle tre aree creative principali di cui mi occupo, più un link informativo. Stavolta non si divaga!&lt;br /&gt;&lt;br /&gt;I link non aprono altre pagine, bensì delle finestre sullo stile di quelle dei sistemi operativi, che si utilizzano per esplorare il contenuto del proprio computer.&lt;br /&gt;&lt;br /&gt;Le caratteristiche da riprodurre sul web di tali finestre sono:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;b&gt;Trascinabilità&lt;/b&gt;, tramite il classico click+drag del mouse;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Sovrapponibilità&lt;/b&gt;, con possibilità di portare "di fronte" una finestra che sta sotto ad un'altra, cliccandola;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Ridimensionabilità&lt;/b&gt;, trascinandone uno dei bordi o uno degli angoli.&lt;/li&gt;&lt;/ol&gt;Per il resto, le finestre sono dei blocchi di contenuto &lt;span class="inlinecode"&gt;&amp;lt;div&amp;gt;&lt;/span&gt; posizionati in modo assoluto, ciascuno col proprio &lt;span class="inlinecode"&gt;z-index&lt;/span&gt;, e inizialmente nascosti (&lt;span class="inlinecode"&gt;display: none&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.nada-design.net/" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_1pfelnO3RgA/SpqIIh7mgdI/AAAAAAAAAT0/UBmDUghkpec/s320/nada.png" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;/div&gt;Vediamo nel dettaglio il markup XHTML, il CSS e il codice jQuery necessari per realizzare questo progetto.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;1. Codice XHTML&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ciascuna finestra avrà una struttura di questo tipo:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: xml;" name="code"&gt;&amp;lt;div class="window" id="finestra1"&amp;gt;&lt;br /&gt; &amp;lt;span class="close"&amp;gt;X&amp;lt;/span&amp;gt;&lt;br /&gt; &amp;lt;h2&amp;gt;titolo&amp;lt;/h2&amp;gt;&lt;br /&gt; &amp;lt;p&amp;gt;contenuto&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;La classe &lt;span class="inlinecode"&gt;window&lt;/span&gt; serve per specificare gli attributi essenziali comuni ad ogni finestra, mentre l'ID univoca per le caratteristiche variabili, come sfondo e posizione iniziale.&lt;br /&gt;Lo span "close" non è altro che il pulsante di chiusura della finestra, che realizzeremo interamente con jQuery.&lt;br /&gt;&lt;br /&gt;Per lanciare le finestre abbiamo bisogno di un elenco di link, ad esempio:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: xml;" name="code"&gt;&amp;lt;ul&amp;gt;&lt;br /&gt; &amp;lt;li&amp;gt;&amp;lt;a id="a1" class="btn" href="#"&amp;gt;finestra1&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt; &amp;lt;li&amp;gt;&amp;lt;a id="a2" class="btn" href="#"&amp;gt;finestra2&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt; &amp;lt;li&amp;gt;&amp;lt;a id="a3" class="btn" href="#"&amp;gt;finestra3&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Vediamo adesso quali sono le caratteristiche fondamentali da attribuire ai blocchi finestra tramite CSS.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;2. Proprietà CSS&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Quello che segue è il CSS che ho utilizzato sul mio sito:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: css;" name="code"&gt;.window{&lt;br /&gt; z-index: 10;&lt;br /&gt; position: absolute;&lt;br /&gt; width: 500px;&lt;br /&gt; height: 400px;&lt;br /&gt; padding: 0;&lt;br /&gt; color: #000;&lt;br /&gt; opacity: .95;&lt;br /&gt; filter: alpha(opacity=95);&lt;br /&gt; border: 3px solid #555;&lt;br /&gt; -moz-border-radius-topright: 12px;&lt;br /&gt; -webkit-border-top-right-radius: 12px;&lt;br /&gt; border-top-right-radius: 12px;&lt;br /&gt; -moz-border-radius-bottomleft: 12px;&lt;br /&gt; -webkit-border-bottom-left-radius: 12px;&lt;br /&gt; border-bottom-left-radius: 12px;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Di tutto questo, le uniche proprietà realmente fondamentali sono &lt;span class="inlinecode"&gt;position: absolute&lt;/span&gt; e &lt;span class="inlinecode"&gt;z-index&lt;/span&gt;. Quest'ultima ci risolverà il problema dell'&lt;i&gt;impilazione&lt;/i&gt; delle finestre.&lt;br /&gt;È interessante sfruttare delle capacità avanzate come la trasparenza e i bordi stondati, che migliorano molto l'estetica con un minimo sforzo.&lt;br /&gt;&lt;span class="small"&gt;La trasparenza è bene sia minima per non confondere i contenuti con lo sfondo. Riguardo ai bordi stondati, ne accenno in &lt;a href="http://myblackteapot.blogspot.com/2009/08/cssjquery-checkout-progress-bar-per.html"&gt;quest'altro post&lt;/a&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ciascuna finestra, poi, avrà delle caratteristiche personali, come la posizione iniziale all'apertura, lo sfondo, le dimensioni, e quant'altro; ad esempio:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: css;" name="code"&gt;#finestra1{&lt;br /&gt; background: #fff url(images/bg1.gif) bottom right no-repeat;&lt;br /&gt; width: 400px;&lt;br /&gt; top: 120px;&lt;br /&gt; left: 40px;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Per avere una disposizione elegante delle finestre l'una rispetto alle altre, ho scalato di 40px per volta la posizione di ciascuna finestra:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: css;" name="code"&gt;#finestra1{&lt;br /&gt; top: 120px;&lt;br /&gt; left: 40px;&lt;br /&gt;}&lt;br /&gt;#finestra2{&lt;br /&gt; top: 80px;&lt;br /&gt; left: 80px;&lt;br /&gt;}&lt;br /&gt;#finestra3{&lt;br /&gt; top: 40px;&lt;br /&gt; left: 120px;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Sono andato "verso l'alto" per ridurre rischi di comparsa di scrollbar con dimensioni ridotte della finestra del browser.&lt;br /&gt;&lt;br /&gt;Per il pulsante di chiusura delle finestre, ho usato l'immagine di una "X", con questo CSS:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: css;" name="code"&gt;.close{&lt;br /&gt; cursor: pointer;&lt;br /&gt; position: absolute;&lt;br /&gt; top: 3px; right: 3px;&lt;br /&gt; background: transparent url(images/close.png) center center no-repeat;&lt;br /&gt; height: 25px; width: 25px;&lt;br /&gt; display: block;&lt;br /&gt; text-indent: -999em;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I titoli delle finestre sono stati tutti trattati con una tecnica qualsiasi di &lt;a href="http://www.mezzoblue.com/tests/revised-image-replacement/" title="varie tecniche di image replacemente @ Mezzoblue"&gt;&lt;i&gt;image replacement&lt;/i&gt;&lt;/a&gt; per renderli conformi allo stile generale della pagina.&lt;br /&gt;&lt;br /&gt;Adesso si deve stendere il codice jQuery per consentire l'azionamento delle finestre, e conferirgli tutte le caratteristiche d'interattività desiderate.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;3. Codice jQuery&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3.0 Preliminari: nascondere e pulsante chiusura&lt;/b&gt;&lt;br /&gt;A monte di tutto, si devono nascondere le finestre:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js;" name="code"&gt;$('.window').hide();&lt;/pre&gt;&lt;br /&gt;Poi, diamo funzionalità al pulsante di chiusura:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js;" name="code"&gt;$('.close').click(&lt;br /&gt; function(){&lt;br /&gt;  $(this).parent('.window').hide('normal');&lt;br /&gt; }&lt;br /&gt;);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;3.1 Attivazione delle finestre e funzione "on top"&lt;/b&gt;&lt;br /&gt;L'idea è questa: cliccando su un link si apre la finestra corrispondente, ma se essa è già visibile, viene chiusa (i link sono degli switch, in sostanza).&lt;br /&gt;Poiché in seguito renderemo le finestre trascinabili, la loro posizione finale potrà essere differente da quella iniziale, ma io voglio che esse si aprano sempre nello stesso punto deciso sopra tramite CSS.&lt;br /&gt;Inoltre, l'ultima finestra attivata deve passare in cima a tutte le altre.&lt;br /&gt;&lt;br /&gt;La prima cosa da fare è capire quale finestra vuole attivare l'utente, e salvarne l'ID in una variabile per identificare la finestra "attiva".&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js;" name="code"&gt;/* window popups launch */&lt;br /&gt;$('.btn').click(function(){&lt;br /&gt; var active = '#finestr' + $(this).attr("id");&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Ogni volta che si clicca su un link, nella variabile active si va a memorizzare l'ID della finestra corrispondente, con tanto di "#", perché utilizzeremo subito questa variabile a fini di selezione.&lt;br /&gt;&lt;span class="small"&gt;Ad esempio, cliccando sul secondo link (ID = a2) avremo: &lt;span class="inlinecode" style="font-style: normal;"&gt;#finestr + a2 = #finestra2&lt;/span&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Adesso, controlliamo se la finestra è già visibile. Se lo è, la nascondiamo, e finiamo lì. Altrimenti ci sono due cose da fare prima di mostrarla:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Resettare la sua posizione a quella iniziale;&lt;/li&gt;&lt;li&gt;Attribuirgli uno &lt;span class="inlinecode"&gt;z-index&lt;/span&gt; maggiore di tutte le altre finestre per farla andare "on top".&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Ecco come si fa:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js;" name="code"&gt;/* window popups launch */&lt;br /&gt;$('.btn').click(function(){&lt;br /&gt; var active = '#finestr' + $(this).attr("id");&lt;br /&gt;&lt;br /&gt;if($(active).is(':visible')){&lt;br /&gt; $(active).hide('normal');&lt;br /&gt; } else {&lt;br /&gt; switch(active){&lt;br /&gt;  case '#finestra1':&lt;br /&gt;  $(active).css({&lt;br /&gt;   'top' : '120px',&lt;br /&gt;   'left' : '40px'&lt;br /&gt;  });&lt;br /&gt;  break;&lt;br /&gt;  &lt;br /&gt;  case '#finestra2':&lt;br /&gt;  $(active).css({&lt;br /&gt;   'top' : '80px',&lt;br /&gt;   'left' : '80px'&lt;br /&gt;  });&lt;br /&gt;  break;&lt;br /&gt;  &lt;br /&gt;  case '#finestra3':&lt;br /&gt;  $(active).css({&lt;br /&gt;   'top' : '40px',&lt;br /&gt;   'left' : '120px'&lt;br /&gt;  });&lt;br /&gt;  break;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; $('.window').not(active).css('z-index', '10');&lt;br /&gt; $(active).css('z-index', '100').show('normal');&lt;br /&gt;}&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Il ciclo &lt;span class="inlinecode"&gt;switch - case&lt;/span&gt; serve per assegnare istruzioni diverse a seconda della finestra, ed è qui che avviene il reset alle condizioni iniziali (che possono anche coinvolgere più proprietà oltre alla posizione).&lt;br /&gt;&lt;br /&gt;Le ultime due istruzioni servono per mandare in cima la finestra cliccata e visualizzarla.&lt;br /&gt;Si attribuisce lo &lt;span class="inlinecode"&gt;z-index&lt;/span&gt; di default a tutte le finestre che non siano quella cliccata, poi si dà indice massimo a quella attiva e infine la si visualizza.&lt;br /&gt;&lt;br /&gt;Per mandare in cima una finestra già visibile che sia sotto ad altre, basta scambiare i valori di &lt;span class="inlinecode"&gt;z-index&lt;/span&gt; tra le finestre alla pressione del pulsante del mouse:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js;" name="code"&gt;/* on top windows */&lt;br /&gt;$('.window').mousedown(&lt;br /&gt; function() {&lt;br /&gt;  $(this).css('z-index', '100');&lt;br /&gt;  $('.window').not(this).css('z-index', '10');&lt;br /&gt; }&lt;br /&gt;);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span class="small"&gt;L'evento è bene che sia &lt;span class="inlinecode" style="font-style: normal;"&gt;&lt;a href="http://docs.jquery.com/Events/mousedown#fn" title="documentazione ufficiale jQuery"&gt;mousedown&lt;/a&gt;&lt;/span&gt; (esatto, senza l'"on"!) perché ci tornerà utile in congiunzione con l'effetto di trascinabilità che implementeremo subito.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3.2 Trascinabilità&lt;/b&gt;&lt;br /&gt;Qui siamo fortunati, perché la trascinabilità è un effetto già presente nella libreria &lt;a href="http://jqueryui.com/" title="homepage progetto jQuery User Interface"&gt;jQuery UI&lt;/a&gt;: basta aggiungere due file nello &lt;span class="inlinecode"&gt;&amp;lt;head&amp;gt;&lt;/span&gt; della pagina web:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: xml;" name="code"&gt;&amp;lt;script src="http://jqueryui.com/latest/ui/ui.core.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script src="http://jqueryui.com/latest/ui/ui.draggable.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Poi, per rendere le finestre trascinabili, è sufficiente questa dichiarazione:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js;" name="code"&gt;$('.window').draggable();&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;3.3 Ridimensionabilità&lt;/b&gt;&lt;br /&gt;Io non ho implementato la ridimensionabilità sul mio sito, perché nel mio caso superflua e necessitante un altro approccio di design. Però anche per questa proprietà il passo è breve: basta allegare i file necessari, e dichiarare le finestre "resizable".&lt;br /&gt;&lt;br /&gt;I file da aggiungere in questo caso sono:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: xml;" name="code"&gt;&amp;lt;link type="text/css" href="http://jqueryui.com/latest/themes/base/ui.all.css" rel="stylesheet" /&amp;gt;&lt;br /&gt;&amp;lt;script src="http://jqueryui.com/latest/ui/ui.core.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt; &amp;lt;!-- già visto sopra --&amp;gt;&lt;br /&gt;&amp;lt;script src="http://jqueryui.com/latest/ui/ui.resizable.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;A questo punto, conviene combinare tre istruzioni in una, e dichiarare subito all'inizio dello script:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js;" name="code"&gt;$('.window').draggable().resizable().hide();&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Adesso si potranno trascinare i bordi delle finestre per ridimensionarle, e comparirà (nell'angolo in basso a destra) una piccola icona il cui trascinamento ridimensionerà la finestra lungo i due assi X e Y contemporaneamente - come una qualsiasi finestra da sistema operativo.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;4. Script completo&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js;" name="code"&gt;$(document).ready(function(){&lt;br /&gt;&lt;br /&gt;$('.window').draggable().resizable().hide();&lt;br /&gt;&lt;br /&gt;/* close button */&lt;br /&gt;$('.close').click(&lt;br /&gt; function(){&lt;br /&gt;  $(this).parent('.window').hide('normal');&lt;br /&gt; }&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;/* window popups launch */&lt;br /&gt;$('.btn').click(function(){&lt;br /&gt;&lt;br /&gt; var active = '#finestr' + $(this).attr("id");&lt;br /&gt; &lt;br /&gt; if($(active).is(':visible')){&lt;br /&gt;  $(active).hide('normal');&lt;br /&gt; } else {&lt;br /&gt;  switch(active){&lt;br /&gt;   case '#finestra1':&lt;br /&gt;   $(active).css({&lt;br /&gt;    'top' : '120px',&lt;br /&gt;    'left' : '40px'&lt;br /&gt;   });&lt;br /&gt;   break;&lt;br /&gt;   &lt;br /&gt;   case '#finestra2':&lt;br /&gt;   $(active).css({&lt;br /&gt;    'top' : '80px',&lt;br /&gt;    'left' : '80px'&lt;br /&gt;   });&lt;br /&gt;   break;&lt;br /&gt;   &lt;br /&gt;   case '#finestra3':&lt;br /&gt;   $(active).css({&lt;br /&gt;    'top' : '40px',&lt;br /&gt;    'left' : '120px'&lt;br /&gt;   });&lt;br /&gt;   break;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  $('.window').not(active).css('z-index', '10');&lt;br /&gt;  $(active).css('z-index', '100').show('normal');&lt;br /&gt; &lt;br /&gt; }&lt;br /&gt; &lt;br /&gt;});&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/* on top windows */&lt;br /&gt;$('.window').mousedown(&lt;br /&gt; function() {&lt;br /&gt;  $(this).css('z-index', '100');&lt;br /&gt;  $('.window').not(this).css('z-index', '10');&lt;br /&gt; } &lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;Nota sull'impilabilità&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;Il semplice metodo proposto per portare "on top" una finestra ha il pregio dell'estrema concisione: due brevissime istruzioni e siamo a posto qualunque sia il numero delle finestre.&lt;br /&gt;&lt;br /&gt;Però questa semplicità tralascia un dettaglio: l'ordine delle finestre in secondo piano. Esso infatti non rimane inalterato, ma si ripristina a quello di default a cascata del codice HTML: in sostanza, tra le finestre in secondo piano, l'ultima in ordine di inserimento nel codice della pagina sarà quella che starà sopra a tutte, direttamente sotto a quella "on top".&lt;br /&gt;Ciò accade perché attribuiamo a tutte le finestre in secondo piano lo stesso &lt;span class="inlinecode"&gt;z-index&lt;/span&gt;, a parità del quale vige la regola dell'ordine nel codice.&lt;br /&gt;&lt;br /&gt;La soluzione è concettualmente semplice: determinare di volta in volta qual è la finestra con &lt;span class="inlinecode"&gt;z-index&lt;/span&gt; più elevato ed attribuire a quella da mandare "on top" uno &lt;span class="inlinecode"&gt;z-index&lt;/span&gt; maggiorato di una unità, lasciando tutti gli altri inalterati.&lt;br /&gt;Questo però richiede un po' più di scripting, perché si deve iterare tra gli attributi delle finestre ed eseguire le necessarie operazioni.&lt;br /&gt;&lt;br /&gt;Magari lo farò nei prossimi giorni...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2179030760266299422-2431487102839659767?l=myblackteapot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/2431487102839659767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/2431487102839659767'/><link rel='alternate' type='text/html' href='http://myblackteapot.blogspot.com/2009/08/jquery-sistema-di-finestre-stile.html' title='jQuery: sistema di finestre stile windows'/><author><name>blacktealover</name><uri>http://www.blogger.com/profile/07009043319199847342</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_1pfelnO3RgA/S1A4EyIvp3I/AAAAAAAAAdk/djFPE4BjWxk/S220/dadacat.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_1pfelnO3RgA/SpqIIh7mgdI/AAAAAAAAAT0/UBmDUghkpec/s72-c/nada.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2179030760266299422.post-2912591563462466145</id><published>2009-08-28T23:35:00.029+02:00</published><updated>2010-01-11T14:13:13.058+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web design'/><category scheme='http://www.blogger.com/atom/ns#' term='Gothic Network'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='Drupal'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>jQuery + Drupal: search box a scomparsa</title><content type='html'>Quello che mi accingo ad esporre è &lt;i&gt;un po' un hack&lt;/i&gt;, ma è molto carino e comodo.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.drupal.org/" title="homepage progetto Drupal"&gt;Drupal&lt;/a&gt; è il mio &lt;acronym title="Content Management System"&gt;CMS&lt;/acronym&gt; preferito ad oggi, anche se il rapporto è una specie di &lt;i&gt;amore/odio&lt;/i&gt;. Ad esempio, essendo la maschera di ricerca un &lt;i&gt;blocco&lt;/i&gt;, di default non se ne può avere più di una istanza per pagina.&lt;br /&gt;&lt;br /&gt;Ora, generalmente questo limite non è un grosso problema. Però io per &lt;a href="http://www.gothicnetwork.org/" title="portale di recensioni approfondite"&gt;Gothic Network&lt;/a&gt; volevo una voce nel menu principale che consentisse di ricercare senza dover accedere ad un'altra pagina, e che non alterasse il layout esistente. Un search box era già presente più in giù nella pagina, scrollando, nella colonna di destra.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.gothicnetwork.org" target="_blank"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 78px;" src="http://1.bp.blogspot.com/_1pfelnO3RgA/SphoInU8DGI/AAAAAAAAATs/y1xEpSxFmFk/s400/GNsearch.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5375160652471733346" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Una soluzione potrebbe essere stata utilizzare la funzione &lt;span class="inlinecode"&gt;module_invoke&lt;/span&gt; per inserire "a mano" il blocco del modulo search nella pagina, inserendo un minimo di php nei template.&lt;br /&gt;&lt;span class="small"&gt;Vedi ad esempio &lt;a href="http://urlgreyhot.com/personal/weblog/drupal_tip_1_inserting_blocks_content_pages_blog_entries_etc" title="Inserting blocks into content @ URLGREYHOT"&gt;questo post&lt;/a&gt; (oppure &lt;a href="http://community.contractwebdevelopment.com/drupal-block-in-node" title="How do I place a Drupal block's contents into a node? @ CWD Community"&gt;questo&lt;/a&gt;) per capire come usare questo semplice metodo.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Io ho voluto usare il mio amato jQuery, visto che avevo anche in mente di rendere la maschera "a scomparsa", cioè che comparisse soltanto all'attivazione di un link.&lt;br /&gt;&lt;br /&gt;L'idea quindi è questa: avere una voce dei &lt;i&gt;primary links&lt;/i&gt; chiamata "ricerca" che funge da interruttore per la comparsa/scomparsa un search box (piuttosto che puntare alla pagina "search").&lt;br /&gt;&lt;br /&gt;Affinché quanto esporrò funzioni, è necessario che il blocco "Search" sia stato attivato da qualche parte nella pagina.&lt;br /&gt;&lt;br /&gt;Questo script è stato sviluppato su un'installazione di Drupal versione 5.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;1. Creazione del link&lt;/span&gt;&lt;br /&gt;Aggiungere una voce ai &lt;span style="font-style: italic;"&gt;primary links&lt;/span&gt; è semplice, si va in &lt;span style="font-style: italic;"&gt;admin/build/menu&lt;/span&gt; e si sceglie "aggiungi voce": io ho chiamato la mia "ricerca", facendo caso che fosse l'ultima della lista (attribuendogli cioè un "peso" elevato). Importante ricordarsi di specificare come indirizzo di link "search", affinché in caso di non abilitazione del JavaScript, l'utente sia correttamente ridirezionato alla pagina di ricerca avanzata. Questo si chiama &lt;a href="http://en.wikipedia.org/wiki/Fault-tolerant_system" title="è un principio di web design, ma deriva da una teoria affatto generale; vedi Wikipedia"&gt;"degrading gracefully"&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;2. Studio del codice HTML&lt;/span&gt;&lt;br /&gt;Prima di costruirci il nostro searchbox con jQuery, diamo un'occhiata alla struttura della maschera di ricerca creata dal modulo "Search" di Drupal.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="brush: xml;"&gt;&amp;lt;div class="block block-search" id="block-search-0"&amp;gt;&lt;br /&gt; &amp;lt;h2 class="title"&amp;gt;Ricerca&amp;lt;/h2&amp;gt;&lt;br /&gt; &amp;lt;div class="content"&amp;gt;&lt;br /&gt; &amp;lt;form action="/"  accept-charset="UTF-8" method="post" id="search-block-form"&amp;gt;&lt;br /&gt;  &amp;lt;div&amp;gt;&amp;lt;div class="container-inline"&amp;gt;&lt;br /&gt;   &amp;lt;div class="form-item" id="edit-search-block-form-keys-wrapper"&amp;gt;&lt;br /&gt;    &amp;lt;input type="text" maxlength="128" name="search_block_form_keys" id="edit-search-block-form-keys"  size="15" value="" title="Inserisci i termini da cercare." class="form-text" /&amp;gt;&lt;br /&gt;   &amp;lt;/div&amp;gt;&lt;br /&gt;   &amp;lt;input type="submit" name="op" id="edit-submit" value="Cerca"  class="form-submit" /&amp;gt;&lt;br /&gt;   &amp;lt;input type="hidden" name="form_token" id="edit-search-block-form-form-token" value="ae2b5565789a051ff48bb23e0eac3970"  /&amp;gt;&lt;br /&gt;   &amp;lt;input type="hidden" name="form_id" id="edit-search-block-form" value="search_block_form"  /&amp;gt;&lt;br /&gt;  &amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt; &amp;lt;/form&amp;gt;&lt;br /&gt; &amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;La maschera di ricerca Drupal è ovviamente un form, con una serie di tag &lt;span class="inlinecode"&gt;&amp;lt;input&amp;gt;&lt;/span&gt; che dovremo riprodurre &lt;b&gt;totalmente e fedelmente&lt;/b&gt; nel nostro script, se vogliamo che funzioni. Particolare attenzione deve essere posta al tag &lt;i&gt;form_token&lt;/i&gt; (riga 11), che contiene una ID univoca dalla quale dipende il buon funzionamento della ricerca: il dato vincolante è il valore dell'attributo "value".&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;3. Codice jQuery&lt;/span&gt;&lt;br /&gt;Ecco quello che faremo: appenderemo al link creato al punto 1 una nuova maschera di ricerca e la nasconderemo, poi creeremo uno switch che la attivi a piacimento.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3.1 Individuazione del &lt;span class="inlinecode"&gt;form_token&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;Prima cosa da fare: ottenere il &lt;span class="inlinecode"&gt;value&lt;/span&gt; del &lt;span class="inlinecode"&gt;form_token&lt;/span&gt; semplicemente andandolo a pescare con il metodo &lt;a href="http://docs.jquery.com/Attributes/attr#name" title="documentazione ufficiale jQuery"&gt;&lt;span class="inlinecode"&gt;attr(name)&lt;/span&gt;&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="brush: js;"&gt;$(document).ready(function(){&lt;br /&gt;/* get form token */&lt;br /&gt;var token = $('#sidebar_right #edit-search-block-form-form-token').attr("value");&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Questo valore va preso ogni volta che si carica la pagina, e per questo è la prima istruzione che diamo con lo script.&lt;br /&gt;&lt;br /&gt;È importante specificare la sezione della pagina che contiene il searchbox &lt;span style="text-decoration: underline;"&gt;originale&lt;/span&gt;, e non quello creato da jQuery. Nel mio caso esso si trova nella colonna di destra.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3.2 Creazione del searchbox&lt;/b&gt;&lt;br /&gt;Si individua il link "ricerca" (in questo caso l'ultimo della &lt;i&gt;navlist&lt;/i&gt; dei &lt;i&gt;primary links&lt;/i&gt;) e vi si crea di seguito un elemento &lt;span class="inlinecode"&gt;&amp;lt;form&amp;gt;&lt;/span&gt; dalla ID #jquerysearch, all'interno del quale inseriamo tutti gli elementi input visti sopra:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="brush: js;"&gt;$(document).ready(function(){&lt;br /&gt;/* build search box */&lt;br /&gt;$("#navlist li:last a").after("&amp;lt;form action='#' method='post' id='jquerysearch'&amp;gt;");&lt;br /&gt;$("#jquerysearch").append("&amp;lt;input type='text' maxlength='128' size='15' name='search_block_form_keys' id='edit-search-block-form-keys' value='' title='Inserisci i termini da cercare.' /&amp;gt;")&lt;br /&gt;.append("&amp;lt;input type='submit' name='op' id='edit-submit' value='Cerca' /&amp;gt;")&lt;br /&gt;.append("&amp;lt;input type='hidden' name='form_token' id='edit-search-block-form-form-token' value='' /&amp;gt;")&lt;br /&gt;.append("&amp;lt;input type='hidden' name='form_id' id='edit-search-block-form' value='search_block_form' /&amp;gt;")&lt;br /&gt;.append("&amp;lt;br /&amp;gt;&amp;lt;a id='advancedsearch' href='http://www.gothicnetwork.org/search'&amp;gt;ricerca avanzata&amp;lt;/a&amp;gt;")&lt;br /&gt;.append("&amp;lt;/form&amp;gt;")&lt;br /&gt;.hide();&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Per prima cosa, tramite il metodo &lt;a href="http://docs.jquery.com/Manipulation/after#content" title="documentazione ufficiale jQuery"&gt;&lt;span class="inlinecode"&gt;after(content)&lt;/span&gt;&lt;/a&gt; si crea l'elemento &lt;span class="inlinecode"&gt;&amp;lt;form&amp;gt;&lt;/span&gt; e gli si attribuisce il suo ID: &lt;span class="inlinecode"&gt;after()&lt;/span&gt; crea l'elemento &lt;i&gt;di seguito&lt;/i&gt; a quello selezionato, mentre &lt;a href="http://docs.jquery.com/Manipulation/append#content" title="documentazione ufficiale jQuery"&gt;&lt;span class="inlinecode"&gt;append(content)&lt;/span&gt;&lt;/a&gt; (che usiamo subito dopo) inserisce l'elemento &lt;i&gt;all'interno&lt;/i&gt; di quello selezionato.&lt;br /&gt;In generale quindi, si usa &lt;span class="inlinecode"&gt;after()&lt;/span&gt; per creare il blocco, e &lt;span class="inlinecode"&gt;append()&lt;/span&gt; per riempirlo, con due istruzioni diverse.&lt;br /&gt;&lt;br /&gt;Ogni tag viene appeso con una nuova funzione &lt;span class="inlinecode"&gt;append()&lt;/span&gt;, e l'istruzione termina con un &lt;a href="http://docs.jquery.com/Effects/hide" title="documentazione ufficiale jQuery"&gt;&lt;span class="inlinecode"&gt;hide()&lt;/span&gt;&lt;/a&gt; per nascondere la maschera appena creata (&lt;span class="inlinecode"&gt;hide()&lt;/span&gt; in jQuery corrisponde ad un &lt;span class="inlinecode"&gt;display: none;&lt;/span&gt; nei CSS), in quanto deve essere attivata soltanto con il click sul link apposito.&lt;br /&gt;&lt;br /&gt;Da notare che l'attributo &lt;span class="inlinecode"&gt;value&lt;/span&gt; del &lt;span class="inlinecode"&gt;form_token&lt;/span&gt; (riga 7) è volutamente vuoto, in quanto quel parametro sarà passato in seguito.&lt;br /&gt;&lt;br /&gt;Ho inoltre inserito anche un link diretto alla pagina della ricerca avanzata, specificandone l'ID (che useremo tra poco).&lt;br /&gt;&lt;br /&gt;Adesso abbiamo un searchbox nascosto, che necessita di un interruttore per comparire.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;3.3 Creazione dello switch&lt;/b&gt;&lt;br /&gt;Affniché cliccando sul link "ricerca" compaia il nostro searchbox e non si sia indirizzati sulla pagina della ricerca avanzata, usiamo il metodo &lt;a href="http://docs.jquery.com/Effects/toggle" title="documentazione ufficiale jQuery"&gt;&lt;span class="inlinecode"&gt;toggle()&lt;/span&gt;&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="brush: js;"&gt;/* search box switch */&lt;br /&gt;$("#navlist li:last a:not('#advancedsearch')").click(function() {&lt;br /&gt; $("#jquerysearch").toggle('normal');&lt;br /&gt; $("#jquerysearch #edit-search-block-form-form-token").attr('value' , token);&lt;br /&gt; return false;&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Stavolta il selettore &lt;a href="http://docs.jquery.com/Traversing/not#expr" title="documentazione ufficiale jQuery"&gt;&lt;span class="inlinecode"&gt;not()&lt;/span&gt;&lt;/a&gt; è fondamentale per esser sicuri di non selezionare anche il link per la ricerca avanzata, creato poco fa.&lt;br /&gt;&lt;br /&gt;La riga 4 serve per passare il valore del &lt;span class="inlinecode"&gt;form_token&lt;/span&gt; preso sopra al punto 3.1 al corrispondente elemento del nostro box.&lt;br /&gt;&lt;br /&gt;L'istruzione &lt;span class="inlinecode"&gt;return false;&lt;/span&gt; è fondamentale: serve per impedire al browser di caricare la pagina specificata dal tag &lt;span class="inlinecode"&gt;&amp;lt;a&amp;gt;&lt;/span&gt; selezionato — in sostanza, disattiva il link.&lt;br /&gt;&lt;br /&gt;Ecco infine lo script completo:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="brush: js;"&gt;$(document).ready(function(){&lt;br /&gt;/* get form token */&lt;br /&gt;var token = $('#sidebar_right #edit-search-block-form-form-token').attr("value");&lt;br /&gt;/* build search box */&lt;br /&gt;$("#navlist li:last a").after("&amp;lt;form action='#' method='post' id='jquerysearch'&amp;gt;");&lt;br /&gt;$("#jquerysearch").append("&amp;lt;input type='text' maxlength='128' size='15' name='search_block_form_keys' id='edit-search-block-form-keys' value='' title='Inserisci i termini da cercare.' /&amp;gt;")&lt;br /&gt;.append("&amp;lt;input type='submit' name='op' id='edit-submit' value='Cerca' /&amp;gt;")&lt;br /&gt;.append("&amp;lt;input type='hidden' name='form_token' id='edit-search-block-form-form-token' value='' /&amp;gt;")&lt;br /&gt;.append("&amp;lt;input type='hidden' name='form_id' id='edit-search-block-form' value='search_block_form' /&amp;gt;")&lt;br /&gt;.append("&amp;lt;br /&amp;gt;&amp;lt;a id='advancedsearch' href='http://www.gothicnetwork.org/search'&amp;gt;ricerca avanzata&amp;lt;/a&amp;gt;")&lt;br /&gt;.append("&amp;lt;/form&amp;gt;")&lt;br /&gt;.hide();&lt;br /&gt;/* search box switch */&lt;br /&gt;$("#navlist li:last a:not('#advancedsearch')").click(function() {&lt;br /&gt;$("#jquerysearch").toggle('normal');&lt;br /&gt;$("#jquerysearch #edit-search-block-form-form-token").attr('value' , token);&lt;br /&gt;return false;&lt;br /&gt;});&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Adesso è tutto pronto: basta inserire nel &lt;span class="inlinecode"&gt;page.tpl.php&lt;/span&gt; (o chi per lui) un link allo script appena creato, ed il gioco è fatto.&lt;br /&gt;&lt;span class="small"&gt;&amp;Egrave; consigliabile inserire del CSS per stilare il searchbox conformemente alla pagina in cui è inserito: si può inserire direttamente da jQuery, come stile inline dei vari tag. Io ho seguito questa strada.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Il risultato finale lo potete vedere in una qualsiasi delle pagine di &lt;a href="http://www.gothicnetwork.org/" title="portale di recensioni approfondite"&gt;Gothic Network&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Caveat&lt;/b&gt;: dicevo che questo script è &lt;i&gt;un po' un hack&lt;/i&gt; perché andiamo a creare coppie di elementi con lo stesso ID, e questo non sarebbe affatto un comportamento corretto a livello di codice XHTML. Comunque la validazione della pagina passa, perché gli elementi incriminati vengono creati soltanto all'attivazione dello switch, e lo script funziona a dovere.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Appendice&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Selezionare una voce menu che non sia l'ultima in lista: usare il metodo &lt;a href="http://docs.jquery.com/Selectors/attributeEquals#attributevalue" title="documentazione ufficiale jQuery"&gt;&lt;span class="inlinecode"&gt;[attribute=value]&lt;/span&gt;&lt;/a&gt; specificando &lt;span class="inlinecode"&gt;a:href=search&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Documentazione sulla customizzazione dei searchbox in Drupal: &lt;a href="http://drupal.org/node/45295" title="dalla Drupal Theming Guide ufficiale"&gt;http://drupal.org/node/45295&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Se non vogliamo essere vincolati ad usare il searchbox qui costruito soltanto come &lt;i&gt;seconda&lt;/i&gt; maschera di ricerca, è necessario generare un &lt;span class="inlinecode"&gt;form_token&lt;/span&gt; univoco.&lt;br /&gt;Come si evince dal &lt;a href="http://drupal.org/node/45295" title="Customizing the search forms"&gt;link proposto&lt;/a&gt; al punto precedente, si deve creare un tag &lt;span class="inlinecode"&gt;&amp;lt;input&amp;gt;&lt;/span&gt; di questo tipo:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code"  class="brush: xml;"&gt;&amp;lt;input type="hidden" name="form_token" id="a-unique-id" value="&amp;lt;?php print drupal_get_token('search_theme_form'); ?&amp;gt;" /&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2179030760266299422-2912591563462466145?l=myblackteapot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/2912591563462466145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/2912591563462466145'/><link rel='alternate' type='text/html' href='http://myblackteapot.blogspot.com/2009/08/jquery-drupal-search-box-scomparsa.html' title='jQuery + Drupal: search box a scomparsa'/><author><name>blacktealover</name><uri>http://www.blogger.com/profile/07009043319199847342</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_1pfelnO3RgA/S1A4EyIvp3I/AAAAAAAAAdk/djFPE4BjWxk/S220/dadacat.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_1pfelnO3RgA/SphoInU8DGI/AAAAAAAAATs/y1xEpSxFmFk/s72-c/GNsearch.gif' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2179030760266299422.post-502644206693264867</id><published>2009-08-12T15:26:00.021+02:00</published><updated>2010-01-11T14:13:31.439+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='e-commerce'/><category scheme='http://www.blogger.com/atom/ns#' term='web design'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>CSS + jQuery: checkout progress bar per siti e-commerce</title><content type='html'>Ecco un'altra miglioria apportata al negozio &lt;a href="http://www.itesorideldrago/"&gt;I Tesori del Drago&lt;/a&gt; durante il revamp: un indicatore che rende subito evidente al cliente a che punto del processo di acquisto si trova.&lt;br /&gt;&lt;br /&gt;Si tratta di una &lt;span style="font-style: italic;"&gt;progress-bar&lt;/span&gt; che fa la sua comparsa nella pagina del carrello, e indica quanti step sono ancora necessari prima di concludere l'acquisto. Su ogni pagina viene evidenziato lo step attuale.&lt;br /&gt;&lt;span class="small"&gt;In realtà questa non è solo una miglioria, ma anche e soprattutto una caratteristica richiesta in base alle norme di chiarezza e trasparenza che regolano il commercio elettronico.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a class="fb" href="http://3.bp.blogspot.com/_1pfelnO3RgA/SoLDvXq99fI/AAAAAAAAATk/4hF6Ou9eiIU/s1600-h/tdd_cart1.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 39px;" src="http://3.bp.blogspot.com/_1pfelnO3RgA/SoLDvXq99fI/AAAAAAAAATk/4hF6Ou9eiIU/s400/tdd_cart1.gif" alt="" id="BLOGGER_PHOTO_ID_5369068924354557426" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Questa &lt;span style="font-style: italic;"&gt;progress-bar&lt;/span&gt; è realizzata interamente con CSS e un pizzico di jQuery, più quattro icone formato PNG (o anche GIF), una per ogni step.&lt;br /&gt;&lt;span class="small"&gt;Si potrebbe usare anche soltanto del CSS, ma voglio utilizzare anche un po' di jQuery per mostrare la potenza dei suoi selettori.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;br /&gt;1. Markup HTML&lt;/span&gt;&lt;br /&gt;Per prima cosa è necessario creare gli elementi della barra, inserendoli nella pagina con dell'HTML valido e accessibile:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="brush: xml;"&gt;&amp;lt;div id="checkoutbar"&amp;gt;&lt;br /&gt;&amp;lt;ol&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;Carrello&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;Inserimento dati&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;Riepilogo ordine&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;Ordine completo&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;/ol&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="small"&gt;Una lista ordinata è l'ideale per una sequenza logica di fasi.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;2. Aggiungere CSS q.b.&lt;/span&gt;&lt;br /&gt;Adesso serve dello stile per creare quattro blocchi allineati e non delle righe tipiche delle liste, più altro stile di base per rendere la barra più attraente ed in linea col design del sito.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="brush: css;"&gt;#checkoutbar{&lt;br /&gt;margin: 0 auto;&lt;br /&gt;padding: 0;&lt;br /&gt;height: 50px;&lt;br /&gt;width: 700px;&lt;br /&gt;}&lt;br /&gt;#checkoutbar ol{&lt;br /&gt;list-style-type: none;&lt;br /&gt;margin: 0 auto;&lt;br /&gt;}&lt;br /&gt;#checkoutbar li{&lt;br /&gt;float: left;&lt;br /&gt;font-size: .6em;&lt;br /&gt;margin: 1em;&lt;br /&gt;padding: 1em 2em;&lt;br /&gt;background: #abdbff;&lt;br /&gt;border: 3px solid #abdbff;&lt;br /&gt;-moz-border-radius: 6px;&lt;br /&gt;-webkit-border-radius: 6px;&lt;br /&gt;border-radius: 6px;&lt;br /&gt;opacity: .7;&lt;br /&gt;filter: alpha(opacity=70);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;La proprietà &lt;span class="inlinecode"&gt;float: left&lt;/span&gt; conferita agli elementi-lista fa sì che essi si dispongano l'uno accanto all'altro. La spaziatura si ottiene con margini e padding opportuni.&lt;br /&gt;&lt;br /&gt;Da notare i bordi stondati (proprietà &lt;span class="inlinecode"&gt;border-radius&lt;/span&gt;, CSS3) per i browser che li supportano (come Firefox e Safari... niente IE, come al solito!): la prima dichiarazione, quella con &lt;span class="inlinecode"&gt;-moz&lt;/span&gt; è per Firefox, la seconda per Safari.&lt;br /&gt;La terza è la dichiarazione ufficiale come da &lt;a href="http://www.w3.org/TR/css3-background/#border-radius"&gt;linee guida CSS3&lt;/a&gt;.&lt;br /&gt;&lt;span class="small"&gt;Vedi &lt;a href="http://www.css3.info/border-radius-apple-vs-mozilla/"&gt;questo articolo&lt;/a&gt; per una spiegazione sulla natura di queste dichiarazioni.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Altro attributo interessante è l'opacità, che necessita di due settaggi: il primo (aderente alle &lt;a href="http://www.w3.org/TR/css3-color/#transparency"&gt;linee guida di CSS3&lt;/a&gt;) non è valido per il solito IE, che vuole l'attributo &lt;span class="inlinecode"&gt;filter : alpha&lt;/span&gt;.&lt;br /&gt;La trasparenza ci serve per concentrare ancora di più l'attenzione dell'utente sullo step in cui egli si trova, che sarà reso in seguito del tutto opaco (&lt;span class="inlinecode"&gt;opacity: 1&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;3. Stile dello step corrente&lt;/span&gt;&lt;br /&gt;A questo punto le scelte sono due, piuttosto equivalenti:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;attribuire in ciascuna pagina una classe all'elemento lista attivo, ad esempio con un &lt;span class="inlinecode"&gt;class="current"&lt;/span&gt; e creare uno stile solo su quella classe.&lt;/li&gt;&lt;li&gt;utilizzare i selettori di jQuery e creare uno stile attraverso di essi.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Oggi andiamo per la seconda strada, giusto per vedere un paio di selettori all'opera.&lt;br /&gt;&lt;br /&gt;Ecco il codice:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="brush: js;"&gt;$(document).ready(function(){&lt;br /&gt;&lt;br /&gt;$('#checkoutbar li:not(:last)').append(' &amp;amp;gt;&amp;amp;gt;');&lt;br /&gt;&lt;br /&gt;$('#checkoutbar li:eq(0)').css({&lt;br /&gt;'opacity' : '1',&lt;br /&gt;'padding-left' : '40px',&lt;br /&gt;'background' : '#0081e4 url(images/checkoutbar1.png) center left no-repeat',&lt;br /&gt;'color' : '#fff',&lt;br /&gt;'border' : '3px double #abdbff'&lt;br /&gt;});&lt;br /&gt;&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;La prima istruzione serve per attaccare a tutti i nomi degli step due simboli "maggiore di" (&amp;gt;), a fare le veci di una freccia che indica un percorso. Ho preferito inseririli tramite jQuery perché non hanno alcun significato semantico in senso stretto, ma sono solo un semplice artificio di design, e il markup della nostra lista rimane pulito.&lt;br /&gt;Il selettore &lt;span class="inlinecode"&gt;&lt;a href="http://docs.jquery.com/Selectors/not#selector" title="documentazione jQuery ufficiale"&gt;not()&lt;/a&gt;&lt;/span&gt; è un &lt;em&gt;esclusore&lt;/em&gt;, cioè un NOT logico, mentre &lt;span class="inlinecode"&gt;&lt;a href="http://docs.jquery.com/Selectors/last" title="documentazione jQuery ufficiale"&gt;last&lt;/a&gt;&lt;/span&gt; identifica l'ultimo elemento di una serie, in questo caso la serie dei tag &lt;span class="inlinecode"&gt;&amp;lt;li&amp;gt;&lt;/span&gt;.&lt;br /&gt;In questo modo l'ultimo step, che è la fine del persorso, non ha alcuna freccia associata.&lt;br /&gt;&lt;br /&gt;Il resto è lo stile dell'elemento corrente, identificato con il selettore &lt;span class="inlinecode"&gt;&lt;a href="http://docs.jquery.com/Selectors/eq#index" title="documentazione jQuery ufficiale"&gt;eq(index)&lt;/a&gt;&lt;/span&gt;: esso identifica un elemento di una serie in base al suo indice, che parte da 0. In questo caso, essendo il primo elemento quello corrente, abbiamo &lt;span class="inlinecode"&gt;.eq(0)&lt;/span&gt;: questo valore va cambiato su ogni pagina su cui figura la nostra barra.&lt;br /&gt;&lt;br /&gt;L'immagine cui si fa riferimento nell'attributo &lt;span class="inlinecode"&gt;background&lt;/span&gt; è un'icona che identifica la fase corrente, anch'essa individuale per ciascuna fase.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2179030760266299422-502644206693264867?l=myblackteapot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/502644206693264867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/502644206693264867'/><link rel='alternate' type='text/html' href='http://myblackteapot.blogspot.com/2009/08/cssjquery-checkout-progress-bar-per.html' title='CSS + jQuery: checkout progress bar per siti e-commerce'/><author><name>blacktealover</name><uri>http://www.blogger.com/profile/07009043319199847342</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_1pfelnO3RgA/S1A4EyIvp3I/AAAAAAAAAdk/djFPE4BjWxk/S220/dadacat.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_1pfelnO3RgA/SoLDvXq99fI/AAAAAAAAATk/4hF6Ou9eiIU/s72-c/tdd_cart1.gif' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2179030760266299422.post-9055677531251049170</id><published>2009-08-11T23:20:00.046+02:00</published><updated>2010-01-11T14:13:13.061+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='e-commerce'/><category scheme='http://www.blogger.com/atom/ns#' term='web design'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>jQuery: bollino sconti per siti e-commerce</title><content type='html'>In questi giorni ho lavorato sodo alla nuova versione del negozio &lt;a href="http://www.itesorideldrago.com/" title=""&gt;I Tesori del Drago&lt;/a&gt;, che vende principalmente prodotti naturali per la salute ed il benessere, oltre ad altri articoli interessanti.&lt;br /&gt;&lt;span class="small"&gt;Questo negozio era stato lanciato a Novembre 2008, e mi ero occupato praticamente di tutto l'aspetto creativo e tecnico. Si è deciso di cambiare l'impostazione grafica da "dark" a "light", e ne ho approfittato per aggiungere alcune migliorie.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Tra le varie cosette carine implementate, oggi voglio parlare del bollino che ho creato per i prodotti in offerta (un bollino che indica lo sconto percentuale applicato sull'articolo), perché rende bene l'idea del potenziale di &lt;a href="http://jquery.com/" title="jQuery: write less, do more"&gt;jQuery&lt;/a&gt; anche a livelli di web design quasi puro.&lt;br /&gt;&lt;br /&gt;L'idea era quella di avere, nella homepage e nella pagina dedicata all'articolo in offerta, una funzionalità completamente automatica che generasse una grafica mostrante lo sconto percentuale, da abbinare alla foto del prodotto.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_1pfelnO3RgA/SoHjDNnsHII/AAAAAAAAATM/5chjCcCL_j8/s1600-h/tdd_sconto1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 238px; height: 242px;" src="http://4.bp.blogspot.com/_1pfelnO3RgA/SoHjDNnsHII/AAAAAAAAATM/5chjCcCL_j8/s400/tdd_sconto1.jpg" alt="" id="BLOGGER_PHOTO_ID_5368821875137584258" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ho usato esclusivamente jQuery per realizzare questa piccola miglioria di design.&lt;br /&gt;In pratica, si calcola lo sconto percentuale tramite i tag che contengono il valore del prezzo di listino e di quello di vendita, e poi si immette quel valore percentuale in un elemento blocco opportunamente stilato con del CSS (anch'esso generato con jQuery). L'unica cosa esterna al file .html di cui si ha bisogno è un PNG24 con il bollino, da usare come sfondo del blocco creato.&lt;br /&gt;&lt;span class="small"&gt;La grafica deve essere in formato .png a 24bit perché abbiamo bisogno di una trasparenza perfetta, ovviamente, visto che andremo a sovrapporre il bollino sugli sfondi più svariati.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;L'HTML della sezione che ci interessa ha una struttura di questo tipo:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="html"&gt;&amp;lt;div class="offerte"&amp;gt;&lt;br /&gt;&amp;lt;h1&amp;gt;nome articolo&amp;lt;/h1&amp;gt;&lt;br /&gt;&amp;lt;p&amp;gt;descrizione articolo&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;lt;img alt="foto articolo" /&amp;gt;&lt;br /&gt;&amp;lt;span class="list_price"&amp;gt;14.00€&amp;lt;/span&amp;gt;&lt;br /&gt;&amp;lt;span class="sell_price"&amp;gt;12.60€&amp;lt;/span&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Ecco il codice jQuery per calcolare la percentuale di sconto applicata:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;$('.offerte').each(function (i) {&lt;br /&gt;var lp=$(this).children('.list_price').text();&lt;br /&gt;lp=lp.substr(0, lp.length - 1);&lt;br /&gt;var sp=$(this).children('.sell_price').text();&lt;br /&gt;sp=sp.substr(0, sp.length - 1);&lt;br /&gt;var sconto=Math.round((100-((sp/lp)*100)));&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Il metodo &lt;span class="inlinecode"&gt;&lt;a href="http://docs.jquery.com/Core/each" title="documentazione ufficiale jQuery"&gt;each( callback )&lt;/a&gt;&lt;/span&gt; serve per iterare su tutti gli elementi aventi la classe "offerte" presenti nella pagina, in quanto non è detto che lo sconto percentuale applicato sia lo stesso su tutti gli articoli.&lt;br /&gt;Prima di tutto si memorizzano il prezzo vecchio e quello scontato ciascuno in una propria variabile con il metodo &lt;span class="inlinecode"&gt;&lt;a href="http://docs.jquery.com/Attributes/text" title="documentazione ufficiale jQuery"&gt;text()&lt;/a&gt;&lt;/span&gt;.&lt;br /&gt;Poi con l'espressione che segue si tronca l'ultimo carattere della stringa memorizzata in ciascuna variabile. Questo per eliminare il simbolo finale dell'euro, che ci renderebbe il dato inutilizzabile in operazioni matematiche.&lt;br /&gt;&lt;span class="small"&gt;Occhio che il simbolo separatore dei decimali sia un punto (.) e non una virgola (,), perché jQuery nel secondo caso non riconoscerebbe come numeri i valori memorizzati.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Nella variabile &lt;span class="inlinecode"&gt;sconto&lt;/span&gt; si calcola lo sconto percentuale: il metodo &lt;span class="inlinecode"&gt;&lt;a href="http://www.w3schools.com/jsref/jsref_round.asp" title="documentazione W3C sul metodo round()"&gt;round(x)&lt;/a&gt;&lt;/span&gt; dell'oggetto &lt;span class="inlinecode"&gt;&lt;a href="http://www.w3schools.com/jsref/jsref_obj_math.asp" title="documentazione W3C sull'oggetto Math"&gt;Math&lt;/a&gt;&lt;/span&gt; arrotonda il valore dello sconto all'intero più vicino.&lt;br /&gt;&lt;span class="small"&gt;Questo è molto utile dal punto di vista grafico, visto che una o più cifre decimali "strizzerebbero" troppo il testo nel nostro bollino.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A questo punto, si costruisce un elemento blocco &lt;span class="inlinecode"&gt;&amp;lt;div&amp;gt;&lt;/span&gt; nel quale immettere come testo il valore della variabile &lt;span class="inlinecode"&gt;sconto&lt;/span&gt;, per poterlo visualizzare formattato a piacere:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="brush: js; highlight: [7, 8]"&gt;$('.offerte').each(function (i) {&lt;br /&gt;var lp=$(this).children('.list_price').text();&lt;br /&gt;lp=lp.substr(0, lp.length - 1);&lt;br /&gt;var sp=$(this).children('.sell_price').text();&lt;br /&gt;sp=sp.substr(0, sp.length - 1);&lt;br /&gt;var sconto=Math.round((100-((sp/lp)*100)));&lt;br /&gt;$(this).append("&amp;lt;div class='bollino'&amp;gt;&amp;lt;/div&amp;gt;");&lt;br /&gt;$(this).children('.bollino').css(bollino).html(sconto).prepend('-').append('%');&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;In sostanza, si &lt;a href="http://docs.jquery.com/Manipulation/append#content" title="metodo append()"&gt;appende&lt;/a&gt; un &lt;span class="inlinecode"&gt;div&lt;/span&gt; al blocco "offerte" e gli si attribuisce dello stile precedentemente creato, tramite una variabile (usando &lt;span class="inlinecode"&gt;&lt;a href="http://docs.jquery.com/CSS/css#properties" title="documentazione ufficiale jQuery"&gt;css(properties)&lt;/a&gt;&lt;/span&gt;, che vedremo tra poco), gli si inserisce come contenuto HTML la variabile &lt;span class="inlinecode"&gt;sconto&lt;/span&gt; (&lt;span class="inlinecode"&gt;&lt;a href="http://docs.jquery.com/Attributes/html#val" title="documentazione ufficiale jQuery"&gt;html(val)&lt;/a&gt;&lt;/span&gt;) e si guarnisce con i necessari simboli "-" (visto che è uno sconto) e "%", rispettivamente &lt;a href="http://docs.jquery.com/Manipulation/prepend#content" title="metodo prepend()"&gt;prima&lt;/a&gt; e &lt;a href="http://docs.jquery.com/Manipulation/append#content" title="metodo append()"&gt;dopo&lt;/a&gt; il testo inserito.&lt;br /&gt;&lt;br /&gt;Per l'immagine del bollino ho semplicemente usato una delle &lt;i&gt;shapes&lt;/i&gt; predefinite di Photoshop:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_1pfelnO3RgA/SoHyyVyxIiI/AAAAAAAAATU/ri0IbcmH8H0/s1600-h/bollino.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 50px; height: 50px;" src="http://2.bp.blogspot.com/_1pfelnO3RgA/SoHyyVyxIiI/AAAAAAAAATU/ri0IbcmH8H0/s400/bollino.png" alt="" id="BLOGGER_PHOTO_ID_5368839177459802658" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A questo punto dobbiamo solo creare il CSS necessario a formattare e posizionare il nostro bollino.&lt;br /&gt;Anche in questo caso si usa jQuery, creando una variabile da passare comodamente al proprio blocco col metodo &lt;span class="inlinecode"&gt;css(properties)&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;var bollino = {&lt;br /&gt;'background' : 'transparent url(images/bollino.png) top center no-repeat',&lt;br /&gt;'width' : '50px',&lt;br /&gt;'height' : '50px',&lt;br /&gt;'z-index' : '100',&lt;br /&gt;'text-align' : 'center',&lt;br /&gt;'padding-top' : '1em',&lt;br /&gt;'font' : 'italic bold 1em "century gothic", century, sans-serif',&lt;br /&gt;'color' : '#fede60',&lt;br /&gt;'position' : 'absolute',&lt;br /&gt;'top' : '70px',&lt;br /&gt;'left' : '125px'&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Il &lt;span class="inlinecode"&gt;position: absolute&lt;/span&gt; serve per poter piazzare il bollino parzialmente sovrapposto alla foto del prodotto.&lt;br /&gt;L'unica cosa da notare in questo caso è che per consentire un posizionamento assoluto del bollino all'interno del blocco "offerte", è necessario che quest'ultimo abbia la proprietà CSS &lt;span class="inlinecode"&gt;position: relative&lt;/span&gt;. Se così non fosse, il posizionamento sarà rispetto al primo blocco antenato posizionato relativamente, e quasi sicuramente ciò farà sì che tutti i bollini si sovrappongano.&lt;br /&gt;E questo non è ciò che vogliamo, giusto?&lt;br /&gt;&lt;br /&gt;Alla fine, quello che si ottiene sarà qualcosa di questo tipo:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_1pfelnO3RgA/SoJ45I6rG4I/AAAAAAAAATc/k4sCI-m1BkI/s1600-h/bollino_end.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 50px; height: 50px;" src="http://4.bp.blogspot.com/_1pfelnO3RgA/SoJ45I6rG4I/AAAAAAAAATc/k4sCI-m1BkI/s400/bollino_end.png" alt="" id="BLOGGER_PHOTO_ID_5368986628820507522" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ecco lo script completo autosufficiente:&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;$(document).ready(function(){&lt;br /&gt;&lt;br /&gt;var bollino = {&lt;br /&gt;'background' : 'transparent url(images/bollino.png) top center no-repeat',&lt;br /&gt;'width' : '50px',&lt;br /&gt;'height' : '50px',&lt;br /&gt;'z-index' : '100',&lt;br /&gt;'text-align' : 'center',&lt;br /&gt;'padding-top' : '1em',&lt;br /&gt;'font' : 'italic bold 1em "century gothic", century, sans-serif',&lt;br /&gt;'color' : '#fede60',&lt;br /&gt;'position' : 'absolute',&lt;br /&gt;'top' : '70px',&lt;br /&gt;'left' : '125px'&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;$('.offerte').each(function (i) {&lt;br /&gt;var lp=$(this).children('.list_price').text();&lt;br /&gt;lp=lp.substr(0, lp.length - 1);&lt;br /&gt;var sp=$(this).children('.sell_price').text();&lt;br /&gt;sp=sp.substr(0, sp.length - 1);&lt;br /&gt;var sconto=Math.round((100-((sp/lp)*100)));&lt;br /&gt;$(this).append("&amp;lt;div class='bollino'&amp;gt;&amp;lt;/div&amp;gt;");&lt;br /&gt;$(this).children('.bollino').css(bollino).html(sconto).prepend('-').append('%');&lt;br /&gt;});&lt;br /&gt;&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;[Aggiunta: sul Problema della Trasparenza in IE6]&lt;/span&gt;&lt;br /&gt;La questione è fin troppo vecchia per doverne sempre stare a discutere: IE6 non supporta la trasparenza alpha dei PNG24, e il nostro bollino su tale browser degrada ad un ingombro grafico sgradevole.&lt;br /&gt;Nessuno oggigiorno dovrebbe mai navigare in internet con un simile programma! Ma per coloro che sono obbligati, c'è sempre una qualche scappatoia parziale.&lt;br /&gt;&lt;br /&gt;Un metodo è usare lo script &lt;a href="http://jquery.andreaseberhard.de/pngFix"&gt;PNG Fix&lt;/a&gt; di  Andreas Eberhard, che fa generalmente un ottimo lavoro nel ripristinare la corretta trasparenza dei PNG della pagina web su cui è invocato.&lt;br /&gt;&lt;br /&gt;L'altra soluzione è il vecchio metodo delle immagini GIF di sostituzione a quelle PNG, visto che almeno la trasparenza GIF ad un solo bit è supportata da questo browser.&lt;br /&gt;&lt;span class="small"&gt;In questo caso, se usate un bollino "a tinta unita" (solid color) come il mio sopra, conviene creare una GIF a soli due colori: uno per il colore del bollino, l'altro per la trasparenza, e senza alcun dithering. In questo modo, quando il bollino si sovrappone ad altri elementi, i risultati sono decisamente più accettabili.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Una maniera di implementare questo ultimo sistema nel nostro script senza stravolgere alcunché è sfruttare jQuery per riconoscere il modello e la versione del browser che interpreta la pagina web, e agire di conseguenza.&lt;br /&gt;&lt;br /&gt;Ad esempio aggiungendo in fondo allo script, semplicemente:&lt;br /&gt;&lt;pre name="code" class="javascript"&gt;if($.browser.msie &amp;amp;&amp;amp; $.browser.version&lt;="6.0"){&lt;br /&gt;$('.bollino').css('background', 'transparent url(images/bollino.gif) top center no-repeat');&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;In realtà l'uso del metodo &lt;span class="inlinecode"&gt;$.browser.version&lt;/span&gt; è deprecata perché l'utilizzo di jQuery concerne più le &lt;em&gt;caratteristiche&lt;/em&gt; di un browser, che la sua &lt;em&gt;versione&lt;/em&gt;, come si spiega nella pagina della documentazione dedicata al metodo &lt;span class="inlinecode"&gt;&lt;a href="http://docs.jquery.com/Utilities/jQuery.support" title="documentazione jQuery ufficiale"&gt;jQuery.support&lt;/a&gt;&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2179030760266299422-9055677531251049170?l=myblackteapot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/9055677531251049170'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/9055677531251049170'/><link rel='alternate' type='text/html' href='http://myblackteapot.blogspot.com/2009/08/jquery-bollino-sconti-per-siti-e.html' title='jQuery: bollino sconti per siti e-commerce'/><author><name>blacktealover</name><uri>http://www.blogger.com/profile/07009043319199847342</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_1pfelnO3RgA/S1A4EyIvp3I/AAAAAAAAAdk/djFPE4BjWxk/S220/dadacat.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_1pfelnO3RgA/SoHjDNnsHII/AAAAAAAAATM/5chjCcCL_j8/s72-c/tdd_sconto1.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2179030760266299422.post-3845713739302573610</id><published>2009-08-04T14:15:00.028+02:00</published><updated>2009-08-05T19:36:41.147+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Death in June'/><category scheme='http://www.blogger.com/atom/ns#' term='Holga'/><category scheme='http://www.blogger.com/atom/ns#' term='Firenze'/><category scheme='http://www.blogger.com/atom/ns#' term='fotografia'/><category scheme='http://www.blogger.com/atom/ns#' term='viaggio'/><category scheme='http://www.blogger.com/atom/ns#' term='llford'/><title type='text'>first time Holga?</title><content type='html'>ecco le prime foto pubblicate tra quelle fatte con l'&lt;a href="http://en.wikipedia.org/wiki/Holga" title="cos'è Holga? guarda su Wikipedia"&gt;Holga&lt;/a&gt; 120N: sono tutte fatte con pellicola B/N Ilford Delta400 scaduta, trovate su Ebay, e poi scansionate con un Epson V500+Vuescan.&lt;br /&gt;&lt;p class="small"&gt;(ho perso una mattinata a capire quali erano i settaggi per me più efficaci per scansionare quei negativi... alla fine ho trovato una mia configurazione partendo da &lt;a href="http://www.flickr.com/groups/analogica/discuss/72157608829345157/?search=vuescan+settaggi"&gt;questo thread&lt;/a&gt; sul gruppo Fotografia Analogica Italia su Flickr e poi personalizzando un po' e creando dei file .DNG da esportare con Lightroom. tutto questo potrà cambiare nell'immediato futuro comunque...)&lt;/p&gt;prima di tutto è venuta fuori una serie abbastanza eterogenea di tre foto (un &lt;i&gt;fotohaiku&lt;/i&gt;):&lt;br /&gt;&lt;br /&gt;&lt;ol class="fototitles" style="margin-bottom: 0;"&gt;&lt;br /&gt;&lt;li&gt;I dreamt of Duchamp he and I in a meadow blue&lt;/li&gt;&lt;br /&gt;&lt;li&gt;whilst our little bodies twisted in carousel swerves&lt;/li&gt;&lt;br /&gt;&lt;li&gt;and then the world oh the world all fall down&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;div id="PictoBrowser090805003731"&gt;Get the flash player here: http://www.adobe.com/flashplayer&lt;/div&gt;&lt;script type="text/javascript" src="http://www.db798.com/pictobrowser/swfobject.js"&gt;&lt;/script&gt;&lt;script type="text/javascript"&gt; var so = new SWFObject("http://www.db798.com/pictobrowser.swf", "PictoBrowser", "400", "450", "8", "#EEEEEE"); so.addVariable("source", "keyword"); so.addVariable("names", "holga1"); so.addVariable("userName", "LoneCamel"); so.addVariable("userId", "36203317@N04"); so.addVariable("ids", "holga1"); so.addVariable("titles", "on"); so.addVariable("displayNotes", "on"); so.addVariable("thumbAutoHide", "on"); so.addVariable("imageSize", "medium"); so.addVariable("vAlign", "mid"); so.addVariable("vertOffset", "0"); so.addVariable("colorHexVar", "EEEEEE"); so.addVariable("initialScale", "off"); so.addVariable("bgAlpha", "75"); so.write("PictoBrowser090805003731"); &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;evocare Duchamp come nume tutelare nella prima Holgafoto pubblica mi pare quantomeno calzante... quel librone è una retrospettiva sulla produzione di Duchamp su un lato e sull'altro una raccolta di effemeridi. la pala che si vede è il famoso &lt;span style="font-style: italic;"&gt;readymade&lt;/span&gt; che chiamò "in previsione di un braccio rotto" (&lt;span style="font-style: italic;"&gt;in advance of a broken arm&lt;/span&gt;), e anche questo mi pare molto calzante.&lt;br /&gt;&lt;br /&gt;la seconda foto è la giostra in Piazza della Repubblica a Firenze. l'avevo chiamata provvisoriamente "carosello", e questo mi ha fatto venire in mente un verso di &lt;span style="font-style: italic;"&gt;Hullo Angel&lt;/span&gt; di Death In June, che fa:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;p&gt;Well, Hullo Angel&lt;br /&gt;A Gift and a Smile&lt;br /&gt;Well, Hullo Angel&lt;br /&gt;As We walk a Crooked mile&lt;br /&gt;&lt;br /&gt;And a Twisted Man&lt;br /&gt;Leans on twisted sticks&lt;br /&gt;With children's laughter&lt;br /&gt;Hanging from swings&lt;br /&gt;&lt;br /&gt;Well, Hullo Angel&lt;br /&gt;And the skipping rope turns&lt;br /&gt;Whilst little bodies twist&lt;br /&gt;In carousel swerves&lt;br /&gt;&lt;br /&gt;Well, Hullo Angel&lt;br /&gt;It's the End of The World&lt;br /&gt;Well, Hullo Angel&lt;br /&gt;At the End of your Tether&lt;br /&gt;&lt;br /&gt;Well, Hullo Angel&lt;br /&gt;Time for Sleep&lt;br /&gt;Well, Hullo Angel&lt;br /&gt;Time for Prayers&lt;br /&gt;&lt;br /&gt;That which is Falling&lt;br /&gt;Should also be Pushed&lt;br /&gt;That which is Crawling&lt;br /&gt;Should also be Crushed!&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;anche questo mi è sembrato davvero calzante.&lt;br /&gt;&lt;br /&gt;l'ultima foto è uno specchio spezzettato, visto lo stesso giorno in una installazione nel cortile di Palazzo Strozzi, ad opera di Yves Netzhammer, chiamata &lt;a href="http://www.strozzina.org/inventoriesofabstraction/"&gt;Inventories of abstraction&lt;/a&gt;, nel cortile della &lt;a href="http://www.strozzina.org/"&gt;Strozzina&lt;/a&gt;; ci si intravede il Palazzo a pezzi spezzati. il titolo è in pratica la versione anglofona del "girogirotondo".&lt;br /&gt;&lt;br /&gt;e sì, questo poi, calzava proprio fino in fondo...&lt;br /&gt;tutto mi torna, perché, per onorare al meglio la qualità surreale e onirica delle immagini che escono fuori da una Holga, non c'è proprio niente di meglio di un fotohaiku che inizia evocando il Dadaismo in qualità di Araldo dell'Anti-arte e termina nientemeno che con la fine del mondo. e nel mezzo ci abbiamo messo anche una bella canzone.&lt;br /&gt;missione compiuta!&lt;br /&gt;&lt;br /&gt;e poi altre due, slegate tra di loro:&lt;br /&gt;&lt;br /&gt;&lt;p class="fototitle"&gt;double voyage&lt;/p&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.flickr.com/photos/shortermemory/3787889695"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 240px; height: 231px;" src="http://farm4.static.flickr.com/3509/3787889695_375887139f_m.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p class="fototitle"&gt;zeitmaschine&lt;/p&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.flickr.com/photos/shortermemory/3787889029"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 240px; height: 233px;" src="http://farm3.static.flickr.com/2588/3787889029_06965edb95_m.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;la prima è una doppia esposizione in treno. l'idea era quella di fare un'aureola a Silvia, ma poi, grazie all'&lt;em&gt;utilissimo&lt;/em&gt; mirino della cara Holga, sono riuscito solo a centrarle gli occhiali; non che l'effetto sia male.&lt;br /&gt;il "doppio viaggio", comunque sia, è sia quello nello spazio, del treno, che quello nella propria mente, che accompagna il primo.&lt;br /&gt;guardi fuori dal finestrino, i paesaggi scorrono come fotogrammi, non si riesce a fissarli che qui il pulsante di pausa non esiste, e intanto un pensiero segue l'altro, si costruiscono castelli in aria sulle colline che si muovono all'orizzonte, il serpente si morde la coda, e ci si perde sia dentro che fuori.&lt;br /&gt;&lt;br /&gt;l'ultima foto è una "macchina del tempo", perché pare una foto degli anni '70, e non qualcosa di contemporaneo.&lt;br /&gt;e anche questo fa molto Holga.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2179030760266299422-3845713739302573610?l=myblackteapot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/3845713739302573610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/3845713739302573610'/><link rel='alternate' type='text/html' href='http://myblackteapot.blogspot.com/2009/08/first-time-holga.html' title='first time Holga?'/><author><name>blacktealover</name><uri>http://www.blogger.com/profile/07009043319199847342</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_1pfelnO3RgA/S1A4EyIvp3I/AAAAAAAAAdk/djFPE4BjWxk/S220/dadacat.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3509/3787889695_375887139f_t.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2179030760266299422.post-8403727030909380741</id><published>2009-08-01T14:05:00.009+02:00</published><updated>2009-08-01T15:12:33.905+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blog'/><category scheme='http://www.blogger.com/atom/ns#' term='polaroid'/><category scheme='http://www.blogger.com/atom/ns#' term='poladroid'/><title type='text'>poladroid graveyard</title><content type='html'>nuovo progettino!&lt;br /&gt;trattasi di una sorta di fotoblog, dedicato esclusivamente a poladroid.&lt;br /&gt;&lt;span class="small"&gt;(&lt;a href="http://www.poladroid.net/" title="Poladroid è freeware"&gt;Poladroid&lt;/a&gt; è un software che simula l'utilizzo di una buona vecchia Polaroid, consentendo di tramutare file immagine in pola(d)roid. estremamente divertente e con rilevanti possibilità creative. specialmente ora che le cartucce polaroid sono fuori produzione! ...a meno che non si riesca nell'&lt;a href="http://www.the-impossible-project.com/" title="sviluppare una NUOVA pellicola per VECCHIE macchine Polaroid"&gt;impossibile&lt;/a&gt;)&lt;/span&gt;&lt;br /&gt;il potenziale creativo di Poladroid è notevole: ciò è dovuto principalmente alla mancanza di controllo del processo creativo dell'immagine finale, e alla sua parziale casualità.&lt;br /&gt;le alterazioni più importanti dell'immagine originale sono tre:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Taglio quadrato&lt;/span&gt;: nonostante sia semplicemente centrato nella foto originale, l'effetto è psicologicamente forte perché assolutamente spietato nell'amputare un'immagine pensata per un rapporto 3:2 o comunque rettangolare.&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Variazioni tonali&lt;/span&gt;: essendo casuali, la dominante non può essere predetta e (insieme ad eventuali texture) rende ogni poladroid un esemplare unico. L'effetto poi cambia molto al variare della saturazione dell'immagine di partenza.&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Frame Polaroid&lt;/span&gt;: ovviamente! l'incorniciatura nella famosa carta polaroid aggiunge un'altra grossa componente psicologica, aiutata anche dalla vignettatura.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;conscio di tutto questo, mi ritrovo con un sacco di poladroid "scartate" perché incapaci di comunicare la senzazione che ricercavo in &lt;span style="font-style: italic;"&gt;quel&lt;/span&gt; momento, ma comunque degne di nota di per sé, in quanto poladroid e istantanee senza compromessi di un istante di vita passata.&lt;br /&gt;&lt;br /&gt;ed ecco perché "poladroid graveyard", cioè &lt;span style="font-style: italic;"&gt;cimitero&lt;/span&gt;: un luogo dove far riposare con dignità tutte le poladroid in qualche modo "scartate". in questo senso sarà anche un progetto aperto.&lt;br /&gt;&lt;br /&gt;ho anche fatto il logo: disegnato, scannerizzato e poladroid-zato.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_1pfelnO3RgA/SnQ2FT-27NI/AAAAAAAAARg/eK0OxoiN9Rk/s1600-h/poladroid_graveyard_sketch.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 320px;" src="http://2.bp.blogspot.com/_1pfelnO3RgA/SnQ2FT-27NI/AAAAAAAAARg/eK0OxoiN9Rk/s320/poladroid_graveyard_sketch.jpg" alt="" id="BLOGGER_PHOTO_ID_5364972520996269266" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_1pfelnO3RgA/SnQ2hdzZh1I/AAAAAAAAARo/Bx2U9FmdTIs/s1600-h/poladroid_graveyard_logo.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 263px; height: 320px;" src="http://1.bp.blogspot.com/_1pfelnO3RgA/SnQ2hdzZh1I/AAAAAAAAARo/Bx2U9FmdTIs/s320/poladroid_graveyard_logo.jpg" alt="" id="BLOGGER_PHOTO_ID_5364973004668897106" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2179030760266299422-8403727030909380741?l=myblackteapot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/8403727030909380741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/8403727030909380741'/><link rel='alternate' type='text/html' href='http://myblackteapot.blogspot.com/2009/08/poladroid-graveyard.html' title='poladroid graveyard'/><author><name>blacktealover</name><uri>http://www.blogger.com/profile/07009043319199847342</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_1pfelnO3RgA/S1A4EyIvp3I/AAAAAAAAAdk/djFPE4BjWxk/S220/dadacat.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_1pfelnO3RgA/SnQ2FT-27NI/AAAAAAAAARg/eK0OxoiN9Rk/s72-c/poladroid_graveyard_sketch.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2179030760266299422.post-7298273882328148470</id><published>2009-07-31T10:54:00.019+02:00</published><updated>2009-08-01T00:51:01.709+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fotografia'/><category scheme='http://www.blogger.com/atom/ns#' term='viaggio'/><title type='text'>stazioni</title><content type='html'>martedì 28 luglio ero a Roma per il concerto di &lt;a href="http://www.antonyandthejohnsons.com/" title="homepage Antony and the Johnsons"&gt;Antony&lt;/a&gt;, e come al solito ho colto l'occasione per fare qualche foto "di viaggio".&lt;br /&gt;&lt;br /&gt;il tema del &lt;span style="font-style: italic;"&gt;viaggio&lt;/span&gt; mi è sempre stato vicino, in particolare la figura del viaggiatore, come allegoria dello spirito e del suo pellegrinaggio. non parlo qui, com'è ovvio, del numero di kilometri consumati sotto la suola delle scarpe, anche se la polvere sui propri calzari è comunque importante più che consumare il rivestimento dei sedili di un autobus o lo strato superficiale dei suoi pneumatici. i grandi pellegrinaggi sono sempre a piedi: la terra che vibra sotto i colpi dei propri passi deve entrare dalla pianta del piede e risuonare fino alla nuca per giungersi col cielo, altrimenti non c'è comunione col mondo, e tanto vale stare a casa. si può viaggiare anche senza muoversi fisicamente, se è per quello (anzi):&lt;br /&gt;&lt;blockquote&gt;&lt;p&gt;Senza uscir dalla porta,&lt;br /&gt;conosci il mondo,&lt;br /&gt;Senza guardar dalla finestra&lt;br /&gt;scorgi la Via del Cielo&lt;br /&gt;&lt;span&gt;Tao Tê Ching, &lt;a href="http://www.liberliber.it/biblioteca/l/lao_tzu/tao_te_ching/html/47.htm" title="scrutare ci&amp;ograve; che &amp;egrave; lontano"&gt;XLVII&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;comunque sia! stavolta si parla di &lt;span style="font-style: italic;"&gt;stazioni&lt;/span&gt;. &lt;span&gt;"stazione"&lt;/span&gt; significa &lt;span style="font-style: italic;"&gt;fermata&lt;/span&gt;, &lt;span style="font-style: italic;"&gt;arresto&lt;/span&gt; e pertanto è un punto di stasi del viaggio; uno dei pochi punti dove si può cambiare la direzione intrapresa.&lt;br /&gt;a livello sociale fa letteralmente impressione il numero di individui che incrociano le proprie strade in questi luoghi, migliaia di viaggi &amp;amp; storie si accostano ad ogni momento, condividono la propria direzione per un attimo, divergono, si scontrano, si aspettano l'un l'altro e non si riconoscono. vagano senza coscienza del moto intrapreso. l'&lt;span style="font-style: italic;"&gt;altro&lt;/span&gt; sfuma in una sfocatura indistinta. qui ci si incontra e ci si separa, a volte senza ritorno, o solo per qualche ora. le possibilità sono infinite!&lt;br /&gt;&lt;br /&gt;le foto qui sotto sono state fatte alla stazione di Firenze in attesa del cambio per/da Roma.&lt;br /&gt;&lt;span class="small"&gt;la pessima qualità è dovuta alla compressione delle immagini in Picasa... quasi quasi le metto su Flickr...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div id="PictoBrowser090731154858"&gt;Get the flash player here: http://www.adobe.com/flashplayer&lt;/div&gt;&lt;script type="text/javascript" src="http://www.db798.com/pictobrowser/swfobject.js"&gt;&lt;/script&gt;&lt;script type="text/javascript"&gt; var so = new SWFObject("http://www.db798.com/pictobrowserp.swf", "PictoBrowser", "400", "400", "8", "#EEEEEE"); so.addVariable("source", "album"); so.addVariable("userName", "albalducci"); so.addVariable("names", "Stazioni"); so.addVariable("albumId", "5364544582698963697"); so.addVariable("titles", "off"); so.addVariable("displayNotes", "off"); so.addVariable("thumbAutoHide", "on"); so.addVariable("imageSize", "medium"); so.addVariable("vAlign", "mid"); so.addVariable("vertOffset", "0"); so.addVariable("colorHexVar", "EEEEEE"); so.addVariable("initialScale", "off"); so.addVariable("bgAlpha", "76"); so.write("PictoBrowser090731154858"); &lt;/script&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;p&gt;Not fare well,&lt;br /&gt;But fare forward, voyagers.&lt;br /&gt;&lt;span&gt;T.S. Eliot, &lt;a href="http://www.tristan.icom43.net/quartets/salvages.html" title="tratto dai dai Four Quartets"&gt;The Dry Salvages&lt;/a&gt;, III&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2179030760266299422-7298273882328148470?l=myblackteapot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/7298273882328148470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/7298273882328148470'/><link rel='alternate' type='text/html' href='http://myblackteapot.blogspot.com/2009/07/stazioni.html' title='stazioni'/><author><name>blacktealover</name><uri>http://www.blogger.com/profile/07009043319199847342</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_1pfelnO3RgA/S1A4EyIvp3I/AAAAAAAAAdk/djFPE4BjWxk/S220/dadacat.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-2179030760266299422.post-8298064457065107204</id><published>2009-07-30T17:21:00.006+02:00</published><updated>2009-08-01T15:11:22.210+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ilford'/><category scheme='http://www.blogger.com/atom/ns#' term='fotografia'/><category scheme='http://www.blogger.com/atom/ns#' term='sviluppo'/><title type='text'>sviluppo bianco&amp;nero, eccomi...</title><content type='html'>Qualche giorno fa, con una velocità impressionante, sono arrivati i prodotti per lo sviluppo di pellicole B/N che avevo ordinato a &lt;a href="http://www.tuttofoto.com/"&gt;Tuttofoto&lt;/a&gt; (ordine aperto il giorno prima alle 1353, pacco arrivato in mattinata del giorno dopo... ottimi prezzi, servizio perfetto, altamente consigliato...):&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_1pfelnO3RgA/SnG66GKii5I/AAAAAAAAAPQ/y08ClZw0iR4/s1600-h/prodotti_sviluppo.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 213px;" src="http://2.bp.blogspot.com/_1pfelnO3RgA/SnG66GKii5I/AAAAAAAAAPQ/y08ClZw0iR4/s320/prodotti_sviluppo.jpg" alt="" id="BLOGGER_PHOTO_ID_5364274138424970130" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;nel tentativo di rendermi indipendente in tutte le fasi fotografiche, lo sviluppo casalingo è la mia ultima barriera!&lt;br /&gt;non avendo mai seguito corsi in merito, mi sono documentato (come al solito) molto scrupolosamente.&lt;br /&gt;innanzitutto ho frugato nella biblioteca comunale, e ho trovato due libri perfetti per i miei scopi:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;em&gt;Ghedina O. F. - Manuale pratico di camera oscura&lt;/em&gt; (ottimo per la capire bene i parametri in gioco e per tutta una serie di consigli molto pratici)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;em&gt;H. J. Walls &amp;amp; G. G. Attridge - Le basi scientifiche della fotografia&lt;/em&gt; (per capire i fondamenti chimici di tutto il processo e il perché degli effetti che si ottengono variando i vari parametri)&lt;/li&gt;&lt;/ul&gt;poi, sulla rete si trova di tutto, come al solito: da &lt;a href="http://www.youtube.com/watch?v=Vu0Ul_wsYO8&amp;amp;feature=player_embedded"&gt;video&lt;/a&gt; sull'argomento a interi thread su Flickr, a &lt;a href="http://www.centoiso.com/guide/5.1a.asp"&gt;pagine&lt;/a&gt; più o meno accurate.&lt;br /&gt;&lt;br /&gt;insomma, alla fine, incrociando tutte le nozioni con cui mi sono affaticato il cerebro ancora una volta, è uscita fuori la combinazione che si vede nella foto di cui sopra: bagno di stop e di fissaggio Ilford (dovendo sviluppare principalmente rulli Ilford Delta400), polvere per farsi il bagno di sviluppo equivalente ad un Ilford ID-11 (era in offerta, come rifiutare...), tre bottiglie a soffietto per conservare i bagni preparati, più altra attrezzatura (tank con spirale, anche questa in offerta a Tuttofoto, tre contenitori graduati comprati alla OBI, ecc.)&lt;br /&gt;&lt;span class="small"&gt;lo &lt;span style="text-decoration: underline;"&gt;Shiva Nataraja&lt;/span&gt; che si vede in foto no - è mio compagno da molto tempo e padrino dell'operazione.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;appena avrò tempo mi cimenterò in questa nuova impresa.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2179030760266299422-8298064457065107204?l=myblackteapot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/8298064457065107204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/8298064457065107204'/><link rel='alternate' type='text/html' href='http://myblackteapot.blogspot.com/2009/07/qualche-giorno-fa-con-una-velocita.html' title='sviluppo bianco&amp;nero, eccomi...'/><author><name>blacktealover</name><uri>http://www.blogger.com/profile/07009043319199847342</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_1pfelnO3RgA/S1A4EyIvp3I/AAAAAAAAAdk/djFPE4BjWxk/S220/dadacat.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_1pfelnO3RgA/SnG66GKii5I/AAAAAAAAAPQ/y08ClZw0iR4/s72-c/prodotti_sviluppo.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-2179030760266299422.post-5632368398932542512</id><published>2009-07-27T11:01:00.002+02:00</published><updated>2009-07-27T15:35:34.576+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='soundcloud'/><category scheme='http://www.blogger.com/atom/ns#' term='chitarra'/><category scheme='http://www.blogger.com/atom/ns#' term='improvvisazione'/><category scheme='http://www.blogger.com/atom/ns#' term='musica'/><title type='text'>in a maze of memories</title><content type='html'>&lt;div style="font-size: 11px;"&gt;&lt;object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="100%" height="81" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;param name="src" value="http://player.soundcloud.com/player.swf?track=in-a-maze-of-memories"&gt;&lt;embed type="application/x-shockwave-flash" width="100%" height="81" src="http://player.soundcloud.com/player.swf?track=in-a-maze-of-memories" allowscriptaccess="always"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;div style="padding-top: 5px;"&gt;&lt;a href="http://soundcloud.com/blacktealover/in-a-maze-of-memories"&gt;In a maze of memories&lt;/a&gt; by  &lt;a href="http://soundcloud.com/blacktealover"&gt;blacktealover&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Ok, &lt;em&gt;si comincia&lt;/em&gt;.&lt;br /&gt;...con qualcosa di vecchio!&lt;br /&gt;questa improvvisazione su un tema scritto di chitarra classica (grossomodo i primi 40 secondi) l'ho registrata un anno fa quasi esatto, per un progetto di "collaborazione artistica". l'idea (non mia, per una volta!) era di miscelare musica e arte visiva (scultura, dipinto) realizzando dapprima creazioni indipendenti, per poi passarle all'altro che avrebbe creato un'opera cercando di captare l'espressione dell'altro partecipante.&lt;br /&gt;io influenzo te e tu influenzi me, in una compartecipazione tra due forme molto diverse di espressione, l'una estesa nel &lt;em&gt;tempo&lt;/em&gt; (musica) e l'altra nello &lt;em&gt;spazio&lt;/em&gt; (arte visiva)...&lt;br /&gt;&lt;br /&gt;non si sarebbe mai concretizzato nulla però!&lt;br /&gt;&lt;br /&gt;ma poiché questi pezzi non erano poi così male, ho deciso di pubblicarli su &lt;a title="SoundCloud" href="http://www.soundcloud.com"&gt;SoundCloud&lt;/a&gt; - che in pratica è una specie di Flickr per la musica. rende davvero facile condividere con chiunque delle tracce audio; il player qua sopra viene da lì, ed ha anche svariate funzioni carine, come i commenti "a tempo".&lt;br /&gt;l'account base è gratuito, ma un po' limitato... in ogni caso c'è dell'interessante musica elettronica là sopra.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2179030760266299422-5632368398932542512?l=myblackteapot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/5632368398932542512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2179030760266299422/posts/default/5632368398932542512'/><link rel='alternate' type='text/html' href='http://myblackteapot.blogspot.com/2009/07/in-maze-of-memories.html' title='in a maze of memories'/><author><name>blacktealover</name><uri>http://www.blogger.com/profile/07009043319199847342</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://1.bp.blogspot.com/_1pfelnO3RgA/S1A4EyIvp3I/AAAAAAAAAdk/djFPE4BjWxk/S220/dadacat.jpg'/></author></entry></feed>
