cookieForm – automatické vyplňování textboxů

Kdysi jsem si napsal takový Javascriptový skriptík, který si uchovává informace zapsané do textových políček.

Využití tento skript najde zejména na různých webových formulářích. Například na eshopu, když si zákazník vyplňuje osobní údaje, adresy, atd., tak díky tomuto skriptu je stačí vyplnit jen jednou a po příští návštěvě jsou již tyto informace předvyplněny. Výhoda je v jednoduchosti řešení, kdy stačí tento skript inkludovat do stránek (+ jquery a jquery.cookie) a každému inputu, které má být uchováno v paměti, je třeba dát CSS třídu “cookiesave”. Skript si dokáže poradit i s checkboxy.

Odkaz pro stažení souboru: cookieForm

A/B test na webu nákupy dětem cz

Nedávno jsem si hrál se stránkami eshopu nakupy-detem.cz a vytvořil jsem tam zajímavou věc.
Když si kdokoliv vloží do nákupního košíku nějaké zboží (proště klikne na Vložit do košíku), tak se mu objeví vyskakovací okénko (fancybox), které zobrazí informace o vložení zboží do košíku a navíc uživateli nabídne další produkty ke koupi, které nějakým způsobem s tímto produktem souvisí (tzv. cross selling).
Graficky to vypadá celkem dobře. Posuďte sami:

Potřeboval jsem zjistit, jestli zákazníci nakoupí více, když se toto okno zobrází a nebo když je to přímo po kliknutí na tlačítko “Do košíku” okamžitě hodí na stránku nákupního košíku. Zajímá mě tedy, kolik bylo objednávek z té či oné verze testu, kolik byla celková suma objednávek, a také jaká byla průmerná objednávka.

Vytvořil jsem si tedy jednoduchy A/B test, který zabezpečuje přesné poloviční pokrytí obou metod, tedy, kdokoliv příjde na stránku, tak se mu do cookies uloží hodnota a/b testu (jestli se mu vyskakovací okno zobrazí, či nikoliv). Tato hodnota se drží u uživatele již napořád (cookies vyprší až za rok). V databázi si vždy inkremenuji číslo, kolik je testu A a kolik je testu B. Tím mám zaručeno, že se mi testy opravdu vždy střídají.

Nechal jsem to nějakou dobu běžet, a zde mám již konkrétní výsledky:

Test A Test B
Počet objednávek 102 72
Suma objednávek 43 829,- 32 060,-
Průměrna objednávka 429,- 445,-

Test A – vyskakovací okno
Test B – bez vyskakovacího okna

Z testu vyplývá, že více objednávek je z verze s vyskakovacím oknem, i když průměrná objednávka je větší u verze bez fancy boxu.

Samozřejmě se třeba ve vašem e-shopu mohou výsledky lišit, ale pro mě je to určitě signál, že vyskakovací okno na stránkách zůstane. Navíc se nyní budu snažit ho ještě vylepšit, například tím, že seznam produktů budu vybírat tak, aby se zde zobrazily výrobky, které budou pro uživatele více atraktivnější (např. dle jeho procházení webem a klikání na produkty). K tomu mě totiž vede jeden fakt, a to ten, že při pohledu na google analytics si na tyto produkty kliknulo za poslední měsíc jen 9 lidí ?!  Ono to zboží tam graficky velmi hezky působí, ale musím nějak zvednout jeho klikanost.

PHP 5.3 – co je nového?

Dne 30. června 2009 byla vydána nová verze PHP 5.3. Obecně, vyjde-li nová verze programovacího jazyka, může to v lidech (programátorech) vyvolávat rozporuplné reakce. Buď se na to těšili a očekávají rozšíření možnosti programovacího jazyka a tudíž i možnost vytvářet lepší a dokonalejší programové kódy, a nebo mají strach, jestli se novým možnostem dokáží snadno přizpůsobit. Já osobně rozhodně patřím do první skupiny a jelikož se jedná o můj oblíbený skriptovací jazyk a je do značné míry rozšířen coby jazykem dynamických webových aplikací, je mou povinností sepsat o této novince pár článků.

Co mě nejdříve zarazilo je verze samotného PHP. Leckdo (i já) čekal, že další verze se bude honosit číslovkou 6, nicméně si lidé z developerského týmu nejspíš řekli, že tolik novinek do této vypuštěné verze nebylo přidáno, proto verze 5.3. Nicméně si osobně myslím, že novinek je hodně, jmenujme hlavní jako např. jmenné prostory, late static binding a další. Sice již přesně nedokážu říci, jaké hlavní rozdíly byly mezi PHP 4 a PHP 5 (snad kromě vyšší podpory objektového programování), ale myslím si, že už jen jmenné prostory posouvají PHP 5.3 o řád výše oproti PHP 5.2.x. No, necháme polemizování, oni developeři PHPčka zřejmě vědí, co dělají :-). Raději se budu věnovat výčtu těch hlavních novinek, které nám nova verze přináší. Nejprve se zaměřím na podle mě hlavní novou funkci a sice jmenné prostory.

Jmenné prostory

Jedná z důležitých věcí, která již dlouho chyběla v PHP, nyní je konečně tady. Již končí doba, kdy bylo nutno vymýšlet stále nová jména pro funkce/třídy ale i konstanty. Nyní stačí skupinu souvisejících tříd přidat do nějakého jmenného prostoru a tímto je možné mít i stejné názvy funkcí/tříd, samozřejmě oddělené jmenným prostorem. Tohle je samozřejmě nejedná super výhoda jmenných prostorů, ale co to vlastně je ten jmenný prostor.

Ti co znají programovací jazyky jako JAVA, či C# nemusím poučovat, ale pro ty ostatní: jmenný prostor si můžeme představit jako „adresář“, kde budeme ukládat jednotlivé funkce/třídy a konstanty. Tímto se tyto funkce/třídy zakonzervují a jsou přístupné v daném „adresáři“. Tak jako normální adresáře souborového systému, tak i jmenné prostory můžeme zařazovat do podadresářů, takže nám může vzniknou jmenný prostor např. obchod\kosik\polozka.

Jmenné prostory se v PHP deklarují klíčovým slovem namespace. Tato deklarace však musí být v souboru umístěna hned jako první příkaz, a to i před jakýmkoliv ne PHPčkovským výpisem. Jedinou výjimkou je příkaz declare, kterým je možné si nastavit spouštěcí direktivy pro blok kódu. Samozřejmostí je možnost rozdělit kód do více souborů a vždy na tento soubor přiřadit stejný jmenný prostor. V jednom souboru je také možné deklarovat i více jmenných prostorů, ale tato možnost je z hlediska přehlednosti kódu dosti nevyužívaná. Když už je nutno vytvořit v jednom souboru dva a více jmenných prostorů, je možné je pro přehlednost alespoň uzavřít do složených závorek ( { a } ).

Volání funkcí/tříd z jmenného prostoru je možné 3 způsoby:

  1. Nekvalifikovaným jménem – tedy jménem samotné funkce/třídy, pokud se daná fukce/třída nachází ve jménem prostoru, ze kterého je funkce/třída volána.
  2. Kvalifikovaným jménem – pokud chceme volat funkce/třídu, která je v sub jmenném prostoru, daného jmenného prostoru, odkud je třída/funkce volána, tak jednoduše použijeme konstrukcti subjmennyprostor\funkce(), nebo dále i subjmennyprostor/dalsijmennyprostor\funkce(), atd.
  3. Plně kvalifikovaným jménem – pokud chceme volat funkci/třídu z jiného jmenného prostoru, než se právě teď nacházíme, použijeme konstrukci \jmennyprostor\dalsijmennyprostor\funkce().

Výše uvedenou třetí možností se prakticky dá volat jakákoliv funkce/metoda, ovšem zápis se tím hodně prodlužuje. Jen si zkuste každou fukci/třídu třídu volat plně kvalifikovaným jménem. Jednak to velmi nepraktické a jednak nám to stěžuje čitelnost kódu (i když s tou čitelností, alespoň přesně víme, jakou funkci/třídu voláme :). Proto je v PHP přidána možnost ( pomocí klíčového slova „use“)„inkludnout“ si jednotlivé jmenné prostory pod určitým aliasem (nebo i bez něj) a na tyto funkce/třídy v těchto jmenných prostorech se odkazovat nekvalifikovaným jménem.

Pokud například vložíme příkaz:

use mujprostor/subprostor;

můžeme se tak na funkce/třídy obsažené v mujprostor/subprostor odkazovat nekvalifikovaným jménem, např:

$o = new tridaVSubprostor();

Příkaz „use“ se také používá pro aliasy, jako např:

use mujprostor/subprostor/MyClass as mojeTrida;

$o = new mojeTrida(); // vytvori se objekt mujprostor/subprostor/MyClass

Jak je vidět, jmenné prostory nabízejí jednoduchou funkcionalitu a lze je jednoduše pochopit jako adresářovou strukturu definovaných funkcí/tříd a konstant, která nám nabízí možnost využívat vícekrát zavedené názvy funkcí/tříd v rámci jednoho projektu. V příštích článcích se dále podíváme na late static binding a další nové možnosti PHP.