Kategorie na webu a další akce

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

Dobrý den,
začal jsem předělávat vlastní web v Nette, zatím se mi daří, je to úžasný framework, ale narazil jsem na chybku, není to chybka, spíš jsem nenašel jak nastavit rounte nebo co proto musím udělat, nevím jak odkazovat, tedy prakticky využít aktivní kategorii nějaké stránky, uvedu příklad.

Mám album, v něm mám několik skladeb a pokud chci provádět akci na skladbu právě v tom albu, nevím jak vytvořit odkaz např. neco.cz/album/2/skladba/smazat/3, a s touhle pracovat, nemám ani tušení jak provést ten presenter, kde bych pracoval s těmito 2 proměnnými … prosím o pomoc, hodně by mi to pomohlo.

Díky, s pozdravem Adam Janiš

Mikulas Dite
Člen | 756
+
0
-

Ty pěkné url se tvoří přez router. https://doc.nette.org/…tion/routing
Odkaz se generuje v $presenter->link() https://api.nette.org/…mponent.html#…, a {link}, resp. {plink} v šabloně https://doc.nette.org/…late-filters. Přimět presenter celý k ničemu nemůžeš, ale jednotlivé action mohou brát parametry, v presenteru budeš mít např. metodu actionSParametry($par1, $par2...).

Editoval Mikulas Dite (18. 2. 2010 21:43)

M4ni4k
Člen | 2
+
0
-

aha :) Díky moc.
do presenteru jsem přidal argument, do odkazu jsem přidal pro test konstantu a vyhodilo mi to odkaz: … /edit/2?neco=6 , teď by mělo stačit do route něco přidat, jen nevím jak to napsat tak, aby to vypadalo nějak takto /edit/2/neco/6 (neco=název argumentu)
Nenapadá mě jak to zapsat, omlouvám se že otravuji :) O tom routování jsem četl … ale nenašel jsem praktickou ukázku s těmi argumenty.

Mikulas Dite
Člen | 756
+
0
-

Jestli je to menší aplikace, dalo by se použít například tohle:

<?php
$router[] = new Route('<presenter>/<action>/neco/<id [0-9]+>', array(
    'presenter' => 'Article',
    'action' => 'show',
    'id' => NULL,
));
?>

'presenter' => 'Article' je více-méně defaultní presenter když se tahle routa chytne, případně se to přepíše tím, co je v url v části <presenter>. Obdobně s action. neco sem dal jako statický text, protože dynamicky se to řešit moc nedá. <id %regexp%> musí mít stejné jméno jako v metodě (tuším, že je to case-sensitive). Regexp část není nutná, ale pro id je rozhodně lepší ji mít.

Možná bych se ale snažil jméno parametru do url nedávat, spíš se pokoušet o něco ve stylu editUser/id, než user/userId/id.

tombom
Člen | 10
+
0
-

No já mám trochu jiný problém, když mám v url jako id číslo tak mi to ypíše co potřebuju bez problému. Když nechci jako id používat číslo, ale text, podle kterého se to má vyselektovat z databáze, tak mi to vypíše celou databázi. A přitom selektuji ze sloupce s nastavením varchar a některé řádky obsahují číslo a některé text. Díky

Mikulas Dite
Člen | 756
+
0
-

Tak jestli používáš dibi, určitě používej syntaxi fetch('SELECT * FROM [table] WHERE [column]=%s',$parametr);. Tím se vyhneš 100% problémů, na které můžeš při dotazu na db narazit. Pokud je problém v routování, tak nezapomeň, že sem posílal regexp pro čísla, pro string by to vypadalo takhle:

<?php
$router[] = new Route('<presenter>/<action>/<id \s+>', array(...
?>

Případně dosaď vlastní regexp za název parametru.

Plus pokud se chceš na db dotazovat přes klíč, můžeš si na routování udělat in/out filter který ti url upraví, řekněme místo clanek/id udělá clanek/nazev+clanku. A zachová se ti i původní tvar.

tombom
Člen | 10
+
0
-

Jo super, tak mi konečně došlo, že mám místo %i napsat %s :) a už to jede. Ty in/out filtry to mám jako další level :)Teď se snažím si zjednodušit dotazy do databáze abych si jméno tabulky posílal jako parametr a tam mi teda ani to %s nepomáhá. Mám tam:

<?php
	public function tabulkaAll($tabulka)
	{
		return $this->connection->select('*')->from('%s',$tabulka);
	}
?>

Ale to mi to nebere.

Etch
Člen | 403
+
0
-

tombom napsal(a):

Jo super, tak mi konečně došlo, že mám místo %i napsat %s :) a už to jede. Ty in/out filtry to mám jako další level :)Teď se snažím si zjednodušit dotazy do databáze abych si jméno tabulky posílal jako parametr a tam mi teda ani to %s nepomáhá. Mám tam:

<?php
	public function tabulkaAll($tabulka)
	{
		return $this->connection->select('*')->from('%s',$tabulka);
	}
?>

Ale to mi to nebere.

Pro názvy tabulek a sloupců se používá modifikátor %n

Edit:

Pokud s dibi začínáš doporučuji nastudovat modifikátory viz https://dibiphp.com/cs/quick-start#…

a popřípadě zkoušet pomocí dibi::test() než do toho pronikneš.

Editoval Etch (2. 3. 2010 0:31)