25 giugno 2010

Utilizzare JQuery UI Autocomplete con PHP e Mysql

scritto daMauro Accornero

In questo articolo vedremo come integrare facilmente il widget autocomplete di Jquery UI all’interno di pagine dinamiche.

L’utilizzo è molto semplice, come prima cosa è necessario scaricare il pacchetto completo di Jquery UI compreso di tema personalizzato o standard e collegare i rispettivi files alla pagina dinamica.

<link rel="stylesheet" href="css/theme/ui.theme.css" type="text/css"/>
<script src="js/jquery.min.js" type="text/javascript"></script>
<script src="js/jquery-ui.min.js" type="text/javascript"></script>

Ora possiamo aggiungere l’elemento input che utilizzero per l’autocomplete, per comodità di selezione verrà aggiunto un id.

<input value="Insert your tag here" />

Per ciò che riguarda javascript iniziamo applicando un autocomplete base al campo input

$(function() {var myTags = ["tag1", "tag2", "anotherTag", "simpleTag"];
$("#tags").autocomplete({source: myTags});});

In questo caso settiamo come opzione “source” che specifica come sorgente l’array “myTags”.Per rendere dinamico l’autocomplete modifichiamo la sorgente con un file dinamico che si occuperà di effettuare la ricerca

 $("#tags").autocomplete({source: "tagSearch.php"});

Di seguito un esempio per tagSearch.php:

//creazione di un array vuoto
$return_arr = array();

//dati di accesso a mysql e al db
$dbhost = 'YOUR_SERVER';
$dbuser = 'YOUR_USERNAME';
$dbpass = 'YOUR_PASSWORD';
$dbname = 'YOUR_DATABASE_NAME';

//definisco la variabile di ricerca dell'utente
$term = $_GET("term");

//connessione al a mysql
$conn = mysql_connect($dbhost, $dbuser, $dbpass)
or die ('Impossibile connettersi a Mysql');
//selezione ddb
mysql_select_db($dbname);
//se connesso
if ($conn)
{
//query select
$fetch = mysql_query("SELECT * FROM tags WHERE MATCH(tagName) AGAINST('".$term."*')");
//loop dei dati
while ($row = mysql_fetch_array($fetch, MYSQL_ASSOC)) {
$row_array['value'] = $row['tagName '];
array_push($return_arr,$row_array);
}

}
//chiudo la connessione a mysql
mysql_close($conn);
//restituisco l'array in formato json
echo json_encode($return_arr);

La variabile $terms viene ricavata dall’url, l’autocomplete di Jquery UI richiama infatti il file search.php con la variabile term (es. search.php?term=ciao) ad ogni change nel campo input.Considerato che la variabile term viene aggiornata e inviata ad ogni change del campo ho utilizzato MATCH AGAINST nella query affinchè ad ogni richiesta mysql cerchi l’input dell’utente seguito da altro.Il risultato è che a fronte di una ricerca “a” verranno restituiti tutti i dati che iniziano per “a”, aggiungendo lettere verranno restituiti solo i dati che corrispondono ai criteri della ricerca.

L’autocomplete di JQuery UI prevede una vasta serie di opzioni con le quali è possibile manipolare i dati prensenti nell’input e nei risultati, creare una cache dai dati e customizzare aspetto e animazioni dell’input.Per maggiori informazioni consiglio una lettura della documentazione disponibile sulla pagina dedicata.

Tag: , ,

14 giugno 2010

Realizzare select multilingue con Jquery

scritto daMauro Accornero

In questo articolo vedremo come realizzare un selettore multilingue con html, css e jquery, per vedere l’ esempio completo visitate la demo.

Per questo tutorial ho utilizzato world-flags-sprite, una soluzione css che offre una vasta gamma di bandiere di numerosi stati attraverso la tecnica degli sprites css, consiglio vivamente questa soluzione che permette di aggiungere facilmente le immagini per nuove lingue.
Iniziamo creando un nuovo file html in cui inseriremo il nostro markup. L’esempio qui proposto è pensato in chiave statica ma può essere facilmente applicato anche a pagine dinamiche gestendo l’output del testo e delle classi.

HTML

<ul>
<li>
<a href="http://www.mywebsite.it/index.html?lang=it" title="Italy">
<span></span>Italy
</a>
</li>
<li>
<a href="http://www.mywebsite.it/index.html?lang=us" title="Usa">
<span></span>Usa
</a>
</li>
<li>
<a href="http://www.mywebsite.it/index.html?lang=uk" title="England">
<span></span>England
</a>
</li>
<li>
<a href="http://www.mywebsite.it/index.html?lang=fr" title="France">
<span></span>France
</a>
</li>
<li>
<a href="http://www.mywebsite.it/index.html?lang=es" title="Spain">
<span></span>Spain
</a>
</li>
<li>
<a href="http://www.mywebsite.it/index.html?lang=de" title="Germany">
<span></span>Germany
</a>
</li>
</ul>

Definiamo una lista non ordinata con  all’interno degli elementi “li” che conterranno le singole lingue. In ogni singola voce definiamo un link che conterrà l’url al sito nella rispettiva lingua.In questo esempio ogni link rimanda ad una pagina fittizia a cui viene aggiunta una variabile per la selezione della lingua. Nel link inseriremo un elemento span che utilizzaremo come contenitore per l’immagine della bandiera e il testo della lingua.

Le classi presenti sull’elemento “ul” sono relative al layout della lista (.langSelect) e al template applicato (“.black”,”.white” oppure “.grey”). Le classi “.f16″ e “flag” sono relative a flags16.css e servono per mostrare l’immagine delle rispettive bandiere.

CSS

La prima parte del css è dedicata al template. Colori, bordi e immagini di fondo sono gestiti dalle classi “.black” , “.white” e “.grey”.

/*black theme*/
.black{background-color:#000;border:1px solid #444;}
.black li:first-child{background-position:right top;}
.black a{color:#fff;}
.black a:hover{background:#111;}
.black li:first-child + li{border-top:1px solid #444;}
/*white theme*/
.white{background-color:#eee;border:1px solid #bbb;}
.white li:first-child{background-position:right -25px;}
.white a{color:#333;}
.white a:hover{background:#ddd;}
.white li:first-child + li{border-top:1px solid #bbb;}
/*grey theme*/
.grey{background-color:#ccc;border:1px solid #eee;}
.grey li:first-child{background-position:right -50px;}
.grey a{color:#000;}
.grey a:hover{background:#999;}
.grey li:first-child + li{border-top:1px solid #aaa;}

La seconda parte del css gestisce il layout della lista definendo dimensioni, spaziature e larghezza.

.langSelect{
    width:150px;
    -moz-border-radius:10px;
    -webkit-border-radius:10px;
    border-radius:10px;
    text-align:left;
    list-style:none;
}
.langSelect li{
    line-height:25px;
    position:relative;
}
.langSelect a{
    padding-left:35px;
    position:relative;
    text-decoration:none;
    display:block;
}
.langSelect li:first-child a:hover{
    background:transparent;
}
.langSelect li:first-child{
    background-image:url(../img/bg_lang_select.png);
    background-repeat:no-repeat;
    -moz-border-radius:10px;
    -webkit-border-radius:10px;
    border-radius:10px;
}
.langSelect li:last-child a:hover{
    -moz-border-radius:0 0 10px 10px;
    -webkit-border-radius:0 0 10px 10px;
    border-radius:0 0 10px 10px;
}
.langSelect a span{
    width:16px;
    height:16px;
    position:absolute;
    top:50%;
    margin-top:-8px;
    left:10px;
}

In questo modo è possibile creare stili customizzati in poco tempo e senza dover metter mano al layout.

JQUERY E JAVASCRIPT

Prima di inizare con il codice javascript assicuratevi di aver incluso la libreria  jquery nella pagina, la potete trovare sul sito di jquery o in alternativa caricarla attraverso le Google AJAX Libraries API.
Lo script può essere incluso sia internamente che esternamente alla pagina html.

Il codice verifica innanzitutto il caricamento della pagina.

 $(function() {

Una volta certo della presenza degli elementi nel DOM inizia nascondendo tutti gli elementi “li” successivi al primo.

$(“.langSelect li:first-child”).nextAll().hide();

La seguente istruzione verifica l’hover del mouse sulla lista.

 $(".langSelect").hover(function(){

Al mouseover anima gli elementi successivi al primo “li” mostrandoli.

 $(this).find("li:first-child").nextAll().not(":animated").slideDown(500);

Mentre al mouseout li nasconde

 $(this).find("li:first-child").nextAll().not(":animated").slideUp(500);

Una piccola nota su questo passaggio, è possibile notare l’utilizzo di .not(“:animated”) questa aggiunta impedisce che le animazioni partano o si ripetano quando gli elementi sono ancora animati.
Una volta completate le istruzioni sull’animazione definiamo il codice da eseguire al click della singola voce.

 $(".langSelect li").click(function(){

Come prima cosa è necessario verificare se la voce cliccata sia quella già selezionata.

 if($("li").index(this) == 0){

in quel caso annulliamo la chiamata del link e non eseguiamo ulteriori istruzioni

 return false;

In questo caso return false sull’elemento li annulla la chiamata del link al suo interno impedendo la chiamata alla pagina su cui l’utente già si trova.
Nel caso l’utente clicchi su una lingua diversa da quella selezionata spostiamo questa voce come prima della lista.

 $(this).prependTo($(this).parent("ul"));

Subito dopo animo il menu per nascondere le altre lingue.

 $(this).parent("ul").find("li:first-child").nextAll().slideUp(400,

E aggiungo una funzione di callback che al completamento dell’animazione rimanda l’utente all’url presente nel link della lingua cliccata.

 function (){
 location.href = $(this).find("a").attr("href");
 });

Per concludere annullo la chiamata del link tradizionale ed evitare l’immediata chiamata alla pagina in questione.

 return false;

Per vedere l’ esempio completo visitate la demo.

Tag:

14 aprile 2010

Lezioni di HTML 5
Lezione 1 – Impostare il file HTML

scritto daMauro Accornero

L’HTML 5 è ormai una realtà affermata, le attuali specifiche attendono solo gli ultimi commenti prima di essere dichiarate ufficiali e i browser già permettono un valido  supporto che permette di iniziare ad utilizzare parte delle features offerte da questo linguaggio per i propri progetti.

Vediamo quindi come iniziare ad impostare una pagina in HTML 5 per un eventuale sito web.

Sintassi

Per creare il nostro primo file HTML è sufficiente definire un nuovo file testuale con estensione .html o .htm, al suo interno possiamo iniziare a definire la struttura della nostra pagina.

<html>
<head></head>
<body></body>
</html>

L’HTML 5 come tutti i linguaggi di marcatura ipertestuale presenta una struttura base racchiusa nell’elemento <html> con all’interno i due elementi <head> e <body> per una corretta suddivisione tra informazioni e contenuto.

Il doctype

Una delle caratteristiche più importanti dell’HTML 5 è lo shorten doctype o doctype dtdless

<!doctype html>

Questo doctype privo di indicazioni sul dtd o sul linguaggio utilizzato, forza automaticamente il browser in modalità standard senza l’aggiunta di ulteriore codice.
Nonostante la sua semplicità vanta un ottimo supporto, non a caso è utilizzato da tempo sulla homepage di Google e da molti altri siti.

Gli attributi

Non vi sono grandi differenze negli attributi rispetto ad altre versioni dell’HTML. Per enunciare l’attributo è sufficiente utilizzare il nome seguito da un = e il valore. Nell’HTML 5 il valore dell’attributo può essere dichiarato a scelta senza apici, con apici singoli o apici doppi. Tuttavia il mio consiglio è quello di utilizzare sempre apici singoli o doppi per mantenere più ordinato il codice.

<html lang="it">

Dichiarazione del Charset

Per la dichiarazione del charset della pagina è possibile utilizzare la classica sintassi:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

o in alternativa una versione contratta altrettanto compatibile e funzionante

<meta charset="utf-8">

In ogni caso è sempre opportuno (se non doveroso) esplicitare un charset valido per la pagina, possibilmente un UTF-8 piuttosto dell’ISO (questo per ragioni che in effetti sarebbe opportuno trattare in un altro post :) ).

CSS e JAVASCRIPT

Per il collegamento a risorse diverse dall’HTML, per esempio i javascript possiamo tranquillamente omettere l’attributo type.

<script>
//script javascript interno
</script>

anche nel caso di javascript interni alla pagina

<script src="js/javascriptesterno.js"></script>

Stesso discorso vale per i fogli stile con l’aggiunta di un attributo rel che diventa fondamentale nel caso si utilizzi il tag link.

<link href="css/fogliodistileesterno.css" rel="stylesheet">

Nel caso si utilizzi l’elemento style per definire fogli di stile interni, l’attributo rel non è necessario

<style>
/*foglio di stile interno*/
</style>

Ed infine ecco il nostro file in HTML 5:

<!doctype html>
<html lang="it">
<head>
<meta charset="utf-8">
<title>La mia prima pagina in HTML 5</title>
<link href="css/fogliodistileesterno.css" rel="stylesheet">
<style>
/*foglio di stile interno*/
</style>
<script src="js/javascriptesterno.js"></script>
<script>
//script javascript interno
</script>
</head>
<body>
</body>
</html>

Nel caso voleste fare un test, potete provare a validare il codice nel validatore w3c per l’HTML 5. Il validatore  è ancora sperimentale ma è basato sulle attuali specifiche disponibili.

E i nuovi tag? Canvas? Video?

C’è molto da dire sull’HTML 5, per questioni pratiche ho pensato di suddividere i vari argomenti in più post, nei prossimi articoli vedremo come verificare la compatibilità del browser con le varie features dell’HTML 5,  i nuovi elementi messi a disposizione e il loro funzionamento,  semantica del linguaggio e altro ancora.
Che dire… passate a trovarmi su howtoweb.it oppure controllate i feed rss per rimanere aggiornati sugli ultimi post.

Alla prossima!

10 agosto 2009

Integrare le API di Youtube con PrettyPhoto

scritto daMauro Accornero

esempio_youtube_api

L’integrazione del video nei siti web è ormai diventata una pratica comune, l’inserimento in una pagina web è molto semplice soprattutto se supportato da un servizio che ospita e gestisce i contenuti video come Youtube.

Nell’articolo di oggi mostrerò una semplice integrazione tra le Youtube API e il plugin per JQuery Prettyphoto per ottenere una galleria di video in stile Youtube da inserire nella pagina del proprio sito.

Le Youtube API non sono altro che librerie messe a disposizione degli sviluppatori per gestire con semplicità i contenuti di Youtube su un sito esterno. E’ possibile integrarle con diversi linguaggi e tecnologie, nell’esempio di oggi vedremo com’è possibile utilizzarle con javascript. Per ulteriori informazioni è possibile consultare la relativa documentazione.

PrettyPhoto è un plugin per jquery simile in tutto e per tutto a Lightbox (per prototype e scriptaculus) ulteriori informazioni sono disponibili sul sito ufficiale di PrettyPhoto.

Leggi l’articolo completo

Tag: , , , , ,

3 agosto 2009

Come utilizzare qualunque font nelle pagine web con Cufon

scritto daMauro Accornero

Uno dei più grandi limiti del web per i designer è la ristretta scelta data dai font utilizzabili sul web. Normalmente è possibile definire una o più famiglie di font tramite la proprietà font-family nei css, esprimendo tramite l’ordine quale famiglia utilizzare nel caso l’utente non abbia installato un determinato font.

Il grande problema è rappresentato dal fatto che non tutti i sistemi operativi hanno gli stessi font installati e solo poche famiglie di caratteri risultano comuni a tutti gli utenti.

Per far fronte a questo problema ed avere la possibilità di utilizzare un qualunque font su una pagina web è possibile utilizzare una tecnici di font replacement (nota anche come sIFR).

Esistono numerose tecniche per raggiungere il proprio obiettivo, una delle più recenti e funzionali è Cufon.

Cufon permette la sotituzione del normale web font con un altro, tramite uno script Javascript che utilizzando VML e Canvas permette una rapida sostituzione del testo con il carattere desiderato senza modificare il codice html. Leggi l’articolo completo

Tag: , ,