styl pro presenter na základě id

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

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
+
0
-

.. 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
+
0
-

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
+
0
-

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)

22
Člen | 1478
+
0
-

vymackavac jablek LOL

Ola
Člen | 385
+
0
-

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).

Oggy
Člen | 306
+
0
-

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
+
0
-

tak se omlouvám.. ono to funguje.. jsou jen obráceně ..FILTER IN a OUT ..

Oggy
Člen | 306
+
0
-

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
+
0
-

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)

Skalda
Člen | 8
+
0
-

Předpokládám, že ProductsModel::getUrlById existuje… zkusil jsi vymazat složku temp ? Možná RobotLoader nezaznamenal změnu (nevím jak přesně funguje, ale teoreticky by to tím být mohlo)