Vkládání a vytváření vlastních komponent
- Climber007
- Člen | 105
Zdravím všechny,
v Nette teprve začínám a narazil jsem na pár nejasností ohledně komponent
a jejich vytváření.
Chápu, že když mám objekt např. formuláře, zavolám pomocí továrničky
a ta si jeho třídu se načte někde z útrob Nette. Problém nastane, když
si chci definovat svou vlastní komponentu např. menu. Předpokládám, že
továrnička musí být v presenteru, který právě používám, ale už
nevím kam nahrát třídu s danou komponentou a její šablonou, tak aby ji
Nette stejně automaticky jako form načetlo.
Implementace do šablon už by pak měla fungovat, zatím jsem se dostal pouze
k chybám, že daný widget (control) neexistuje.
Díky za odpovědi
PS: Terminologii teprve vstřebávám, a dotaz na konec, jak to vypadá časově s dokončením tutorialu?
- Vojtěch Dobeš
- Gold Partner | 1316
V továrničce se vytváří instance libovolné třídy, která
implementuje rozhraní IControl
(myslím) nebo nějak tak…
podstata je v tom, že formulář se v továrničkách odnikud z útrob
zázračně nevytahuje: v každé továrničce najdeš new AppForm
(nebo jakékoliv jiné new
). Takže pokud chceš továrničku na
menu, napiš si takovou továrničku, která bude vracet instanci nějaké
tvojí třídy reprezentující menu. Tu třídu si napiš v libovolném
souboru, protože pokud používáš RobotLoader
z
Nette
(podívej se do config.ini
), tak ti tvou třídu
Nette
samo nejde bez jakéhokoliv include
nebo
require
.
Příklad:
protected function createComponentMenu()
{
$menu = new MyMenuClass;
return $menu;
}
- Climber007
- Člen | 105
Koukám, že to tu funguje až podezřele rychle :)
Díky za rady, hned to vyzkouším když by něco hned se ozvu!
- Climber007
- Člen | 105
Napadla mně další otázka, co když se komponenta potřebuje připojit do databáze? Využívá modulu nějakého presenteru nebo si všechno obstarává sama?
- Vojtěch Dobeš
- Gold Partner | 1316
Záleží jak si to napíšeš:). Někdy je komponenta pouze „specifickým
způsobem vykreslení dat či přijetí dat“ (třeba takový formulář je
komponentou, ale s modelem nijak nekomunikuje – data přijímá i vrací
vždy přímo v presenteru
). Jindy může být komponenta sama
zapouzdřením komunikace s modelem (třeba výpis novinek – sama uvnitř
sebe si vytváří přístup k modelu, žádá jej o seznam novinek, vypisuje
je), a v presenteru
nepříjímá nic (nebo třeba parametr, kolik
novinek má vypsat apod.)