De câteva zile am început să fiu foarte entuziasmat de Slax, o distribuţie live bazată pe Slackware. Din cauza unei tentative eşuate cu BackTrack şi convins de Bytz@ am încercat să descopăr care e treaba cu Slax.
Am văzut că are module, ştie destul de multe pentru o distribuţie live, aşa că am început să mai fac câte ceva. O parte din modulele la care am lucrat într-un fel sau altul le găsiţi în pagina de Slax modules. Ca utilizator convins de laptop (şi n-o să încep discuţia pe această temă pentru ca e irelevantă momentan) am vrut de la Slax ceea ce multe distribuţii nu mi-au oferit sau m-au pus să fac căutări zile întregi pentru a găsi o soluţie: wireless.
Deşi Slax vine cu KWifiManager, o aplicatie pentru uşurarea accesului la o reţea wireless, mie mi se pare total nefolositoare şi stupidă. Haideţi să vă spun şi de ce...KWifiManager e echivalent cu `no WPA`, adică tot ce ştie să facă e ceea ce se poate face relativ uşor cu `ifconfig`. Read the rest of this entry »
Aseară a început o mică discuţie pe Twitter referitor la o problemă de validare în cazul linkurilor care conţin `target="_blank"`. Dicuţia a început de la întrebarea lui Radu Ceucă şi au fost sugerate câteva soluţii.
Prima dintre ele îi aparţine lui @extraordinaire care a propus clasicul `window.open`. Din păcate problema e că arată urâţel un onclick care conţine un `window.open` şi presupun că va fi tratat ca pop-up de majoritatea adblock-urilor. O altă soluţie primită am înţeles că a fost clasicul `rel="external"` tratat cu Javascript.
Eu vreau să vă arat cea mai simplă şi curată soluţie folosind jQuery. Respectând zicala jQuery, `let's write less and do more`
$(document).ready( function () { $("a[@rel*=external]").attr( { target: "_blank" }); } );
Ne mai rămâne doar să includem libraria jQuery şi să punem acest script între <head> şi </head> şi totul e gata. Orice link care va avea `rel="external"` va fi deschis într-o pagină nouă. Simplu şi curat!
Cu un pas mai aproape de `Javascript Rockstar`
În ultimul post am realizat un mic tooltip cu ajutorul jQuery, caruia îi vom aduce nişte modificări în tutorialul de azi.
În unul din comentarii Brayn sugera ca tooltip-ul să funcţioneze în felul următor:
În consecinţă am aflat că avem nevoie de câteva lucruri...
1. Baza de date
Bun, haideţi să facem o bază de date nouă şi s-o populăm cu nişte informaţii (textele pe care le vom afişa mai apoi în tooltip).
CREATE DATABASE `tooltip` ;
Acum vom face şi o tabelă pe care eu am numit-o definition. Pe scurt este vorba de 2 câmpuri: uid - "unique id" (în care se va afla id-ul pe care noi îl vom citi din proprietatea alt a imaginii) şi text - "informaţia ce se va afişa în tooltip".
CREATE TABLE `tooltip`.`definition` ( `uid` INT NOT NULL AUTO_INCREMENT , `text` TEXT NOT NULL , PRIMARY KEY ( `uid` ) ) ENGINE = MYISAM
Dacă aveţi vreo nelamurire despre SQL puteţi consulta nişte manuale online. OK, acum mai trebuie să populăm baza de date proaspăt creată...
INSERT INTO `definition` (`uid`, `text`) VALUES (1, 'First tooltip information coming from a mysql database.'), (2, 'We also have a second database entry for showing you the text you were looking for!'), (3, 'And some more information. You like it, huh? <img src='http://www.bogdanconstantinescu.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> '), (4, 'Showing possible thanks to jQuery ajax httprequest <img src='http://www.bogdanconstantinescu.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ');
Acestea fiind făcute nu ne rămâne decât să trecem la urmatorul pas, realizarea fişierului care va face legătura cu serverul MySQL.
2. Scriptul server-side
Această etapă o puteţi face utilizând orice limbaj de programare server-side care vă place. Personal o să aleg php pentru că pe el îl stăpânesc cel mai bine. Pe scurt ceea ce trebuie să realizăm va arăta cam aşa:
Treabă simplă. În consecinţă ajungem la un rezultat asemănător cu cel de mai jos.
/* ne conectam la serverul mysql si selectam baza de date pe care vom lucra */ $dbh = mysql_connect("localhost", "user", "parola"); mysql_select_db("tooltip"); /* verificam sa fie curat inputul si ii scoatem spatiile goale din jurul sau */ $request = strip_tags(trim($_POST['uid'])); /* facem select-ul in functie de ID */ $qry = mysql_query(" SELECT text FROM `definition` WHERE uid='". $request ."'"); /* afisam textul pentru tooltip aferent ID-ului cerut; daca ID-ul cerut nu exista ii spunem acest lucru*/ if(mysql_num_rows($qry) != 0) echo mysql_result($qry, 0); else echo "Sorry, that does not exist!"; /* si in final inchidem conexiunea la server */ mysql_close($dbh);
Fişierul în cauză eu l-am denumit tooltip.php (ne va fi de folos în ultimul pas)
3. Let's do some Javascript magic
Bun, deci avem baza de date, avem fişierul care face output în funcţie de parametrul care îi este trimis (în cazul nostru metoda este POST) şi ne rămâne de făcut doar o funcţie nouă în script şi nişte mici modificări.
function request(id) { /* realizam pachetul de optiuni pentru functie */ var data = { type: "POST", url: "tooltip.php", data: "uid="+id, async: false } /* chemam functia si ii preluam raspunsul */ var response = $.ajax(data).responseText; /* si il intoarcem */ return response; }
Ne mai rămâne ca în funcţia din eventul mouseover să schimbăm valoarea variabilei text cu urmatoarea secvenţă.
var text = request(parseInt(this.alt));
În principu dacă am ajuns aici totul ar trebui să fie în regulă.
Pentru a vă demonstra ceea ce tocmai am realizat puteţi vedea un exemplu sau puteţi downloada scriptul Javascript si scriptul php.
Pentru orice nelămurire, sugestie sau "reclamaţie" foloseşte formularul de mai jos!
În acest post o să vă arăt flexibilitatea lui jQuery care vine în ajutorul developerului pentru a simplifica anumite etape ale procesului de dezvoltare.
Despre jQuery în câteva cuvinte
Ce fel de tooltip ne dorim?
Mi-am propus să realizez un tooltip simplu şi eficient pentru lamuriri adiţionale în completarea unui formular. În principiu am 2 soluţii de a realiza apariţia tooltip-ului:
Dintre cele 2 opţiuni eu am ales-o pe cea de-a doua pentru ca îmi place să nu pun userul să facă acţiuni în plus pentru a vedea nişte informaţii pe care le doreşte (doar de-asta trăim în vremurile în care cuvântul de ordine în webdevelopment este uzabilitate). Ne dorim ca user-ului să-i fie cât mai uşor să utilizeze toate funcţiile site-ului.
Realizarea tooltipului cu ajutorul jQuery
În primul rând trebuie să ne punem scriptul să ruleze după încărcarea completă a paginii.
$(document).ready(function () { });
Pentru realizarea apariţiei tooltip-ului la mouseover vom folosi proprietatea obiectului object.mouseover(); iar selecţia o vom face după un pattern simplu: "selectează-mi toate imaginile care au clasa 'tooltip' ". În consecinţă codul nostru va arăta în felul următor.
$("img.tooltip").mouseover( /* $("img.tooltip") este selectorul nostru care face selectia imaginilor care au clasa 'tooltip' */ function (event) { });
În pasul următor vom lua de pe imaginea noastră atributul alt a cărui valoare o vom afişa cu ajutorul tooltip-ului. Pentru asta va trebui să facem un <div> în care să afişăm informaţia explicativă. Vom avea nevoie şi de cunoştinţe de CSS pentru a putea stiliza obiectul şi pentru a-l putea duce în poziţia dorită de afişare. În cazul meu, CSS-ul este aşa:
#tooltip { position: absolute; font-family: Verdana, sans-serif; font-size: 10px; max-width: 150px; border: 1px solid #91C2DC; z-index: 10000; color: #333333; background: url('information.png') center left no-repeat #FFFFFF; margin: 10px 5px 5px 10px; padding: 20px 3px 3px 3px; }
Să vedem cum arată Javascriptul pentru cele descrise mai sus:
$("img.tooltip").mouseover( function (event) { var text = this.alt; /* tinem continutul proprietatii alt in variabila 'text' */ x = event.pageX+10; /* sa mutam tooltipul putin mai la dreapta ca sa nu fie acoperit de cursor */ y = event.pageY+10; /* si putin mai jos... */ $("body").append(" <div id='tooltip'>"+text+"</div> "); /* mai intai facem un div [asta reprezentand alternativa jQuery la DOM] */ $("#tooltip").css("left", x).css("top", y); /* si ne mai ramane doar sa-l mutam langa cursor */ } );
OK, am făcut tooltip-ul, dar va trebui să-l distrugem la acţiunea object.mouseout(); şi cu asta suntem aproape gata.
$("img.tooltip").mouseout( function (event) { $("#tooltip").remove(); /* cand se intampla mouseout distrugem div-ul */ } );
În funcţie de preferinţe mai rămâne doar să aranjăm totul într-o funcţie şi s-o folosim. Pentru asta eu am făcut un exemplu si de aici puteţi downloada scriptul complet.
Ceea ce tocmai am realizat e o variantă simplă şi nu se vrea în nici un caz o concurenţă la scripturile de tooltip existente, ci o aplicaţie a unor simple cunoştinţe de jQuery.
Orice părere, sugestie sau "reclamaţie" e bine-venită (folosiţi formularul din josul paginii)!