Začátečník

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

Zdravim,
technologie jde kupředu, tak i my musíme kupředu.
Mám pár dotazů, jelikož jsem z quick startu moc nepochopil:

  1. U Zendu to bylo, tak že jakmile se zavolal dejme tomu: „exapmple.com/neco“, tak se spustil i soubor v /views/script/index/neco.php , ale tady v Nette si tím nejsem jistý, co vlastně udělá takovéto zavolání stránky, pokud není definovaný router.
  2. Je tu možné něco jako header a footer.phtml?

Jsou to opravdu základní otázky, ale je to akutní. Navíc jakmile má člověk jednou nějaké zvyky, tak ho to stále láká používat to staré.
Díky za odpovědi, Solution.

Jod
Člen | 701
+
0
-
  1. Myslím, že musíš mať definovaný nejaký základný router, napríklad z examples.
  2. Ako v hocjakom php scripte to ide cez include, v nete aj cez subtemplate. Ale vo všeobecnosti by som využíval layouty, header/footer je vo frameworku zbytočné využívať.
Padik
Člen | 11
+
0
-

Jestli jsem to správně pochopil:
1)

<?php
$router[] = new SimpleRouter(array(
    'presenter' => 'Registrace',
    'action' => 'default',
    'id' => NULL,
), SimpleRouter::ONE_WAY);
?>

Tedy přes: examples.com/Registrace – zavolám soubor app/presenters/RegistracePresenter.php ?
2)To ano, ale co jsem pochopil přes quick start, tak layout definuje celou stránku, to tedy musím u každé stránky vytvořit default layout?

Editoval Solution (7. 4. 2009 13:20)

kravčo
Člen | 721
+
0
-
  1. ak nie je definovaný router, použije sa predvolený SimpleRouter, ktorý používa query parametre. V takom prípade teda zrejme „example.com/niečo“ vyhodí 404ku. V Nette odkaz vždy smeruje na dvojicu prezenter a akcia. Tvar url je routovaním plne prispôsobiteľný (napr. Davidove routy), napríklad v štandardnom simplerouteri vyzerá odkaz na dvojicu Product:detail takto ?presenter=Product&action=detail. Na pochopenie, ako vyzerá minimalistická aplikácie v Nette by mohol poslúžiť príklad skeleton z distrubúcie.
  2. Ako píše Jod, lepšie je použiť layout (ako je to v quickstarte), či novátorské a zatiaľ experimetnálne dedenie šablón.
Jod
Člen | 701
+
0
-

1. Skôr takáto routa zo skeleton:

$router[] = new Route('<presenter>/<action>/<id>', array(
        'presenter' => 'Homepage',
        'action' => 'default',
        'id' => NULL
));

Z nej môžeš mať takýto link: examples.com/presenter/akcia/id
tj. examples.com/Registrace = RegistracePresenter.php akcia default, bez id.

Ako píše kravco ide to aj bez rout, ale nebudeš mať pekné url, ale normálne z query parametrov.

2. Hocjaká stránka môže mať hocjaký layout. Šablona sa vkladá do layoutu. Takže napr. registrácia (RegistracePresenter akcia default) bude mať template default.phtml kde bude obsah stránky a bude využívať layout @layout.phtml, alebo @special.phtml, ktorý bude združovať spoločné prvky. Je to ako v každom frameworku skoro.
Pokiaľ by ťa ešte zaujalo je mužnosť dedenia šablon, ale podla Davida je to ešte nedotiahnuté.

Editoval Jod (7. 4. 2009 13:31)

kravčo
Člen | 721
+
0
-

Solution napsal(a):

Jestli jsem to správně pochopil:
1)

<?php
$router[] = new SimpleRouter(array(
    'presenter' => 'Registrace',
    'action' => 'default',
    'id' => NULL,
), SimpleRouter::ONE_WAY);
?>

Tedy přes: examples.com/Registrace – zavolám soubor app/presenters/RegistracePresenter.php ?

Nevolá sa súbor, na názvoch súborov vôbec nezáleží. Konvencia je taká, že prezenter je v súbore app/presenters/RegistracePresenter.php

$router[] = new Route('<presenter>/<view>', array(
    'presenter' => 'Homepage',
    'action' => 'default',
));

Táto routa pri adrese example.com/Something „volá“ triedu SomethingPresenter (prezenter Something a akciu default) a v nej metódy podľa životného cyklu prezenteru. Viac nájdeš v dokumentácii k routovaniu.

Výhoda Nette je, že routovanie stačí riešiť ako posledné.

Edit: píšem pomaly :-)

Editoval kravco (7. 4. 2009 13:38)

Padik
Člen | 11
+
0
-

Ano jde mi to, abych měl „čisté“ url a nemusel kvůli tomu používat pravidla rewrite.
Pro pochopení:

  1. Vytvořil jsem si router, který si mi doporučil a vložil ho do bootstrapu.php samozřejmě:
<?php
$router[] = new Route('<presenter>/<action>/<id>', array(
        'presenter' => 'Homepage',
        'action' => 'default',
        'id' => NULL
));
?>

2)K tomu si vytvořil presenter: app/presenters/RegistracePresenter.php

<?php
	print 'Zkouška';
?>

3)A ještě template: Registrace.phtml
Ale stále mi to hlásí 404, při volání stránky examples.com/Registrace

Editoval Solution (7. 4. 2009 13:44)

R2D2
Člen | 22
+
0
-
  1. Layout je něco co by mělo být společné pro všechny stránky, ale pokud to nejde … tak viz dokumentace k presenteru:

Každý presenter může mít vlastní layout uložený v souboru:
/templates/Homepage/@layout.phtml
/templates/Homepage.@layout.phtml
nebo se použije společný layout uložený v /templates/@layout.phtml.

Pokud tyto layouty mají mít něco společného (header, footer), můžeš tyto části mít zvlášť v souborech a includovat je (s curly bracket filtrem {include ‚dir/file.phtml‘})

  1. jen vysvětlení proč je to jinak: hlavní routa by neměla být ONE_WAY, ta pouze přesměrovává, zatímco ty potřebuješ něco plně funkčního (aby šly generovat patřičné odkazy). ONE_WAY použiješ třeba pro /index.php, aby taková adresa taky fungovala :) viz příklady v dokumentaci.

SimpleRouter zase nepracuje s hezkými url, používá normální query string.

ad tvůj presenter: Presenter musí být objekt, nenačítá se soubor ale vytváří se instance.

Padik
Člen | 11
+
0
-

Jasné, tak tedy umístil jsem do RegistracePresenter.php něco takového:

<?php
class RegistracePresenter extends BasePresenter
{

}
?>

Je to jen na zkoušku jestli to tak opravdu funguje, ale nefunguje, stále 404ka.
/Popř. mohl by mi někdo poslat takto hotovou strukturu? Abych to viděl pro ukázku? Určitě to bude lepší na pochopení.

Editoval Solution (7. 4. 2009 14:05)

R2D2
Člen | 22
+
0
-

a .htaccess máš nastavený správně? je tam potřeba všechno hodit na index.php aby se to do nette vůbec dostalo, že

jinak zkus mít v bootstrapu Debug::enable(Debug::DEVELOPMENT); jestli ti to náhodou nevyhodí nějakou smysluplnou chybu :)

Padik
Člen | 11
+
0
-

Nevypíše to naprosto nic, stále 404, co se týče struktury:

web_dir/app/controls
           /models
	   /presenters
	   /templates
  	   /temp
	   /.htaccess - Order Allow,Deny
			Deny from all
           /bootstrap.php
       /document_root
  	   /css
 	   /images
 	   /js
 	   /index.php
       /libs

Tak jednodušše, jak to je v quick startu.

Editoval romansklenar (7. 4. 2009 15:51)

kravčo
Člen | 721
+
0
-

kravco napsal(a):

  1. … Na pochopenie, ako vyzerá minimalistická aplikácia v Nette by mohol poslúžiť príklad skeleton z distribúcie.
Padik
Člen | 11
+
0
-

Solution napsal(a):
/Popř. mohl by mi někdo poslat takto hotovou strukturu? Abych to viděl pro ukázku? Určitě to bude lepší na pochopení.

To kravco: Co je to zač?

Honza Marek
Člen | 1664
+
0
-

Když si stáhneš ten zip s nette, tak je tam adresář examples. Tam jsou příklady, mimo jiné skeleton.

Padik
Člen | 11
+
0
-

Aha, jak prosté :-), to mě nenapadlo.
Díky všem.

arron
Člen | 464
+
0
-

Solution napsal(a):

Zdravim,
technologie jde kupředu, tak i my musíme kupředu.
Mám pár dotazů, jelikož jsem z quick startu moc nepochopil:

  1. U Zendu to bylo, tak že jakmile se zavolal dejme tomu: „exapmple.com/neco“, tak se spustil i soubor v /views/script/index/neco.php , ale tady v Nette si tím nejsem jistý, co vlastně udělá takovéto zavolání stránky, pokud není definovaný router.

Kazdy odkaz odkazuje de facto na kombinaci Presenter:Akce (nebudeme to dal komplikovat modulama). Tzn. ze v souboru presenteru neni potreba mit jen tridu dedici od tridy Presenter, ale musis mit definovanou konktetni funkci ktera je onou akci (napriklad renderDefault()) takze cely ten soubor registracePresenter.php by mel obsahovat minimalne neco takovehleho:

class RegistracePresenter extends BasePresenter
{
  public function renderDefalut()
  {
  }
}

Zalezi samozrejme jakou konkretnne volas akci, ber tohle hlavne jako schema.

  1. Je tu možné něco jako header a footer.phtml?

Jsou to opravdu základní otázky, ale je to akutní. Navíc jakmile má člověk jednou nějaké zvyky, tak ho to stále láká používat to staré.
Díky za odpovědi, Solution.

Muzes mit jeden soubor s layoutem nebo taky muzes mit pro kazdy presenter svuj vlastni layout (ale taky nemusis), popripade to vsechno ruzne includovat tak, jak pisi ostatni…ale to uz je trochu predmetem hlubsiho studia, jak asi casem zjistis…

Jinak onen zminovany „Skeleton“ je jeden z „examplu“ z distribuce Nette a je to v podstate „nejminimalističtější“ nette aplikace. Coz je dobry, protoze jednak nemusis delat porad dokola to same a jednak je to urcite funkcni (kdyz se spravne nastavi par drobnosti), takze se z toho da okoukat zakladni schema Nette aplikace a jejich principu…

A byl jsem pomalejsi :-/ ;-)

Editoval arron (7. 4. 2009 15:49)

Ola
Člen | 385
+
0
-

A taky pozor na Registrace.phtml vs. registrace.phtml především na Linuxu .. Viz některé z aktuálních vláken

_Martin_
Generous Backer | 679
+
0
-

Neměla by ta šablona být Registrace.default.phtml?

arron napsal(a):

Kazdy odkaz odkazuje de facto na kombinaci Presenter:Akce (nebudeme to dal komplikovat modulama). Tzn. ze v souboru presenteru neni potreba mit jen tridu dedici od tridy Presenter, ale musis mit definovanou konktetni funkci ktera je onou akci (napriklad renderDefault()) takze cely ten soubor registracePresenter.php by mel obsahovat minimalne neco takovehleho:

class RegistracePresenter extends BasePresenter
{
  public function renderDefalut()
  {
  }
}

Tuším, že pokud existuje šablona (SomePresenter.someAction.phtml), metody (renderSomeAction,…) nemusí být přítomny.

kravčo
Člen | 721
+
0
-

_Martin_ napsal(a):

Tuším, že pokud existuje šablona (SomePresenter.someAction.phtml), metody (renderSomeAction,…) nemusí být přítomny.

Metódy životného cyklu prezenteru – action*** a render*** – sú úplne nepovinné, teda pre konkrétnu akciu/pohľad sa volajú len v prípade, že sú definované.

V prípade, že neexistuje šablóna (a prezenter jej nastavenie nemení – uvažuje štandard), Nette bez ohľadu na prezenter a jeho metódy vyhodí BadRequestException (s hláškou „Missing template %file%.“).

Editoval kravco (7. 4. 2009 21:46)