Kategorie na webu a další akce
- M4ni4k
- Člen | 2
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
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
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
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
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
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
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
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)