Cizojazyčné stránky – persistentní parametr
- Taps
- Člen | 169
Zdravím, na základě této diskus https://forum.nette.org/…ejazycny-web chci zprovoznit jazykové mutace. Problém mám však s tím, že se mi nepředává v url persistentní parametr. Postupoval jsem dle https://forum.nette.org/…ejazycny-web#…
ale zobrazuje se mi chyba
Declaration of BasePresenter::startup() should be compatible with Nette\Application\UI\Presenter::startup()
- enumag
- Člen | 2118
Dle chyby má tvá metoda startup v BasePresenteru nějaký parametr, což je nesmysl. Možná to tak bylo dříve ale perzistentní parametry se teď dělají přes public vlastnosti (asi takhle). Podívej se do dokumentace presenterů. ;-)
Editoval enumag (30. 12. 2012 21:46)
- Taps
- Člen | 169
@Schmutzka
Díky za tip.
Ještě řeším problém s tím, že pokud mám adresu www.neco.cz/fotoalba/deti, tak mi do šablony nepřijde proměnná, kterou odesílám z presenteru. Pokud mám adresu jen www.neco.cz/fotoalba, tak vše funguje v pořádku. Problém bude asi ve vyznačeném řádku, ale nevím jak tento problém vyřešit
V BasePresenteru mám toto
abstract class BasePresenter extends Nette\Application\UI\Presenter
{
/** @persistent */
public $lang;
protected function beforeRender()
{
**$this->setView( $this->lang . '/' .$this->action );**
}
}
routování mám nastaveno takto
$container->router[] = new Route('index.php', 'Homepage:default', Route::ONE_WAY);
$container->router[] = new Route('[<lang cs|en>/]fotogalerie/<slozka>',array(
'lang' => 'cs',
'presenter' => 'Fotoalba',
'action' => 'default',
));
$container->router[] = new Route('[<lang cs|en>/]<presenter>/<action>', array(
'lang' => 'cs',
'presenter' => 'Homepage',
'action' => 'default',
));
Editoval Taps (31. 12. 2012 10:08)
- Taps
- Člen | 169
@Lexi
samozřejmě že předávám proměnnou z presenteru do šablony,
viz níže
FotoalbaPresenter
<?php
class FotoalbaPresenter extends BasePresenter
{
public function renderDefault($slozka)
{
$this->template->images = Nette\Utils\Finder::findFiles('*.jpg')->in(WWW_DIR. '/foto/'. $slozka);
}
}
default.latte
{block content}
<div class="obsah">
<div class="content">
<div id="galleria">
{foreach $images as $image}
<a href="{$basePath}/foto/{$slozka}/{$image->getFilename()}">
<img src="{$basePath}/foto/{$slozka}/{$image->getFilename()}" />
</a>
{/foreach}
</div>
</div>
</div>
{/block}
šablonu mám umístěnou v /templates/Fotoalba/cs/default.latte
Vypisuje se mi
Notice Undefined variable: images
Editoval Taps (31. 12. 2012 15:54)
- Badaboom
- Člen | 33
Podívej se na životní cyklus presenteru
Pro naplnění můžeš použít metodu
action<Action>
.
- Badaboom
- Člen | 33
public function actionDefault($slozka) {...}
Action != view. V metodě renderDefault
plníš view
default
. V metodě actionDefault ještě neplníš konkrétní
view. Normálně framework zavolá view stejného jména jako je action. Ty to
view ale v beforeRender
měníš.
Editoval Badaboom (1. 1. 2013 19:57)