ako spravne na komponentu, kam ju ukladat..?

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

Dobry den,

nette framework ma celkom chytil..ale priznam sa,ze v tom teda zatial pekne „plavu“..Nikdy som nerobil so ziadnym frameworkom, takze v tomto smere som uplny zaciatocnik..
Potrebujem na stranke vykreslit stromove menu, ktore by teoreticky malo aj nekonecno urovni, prakticky asi tak dve,tri.. v tomto nieje problem, spravim to pomocou rekurzivnej funkcie / metody, takym tym sposobom,ze kazdy prvok v menu ma parent_id.. ale nie o tomto som chcel.. :)

Docital som sa tu na, ze najlepsie to robit pomocou komponenty – control (createControl..).. Chcel by som to ale spravit tak, aby tento control nebol priamo v ziadnom presentery, kedze ju budem chciet pouzivat v roznych presenteroch, resp. pohladoch ..(neviem ci uvazujem spravne) teda by som mal nieco taketo

<?php

class Menu extends Control
{

}
?>

a teraz moje otazky. Kam umiestnit takuto komponentu? Do akeho adresara? Je dolezite ako sa subor bude volat ? musi sa niekde nastavovat cesta? Ako by mal vyzerat control v takejto komponente?

dakujem

Jod
Člen | 701
+
0
-

Skús použiť https://github.com/romcok/treeview , mám v tom spravené napr. takéto menu http://plaveckaakademia.sk/sk/bestfit

Majkl578
Moderator | 1364
+
0
-

Běžně se komponenty ukládají do app/components nebo app/controls. RobotLoader ji ale stejně najde kdekoliv.
Jedná se o createComponent, nikoliv o createControl.
Oddělení od presenteru je rozhodně dobrá myšlenka, já například odděluji i formuláře a v presenteru mám opravdu jen hloupé továrničky.


Zkus prosím psát s diakritikou. A před interpunkcí se nedělá mezera. :)

Editoval Majkl578 (18. 3. 2010 17:08)

thunderb
Člen | 11
+
0
-

Ďakujem,

ospravedlňujem sa, už budem písať s diakritikou. Potreboval by som to ale viac polopate vysvetliť.
1. mám presenter, napríklad homepage

<?php

	class HomepagePresenter extends BasePresenter
	{
		public function renderDefault()
		{

		}
		..
	}

?>

ten je uložený klasicky v app\presenters\HomePagePresenter.php

2. mám komponentu, napríklad spomínané menu, ktorá je uložená napríklad v app\components\MenuControl.php

3. V tejto komponente sa vytvorí stromové menu, ako to mi tiež nieje úplne jasné.. ale povedzme pomocou createComponentMenu()… tam budem mať nejaké funkcie, ktoré mi vrátia výsledok.. povedzme return $actualmenu – priznám sa, že vytváranie továrničiek ešte nie celkom rozumiem, teda rozumiem tomu príkladu na vytvorenie formulára. A aj tak formulár vytváram, ale ešte som nevytváral žiadny iný typ továrničky.

4. A tu sa vrátim k už spomínanému presenteru HomePage. Ako v ňom „zavolám“ vytvorenú „externú“ komponentu MenuControl, resp. továrničku v nej?

Jod ďakujem za príklad, pozeral som na neho, ale je na mňa ešte komplikovaný. Ale z toho čo som vyčítal mám pocit, že tam je createComponetTree ako súčasť presentera Homepage.

A na záver sa chcem spýtať, že ako to vyzerá s dokumentáciou? Nechcem nejako naháňať (aj keď už 8.3 bolo.. :)), skôr ponížene prosím :), pretože takto sa učím iba metódou pokus omyl, čo nieje až tak na škodu (len mám v tom dosť hokej) a napríklad sekcia „Tvoříme komponentu“ v quick start neexistuje..

Ďakujem za trpezlivé odpovede.. :)

Editoval thunderb (19. 3. 2010 18:26)

bazo
Člen | 620
+
0
-

ak mas v sablone

{widget menu}

zavola sa prave tvoja tovarnicka v presenteri s nazvom createComponentMenu, cize komponentu je zvycajne zbytocne volat v presenteri

takze ak chces mat to menu na kazdej stranke, vloz tu tovarnicku do BasePresenteru, aby si ju ostatne presentery podedili.

kapis?