Vkládání a vytváření vlastních komponent

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Climber007
Člen | 105
+
0
-

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?

Bertram
Člen | 75
+
0
-

Já jsem se inspiroval příklady ve složce examples z distribuce.

app/components/nejakaControl.php //pro komponentu
app/components/nejakaControl.latte //pro šablonu komponenty
Vojtěch Dobeš
Gold Partner | 1316
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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.)