Komponenta – jak správně programovat „modul“?

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

Dobrý den,
mám dotaz, nevím jestli postupuji správně, nebo to dělám špatně.

Vytvořil jsem si komponentu class UserComponent extends UI\Control která se mě stará defakto o veškerou práci s uživatelem, od registrace, editaci údajů, změna hesla, aktivace účtu, zapomenuté heslo,… v presenteru si pak jen vytvořím:

protected function createComponentUser()
    {
        // $data - nastavení hlášek
	// $emailSettings,  - připojení na email (přihlašovací údaje)
	// $this->getService('authenticator') - pro vygenerování správného hesla
	// $this->backLink - přesměrování po přihlášení na správný presenter - view
        return new UserComponent($this->user, $this->modelUser, $data, $emailSettings, $this->getService('authenticator'), $this->backLink);
    }

Takže když jsem si udělal novej projekt, stačilo mě „copy and paste“ do nového projektu a defakto vše funguje jak má… pak mě jen stačí volat {control user:registration}, {control user:password},…

Teď jsem si začal dělat něco obdobného, různé výpisy zboží. Funguje mě to v pořádku, takže kdekoliv v šabloně můžu načíst co chci, napříkad nejprodávanější zboží se stránkováním a hned podtím zboží závislé na levém menu atd… ale celá logika je tam braná jako v „presenteru“, ale přitom je to UI\Control. Bohužel v některé situaci bych si dokonce potřeboval vytáhnout pro který render se zrovna zobrazuje zboží [ne presenteru, ale komponenty] (hlavní zboží, náhradní díly, …), například v továrničce pro filtr by bylo pro mě jednoduší dle zvoleného view si vytáhnout data aktivních výrobců, ale nemůžu zde pouzít $this->view. Proto mám podobné továrničky, které se liší jen v načtenejch dat a u zpracování submitu se ukládá do jiného sessionu. Jdu na to špatně, nebo jdu správný směrem, ale zapomněl jsem na nějakou „blbůstku“?

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Mám jenom maličkou poznámku: pokud to někdy budeš chtít Ajaxově rozhýbat, nebudu chtít být poblíž :). Vzteky sníš křeslo…

tatyalien
Člen | 239
+
0
-

Ajaxově mě to funguje (výpis zboží, stránkování, přidávání do košíku)…
Registraci uživatele a změny, ajaxově nedělám…

Proto se taky ptám, jestli se to dělá takto, nebo ne… Přijde mě divný to všechno cpat do presenteru, kterej pak má „xy“ řádků a pro znovupoužitelnost z toho zobat jako holub…

Editoval tatyalien (18. 11. 2012 11:20)

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Tak to je zajímavý a gratulace… používání {control component:neco} totiž není kompatibilní se snippety.

tatyalien
Člen | 239
+
0
-

Nevím, asi nevyužívám vše plně ale dle mejch možností mě to stačilo. Proto se právě ptám, jak to dělat správně. Jestli vše tedy cpát do presenteru, ale jak pak na jednoduchou znovupoužitelnost bez nutnosti hledání co se vše má zkopírovat…

tatyalien
Člen | 239
+
0
-

Maj se tedy moduly programovat takto, nebo to cpát vše do presenteru, nebo dělat nějak jinak?