CodeIgniter – kde začít?
Pokud se chcete naučit programovat v PHP frameworku CodeIgniter, povedou vaše první kroky do uživatelského manuálu. Stručně a přehledně zde najdete všechny podstatné informace a přehled controllerů a helperů. Pokud jste se již někdy s nějakým MCV frameworkem setkali, bude pro vás pochopení základů otázkou jedné hodiny.
Jak se však dozvědět víc o konvencích a různých vychytávkách, pro které mají u CakePHP tzv. The Bakery? U CI by tuto funkci měla zastávat Wiki, ale články jsou zde poměrně chaoticky řazené a dobrat se řešení je složité. Spousta materiálů je přepisována na základě příspěvků ve fóru, kam by měly tedy zamířit vaše první kroky.
Jakousi sbírkovou aplikací napsaných v CodeIgniter se má stát web CIForge, bohužel projektů je opravdu poskrovnu.
Na začátek doporučuji prostudovat zdrojové kódy následujících aplikací:
I ♥ Rant
Webová služba pro chronické stěžovatele :-). Zdrojový kód obsahuje např. ajaxové hodnocení, přidávání příspěvků do databáze.
Zdrojový kód: http://www.iheartrant.com/app.tar.gz
FreakAuth
Pokud plánujete mít na stránkách skripty pro přihlašování/odhlašování/registraci uživatelů, patří FreakAuth Light k nejpopulárnějším řešením. Bohužel se z něj stává trochu bumbrlíček a autoři vám vnucují i nepodstatné věci jako struktura stránky. Mimo zdrojového kódu najdete na stránkách i tutoriály.
WWW: http://www.4webby.com/freakauth
Bambooinvoice
Firemní aplikace pro správu zákazníků od Dereka Allarda - jednoho z významných programátorů CI.
WWW: http://www.bambooinvoice.org/
Screencast od Dereka Allarda
Na závěr doporučuji zhlédnout video od Dereka Allarda, ve kterém programuje auto-suggest ve stylu vyhledávání u Google.
Rozbalovací pole formuláře v CodeIgniter
Ke zjednodušení práce s formuláři má framework CodeIgniter vlastní Form Helper. Práce s ním má sice některá omezení a výhod není mnoho (snad jen relativní odkazování atributu ACTION), vytvořený kód je však elegantní. Zde je jednoduchý příklad, jak v kombinaci s ActiveRecords vytvoříte rozbalovací políčko naplněné informacemi z databáze.
Dejme tomu, že máme přehled písniček a u každé chceme z rozbalovacího políčka vybrat příslušnou hudební skupinu. Hudební skupiny jsou umístěny v tabulce skupiny s dvě sloupci: id_skupiny je unikátní číslo (které v tomto případě použijeme jako atribut value) a nazev_skupiny (to jest samotný option).
Výběr z databáze:
$dotaz = $this->db->get('skupiny');
Pro každý vybraný řádek vytvoříme PHP pole s klíčem id_skupiny a hodnotou nazev_skupiny:
foreach ($dotaz->result() as $radek)
{
$kategorie[$radek->id_skupiny] = $radek->nazev_skupiny;}
Tento řádek již vytvoří z našeho pole rozbalovací seznam s atributem name=”seznamskupin”:
echo form_dropdown('seznamskupin', $kategorie);
Pokud byste chtěli mít v seznamu určitou položku vybranou pomocí select=”selected”, je třeba ji uvést jako třetí parametr u form_dropdown(). Chceme-li mít v seznamu určitou neutrální výzvu, je třeba ji do pole kategorie vložit před spuštěním foreach().
Např:
$kategorie['index'] = 'Vyberte položku';
Políčko bychom pak vytvořili za pomoci:
echo form_dropdown('seznamskupin', $kategorie, 'index');
Bohužel složitější formátování např. s využitím optgroup je již hodně složité a musíme si vytvořit vlastní helper nebo editovat přímo kód Form Helperu jako v tomto příspěvku, kdy se jednotlivé skupiny vytvoří za pomoci vícerozměrného pole.