Una din multele facilitati ale Firefox este posibilitatea configurarii mai multor motoare de cautare ce pot fi accesate direct din interfata browserului:

Putini stiu insa ca in principiu orice site poate oferi vizitatorilor posibilitatea adaugarii site-ului in cauza in lista motoarelor de cautare din Firefox. Voi ilustra pe un exemplu simplu. Sa presupunem un mic formular de cautare pentru orasele din Romania. Efectuarea unei cautari are ca rezultat o lista cu toate orasele ale caror nume incepe cu textul introdus de utilizator.
Va invit sa observati ca in momentul in care ati intrat pe pagina respectiva iconita care insoteste motorul de cautare selectat in Firefox a fost scoasa in evidenta:

Motivul este acela ca Firefox arata utilizatorului ca i-a fost "indicat" un motor de cautare in pagina. Un click pe iconita afiseaza un submeniu care are acum si optiunea 'Add "Orase RO"'. Selectand acea optiune este adaugat in lista si motorul nostru, cu titlul "Orase RO" si un favicon.
Putem acum cauta direct din browser. Inca una din facilitatile disponibile sunt si "sugestiile" care apar in timp ce utilizatorul tasteaza:

Primul pas este realizarea aplicatiei de cautare functionala pe "site". Urmatorul este crearea unui fisier .XML (il voi numi engine.xml), ce va contine urmatorul cod:
<?xml version="1.0"?>
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
<ShortName>Orase RO</ShortName>
<Description>Orase RO</Description>
<Image height="16" width="16" type="image/x-icon">http://dev.victorstanciu.ro/experimente/firefox-search-engine/favicon.ico</Image>
<Url type="text/html" method="get" template="http://dev.victorstanciu.ro/experimente/firefox-search-engine/cautare.php?keywords={searchTerms}"/>
</OpenSearchDescription>Ca explicatie, in momentul in care browser-ului ii va fi transmis acest fisier, acesta va configura automat plugin-ul respectiv asa incat:
Modul prin care Firefox va deveni "constient" de prezenta fisierului engine.xml este adaugarea in <head> a codului:
<link rel="search" type="application/opensearchdescription+xml" href="http://dev.victorstanciu.ro/experimente/firefox-search-engine/engine.xml" title="Orase RO" />
Totul functioneaza in momentul acesta, mai putin sistemul de sugestii in timpul tastarii. Mai intai, pentru a intelege mai usor, cautarea intoarce rezultatele sub forma unui array simplu cu elementele numele oraselor ce urmeaza a fi apoi afisate.
In fisierul engine.xml vom adauga linia:
<Url type="application/x-suggestions+json" template="http://dev.victorstanciu.ro/experimente/firefox-search-engine/cautare.php?json=da&keywords={searchTerms}"/>Pentru sugestii, Firefox are nevoie de termeni in format JSON de forma:
["query",["termen 1", "termen 2", etc]]
Unde "query" sunt cuvintele cheie introduse de utilizator iar "termenii" sunt rezultati in cazul nostru in urma efectuarii unei interogarii de genul "LIKE".
In fisierul cautare.php nu voi face altceva acum decat sa verific imediat dupa extragerea oraselor din tabela daca valoarea variabilei $_GET['json'] este "da", si in caz afirmativ voi trimite inapoi datele JSON fara a mai trece prin restul fisierului care in mod normal le afiseaza in browser:
if ($_GET['json'] == 'da') { echo(json_encode(array($keywords, $orase))); exit(); }
Ca observatie, folosesc json_encode pentru ca dispun de libraria JSON ce vine cu PHP 5. In cazul in care respectiva librarie / extensie nu este diponibila, puteti folosi una din multiplele diponibile online, sau puteti construi chiar voi string-ul necesar in acel format.
Specificatiile OpenSearch sunt aici.
Va multumesc.