Persistentni promenne komponenty mi znici tvar url
- MelkorNemesis
- Člen | 36
Nette 2.0.1, PHP 5.3.8
Ahoj, mam nasledujici router
<?php
$container->router[] = new Route('<slug>-<id [0-9]+>[!.html]', array(
'module' => 'Front',
'presenter' => 'Homepage',
'action' => 'default',
'slug' => 'stranka'
));
?>
tzn. ze mam url adresy ve tvaru forum-21.html, splatkovy-prodej-18.html apod.
stranka forum-21.html obsahuje komponentu Forum (zkracene) ->
<?php
namespace Components;
class Forum extends Control
{
/** @persistent */
public $type = 'all';
/** @persistent */
public $page = 1;
/** @var int */
private $itemsPerPage = 20;
public function render()
{
// something goes here
}
}
?>
Pokud ve foru prepnu na jinou stranu, nez prvni (vychozi hodnota persistentniho parametru), tak se mi url zmeni na /homepage/default/21.html?forum-page=5, pritom routu napsanou na tento request mam a nevidim duvod, proc by persistentni parametr mel url nicit?
Neni to nic zavazneho, funguje to, ale nelibi se mi to. Setkal se s tim uz nekdo?
Diky
- Ot@s
- Backer | 476
Pokud chceš mít stránkování v URL (tj. ne jako parametr), musíš to
nadefinovat do definice speciální routy pro fórum (tj. do bootstrapu +
persistentní proměnnou $page
do presenteru). V komponentě bys
pak musel psát něco jako $this->presenter->page=5
. Je to
sice krkolomné, ale fungovalo by to.
- MelkorNemesis
- Člen | 36
Ot@s napsal(a):
Pokud chceš mít stránkování v URL (tj. ne jako parametr), musíš to nadefinovat do definice speciální routy pro fórum (tj. do bootstrapu + persistentní proměnnou
$page
do presenteru). V komponentě bys pak musel psát něco jako$this->presenter->page=5
. Je to sice krkolomné, ale fungovalo by to.
To se mi zda jako hloupost, url ve tvaru /forum-21.html?foo=1&bar=2 nic nedela (test), ale parametry v url zustanou tak, jak jsem je tam napsal, takze nevim, proc by persistentni parametr mel neco takoveho delat. Navic je to strankovani te komponenty a ta by mela byt odstinena od presenteru, funguje samostatne, kdyz ji dam do jineho presenteru, nebudu prepisovat router a davat promennou do jineho presenteru.
- llook
- Člen | 407
Ot@s napsal(a):
Pokud chceš mít stránkování v URL (tj. ne jako parametr), musíš to nadefinovat do definice speciální routy pro fórum (tj. do bootstrapu + persistentní proměnnou
$page
do presenteru). V komponentě bys pak musel psát něco jako$this->presenter->page=5
. Je to sice krkolomné, ale fungovalo by to.
Jemu jde o něco jiného. Cílem je adresa
/forum-21.html?forum-page=5
, jenže link mu generuje
/homepage/default/21.html?forum-page=5
.
Chtělo by to vidět i ostatní routy a pravděpodobně přeházet jejich
pořadí. Router použije první routu, na kterou se dají parametry odkazu
napasovat. Jestli máš ještě před tou svojí routou klasiku
<presenter>/<action>/<id>
, tak použije tu.
- MelkorNemesis
- Člen | 36
llook napsal(a):
Ot@s napsal(a):
Pokud chceš mít stránkování v URL (tj. ne jako parametr), musíš to nadefinovat do definice speciální routy pro fórum (tj. do bootstrapu + persistentní proměnnou
$page
do presenteru). V komponentě bys pak musel psát něco jako$this->presenter->page=5
. Je to sice krkolomné, ale fungovalo by to.Jemu jde o něco jiného. Cílem je adresa
/forum-21.html?forum-page=5
, jenže link mu generuje/homepage/default/21.html?forum-page=5
.Chtělo by to vidět i ostatní routy a pravděpodobně přeházet jejich pořadí. Router použije první routu, na kterou se dají parametry odkazu napasovat. Jestli máš ještě před tou svojí routou klasiku
<presenter>/<action>/<id>
, tak použije tu.
Poradi rout by melo byt spravne
<?php
// Setup router
$container->router[] = new Route('index.php', 'Homepage:default', Route::ONE_WAY);
$container->router[] = new Route('admin/<presenter>/<action>[/<id>]', array(
'module' => 'Admin',
'presenter' => 'Homepage',
'action' => 'default'
));
$container->router[] = new Route('<slug>-<id [0-9]+>[!.html]', array(
'module' => 'Front',
'presenter' => 'Homepage',
'action' => 'default',
'slug' => 'stranka'
));
$container->router[] = new Route('<presenter>/<action>[/<id>].html', array(
'module' => 'Front',
'presenter' => 'Homepage',
'action' => 'default'
));
?>
a odkaz v komponente
<?php
<a n:class="$i == $control->page ? active" n:href="this, page => $i">{$i}</a>
?>
kdyz posledni routu odmazu ovsem, dostanu toto, coz neni moc pekne
Editoval MelkorNemesis (23. 3. 2012 16:11)