styl pro presenter na základě id
- Oggy
- Člen | 306
Mám takový dotaz jak nejlépe řešit tuto situaci:
url: ../product/323/
a chtěl bych podle id změnit url ..
vlastní router?
nebo lze nastavit styly pro je jeden daný presenter? .. kde bych podle id šáhl do db a nastavil překlad pro presenter a zrušil parametr id? lze něco takového? nebo je jediné řešení vlastní router?
Editoval Oggy (17. 3. 2010 13:35)
- Ola
- Člen | 385
.. co vse v url potrebujes menit?
bootstrap
<?php
Route::addStyle('productId');
Route::setStyleProperty('productId', Route::FILTER_IN, callback('Products::getUrlById'));
Route::setStyleProperty('productId', Route::FILTER_OUT, callback('Products::getIdByUrl'));
$router = $application->getRouter();
$router[] = new Route('products/<id #productId>', array(
'Presenter' => 'Products',
'action' => 'default',
));
?>
Products model:
<?php
public function getUrlById($id)
{
return dibi::fetchSingle('SELECT [url] FROM [products] WHERE [id]=%i', $id);
}
public function getIdByUrl($url)
{
return dibi::fetchSingle('SELECT [id] FROM [products] WHERE [url]=%s', $url);
}
?>
Editoval Ola (17. 3. 2010 14:28)
- Oggy
- Člen | 306
jj.. tohle vygeneruje url:
..products/vymackavac-jablek/
ale pozadovaná url je:
../vymackavac-jablek/
myslenka je takova že vezmu -presenter a parametr treba productId a vytovrim
url jen z nazvu toho productu
nebo vezmu action article a parametr id a vytvorim url jen z nadpsiu(url) toho
clanku a action a parametr „zahodim“
Editoval Oggy (17. 3. 2010 14:36)
- Oggy
- Člen | 306
v tomto threadu se resi neco podobneho..1061–2008–12–02-prekladovy-slovnik-pro-route ale nejak nejsem z toho nejsem moudry .. na zaklade jazyka meni prekladovy slovnik pro presenter.. to je defacto to samy.. jen chci prekladat presenter na zakladen parametru productId ..
Editoval Oggy (17. 3. 2010 14:48)
- Oggy
- Člen | 306
Ola napsal(a):
Můžeš to udělat tak, že odstraníš část products v masce routy a na přidáš do masky k paramtru id stylů více. V modelech potom vrátíš NULL, pokud neexistuje záznam (doufám, že to tak jde).
jestli to dobře chápu..myslis takto?
<?php
Route::addStyle('productId');
Route::setStyleProperty('productId', Route::FILTER_IN, callback('ProductModel::getUrlById'));
Route::setStyleProperty('productId', Route::FILTER_OUT, callback('ProductModel::getIdByUrl'));
$router[] = new Route('<productId>/<action>/<id>', array(
'module' => 'Front',
'presenter' => 'Product',
'action' => 'default',
'id' => NULL,
));
?>
toto nefunguje.. negeneruje to url v tom tvaru
<productId>/<action>/<id>
- Oggy
- Člen | 306
ještě taková malá neznalost:
jak se řeší pokud chci mít více stylů pro parametr id:
mám na mysli, že při action clanek/id ..to hleda v clancich
a treba action product/id .. se ten styl nastavuje pro product ..
jak lze rozlisit kdy
Route::addStyle(‚id‘);
je pro co.
pořadím v bootstrapu? nebo jinak?
díky
- dotTwelve
- Člen | 167
Asi mi z toho jebne…co to je proboha za chybu?
PHP Warning: call_user_func(ProductsModel::getUrlById) [function.call-user-func]: First argument is expected to be a valid callback in …/libs/Nette/Application/Routers/Route.php:515
PHP 5.2.6–1+lenny8; Nette Framework 1.0-dev (revision ced2e04 released on 2010–05–11)
Editoval dotTwelve (4. 7. 2010 0:05)