Začátečník
- Padik
- Člen | 11
Zdravim,
technologie jde kupředu, tak i my musíme kupředu.
Mám pár dotazů, jelikož jsem z quick startu moc nepochopil:
- 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.
- 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.
- Padik
- Člen | 11
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
- 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 dvojicuProduct:detail
takto?presenter=Product&action=detail
. Na pochopenie, ako vyzerá minimalistická aplikácie v Nette by mohol poslúžiť príkladskeleton
z distrubúcie. - 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
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
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
Ano jde mi to, abych měl „čisté“ url a nemusel kvůli tomu používat
pravidla rewrite.
Pro pochopení:
- 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
- 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‘})
- 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
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)
- Padik
- Člen | 11
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)
- Honza Marek
- Člen | 1664
Když si stáhneš ten zip s nette, tak je tam adresář examples. Tam jsou příklady, mimo jiné skeleton.
- arron
- Člen | 464
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:
- 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.
- 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)
- _Martin_
- Generous Backer | 679
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
_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)