routovani

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
radvis
Začátečník | 110
+
0
-

Ahoj, potřeboval bych udělat url třeba ve tvaru: domena.cz/index.php. Ale já si routy vytvářím:

<?php
$router[] = new Route('domu', array(
    'presenter' => 'Home',
    'action' => 'default',
));
?>

Problem je v tom, že já potřebuju mít i nadefinované routy a sample routy. Jakým způsobem to můžu udělat? Díky.

Kenn
Člen | 110
+
0
-

Pokud jsem tě dobře pochopil, stačí přidat routu.

<?php
$router[] = new Route('index.php', array(
	'presenter' => 'Home',
	'action' => 'default',
), Route::ONE_WAY);
?>

Jinak doporučuji presenter „Home“ přejmenovat na „Domu“. Nebudeš si pak zasírat routy pro každý presenter jinak pojmenovaný než je jeho URL :-)

radvis
Začátečník | 110
+
0
-

Tak třeba když budu chtít udelat url pro vyhledávání neco.cz/_search.php?q=vyraz . Jenže když to pak volám tak mi to napíše, že nemám vytvořenou routu.

Ondřej Mirtes
Člen | 1536
+
0
-

Proč bys chtěl dělat tak hnusná PHP-like URL, když můžeš mít pohodlně neco.cz/hledat/vyraz ?

radvis
Začátečník | 110
+
0
-

Protože bohužel nevím, jak to předat do bootstrapu. Prostě jak výraz dat do url.

Vyki
Člen | 388
+
0
-

Šlo by to třeba nějak takto:

<?php

$router[] = new Route('hledat/<vyraz>', array(
        'presenter' => 'Vyhledavani',
	'do' => 'Hledej'
));

?>

EDIT: ještě mě napadlo, že při vyhledávání se to většinou posílá formulářem takže tam musí být ještě ošetřen parametr do, ale netestoval jsem to.

Editoval Vyki (10. 2. 2010 9:37)

radvis
Začátečník | 110
+
0
-

Na netu asi není hotové řešeni v nette co? Asi si to sám nezvládnu naprogramovat:( A jak to dám do toho <vyraz>?

Aurielle
Člen | 1281
+
0
-

VyhledavaniPresenter.php:

public function handleHledej($vyraz)
{
	// ...
}
radvis
Začátečník | 110
+
0
-

Nenašel by se na to tutoriál? Díky;)

radvis
Začátečník | 110
+
0
-

Možná jsem to i blbě popsal, třeba bych chtěl url ve tvaru neco.cz/_search.php?width=1000&&height=200&&neco=neco

Acnnair
Člen | 34
+
0
-

gmvasek napsal(a):

VyhledavaniPresenter.php:

public function handleHledej($vyraz)
{
	// ...
}

Takto isto akurát že pridáš viac parametrov.
VyhledavaniPresenter.php:

public function handleHledej($width, $height, $neco)
{
 	// ...
}
despiq
Člen | 320
+
0
-

precti si dokumentaci, je to tam napsane, pokud si nenasel, hledej znovu

Honza Kuchař
Člen | 1662
+
0
-

Článek zde: https://doc.nette.org/…tion/routing
Pro příště: na fóru je sekce routování.

radvis
Začátečník | 110
+
0
-

Acnnair: Ano, ale mě dělá problém to, že když to zapíšu ve tvaru neco.cz/_search.php?height=1000&&.. tak mi to napíše, že na to není vytvořená routa. A ja bohužel nevím jak to udělat v „hezkém“ tvaru.

Ondřej Mirtes
Člen | 1536
+
0
-

A co si na ten Presenter:action vytvořit odkaz v šabloně a vidět, v jakém tvaru se vygeneruje?

radvis
Začátečník | 110
+
0
-

Tak jsem to udělal u novinek a hodí mi to chybu:

**InvalidArgumentException

Invalid argument passed to foreach resp. SmartCachingIterator; array or Iterator expected, NULL given.**

Už nad tím koumám celý den a pořád to nemůžu rozlousknout.

Ondřej Mirtes
Člen | 1536
+
0
-

Do foreache předáváš NULL namísto něčeho, nad čím se dá iterovat (např. polem). Zkontroluj třeba překlepy v názvech proměnných.

radvis
Začátečník | 110
+
0
-

Routa:

<?php
$router[] = new Route('reality/<nazev>', array(
    'presenter' => 'Reality',
    'action' => 'list',
));
?>

Presenter:

<?php
	public function renderList($nazev)
	{
		$Model = new Model;
		$this->template->novinka = $Model->KategorieTitle($nazev)->fetch();
	}
?>

Model:

<?php
	public function KategorieTitle($nazev)
	{
      return $this->db->select('*')->from($this->kategorie)->where('nazev=%s', $nazev);
	}
?>

Template:

{foreach $novinky as $novinka}
<a href="{plink Novinka:list,  $novinka->nazev}">{$novinka->nazev}</a>
{/foreach}

Myslím, že tam překlep nemám.

Editoval radvis (7. 3. 2010 23:04)

redhead
Člen | 1313
+
0
-
  1. fetchAll() místo fetch()
  2. nic ti to nevyhledá, čili nejspíš špatná podmínka, jesli vůbec něco posíláš v proměnné $nazev
radvis
Začátečník | 110
+
0
-

Myslím, že tam něco bude, protože „url“ my to vytvoří. Var_dump($nazev); nevypíše nic (ani array() )

Etch
Člen | 403
+
0
-

No tak já nevím co ty myslíš, ale po pohledu na kusy kódu co si sem napsal tam překlep rozhodně máš.

Presenter:

	$this->template->novinka = $Model->KategorieTitle($nazev)->fetch();

Šablona

	{foreach $novinky as $novinka}
		<a href="{plink Novinka:list,  $novinka->nazev}">{$novinka->nazev}</a>
	{/foreach}

v presenteru předáváš data do proměnné $novinka, ale v šabloně do foreach už cpeš $novinky

pekelnik
Člen | 462
+
0
-

Stále mám dojem, že radvis nemá ani tucha o OOP – neustále tady zaplňuje forum kravinama.

Tenhle styl „programování“ (čti: opisování kousků kódu) jsem viděl naposledy před deseti lety.

<?php
$this->template->Novinka = $this->KategorieTitle($this->kategorie).... sorry
?>

… nebo hlášky typu nepomáhá ani Var_dump ani array() – to musí už bejt když nepomáhá ani jedna z těchdle věcí ;)

Nechci bejt za supa.

Proto končím dobrou radou: Radvisi, kup si knížku o programování – překousni svou pýchu – uvidíš že nakonec budeš pyšný sám na sebe :)

Editoval pekelnik (8. 3. 2010 11:54)

22
Člen | 1478
+
0
-

jo jo radvis :-) vřele ti doporučuju manuál, na kterej jsem narazil u Zendu, je tam vše co potřebuješ včetně příkladů, OOP se řeší tuším v 6 a 7 kapitole.
http://devzone.zend.com/…/view/id/627

Etch
Člen | 403
+
0
-
$this->KategorieTitle($this->kategorie)

No tak strašný to snad není. To už by byl docela vrchol. :)

radvis
Začátečník | 110
+
0
-

Ale to je přepsané, mám to jinak jen potřebuju vyřešit proč to vrací tu chybu. Jinak to tak nemám.

radvis
Začátečník | 110
+
0
-

Pekelnik:

<?php
$this->template->Novinka = $this->KategorieTitle($this->kategorie).... sorry
?>

Nevím, kde jsi na to přišel ($this->kategorie) to mám v modelu a né v presenteru:) a tím array v závorce jsem myslel to, že var_dump() vrací array a mě to nevypsalo ani prázdný array … Zjístil jsem, že mi ten název dojde až do modelu takže problem je někde v modelu nebo při vypisování.

Etch:
Stejný dotaz, kde jsi vzal ten kód? $this->KategorieTitle($this->kategorie);

22:
Díky, pročtu.

Etch
Člen | 403
+
0
-

To Pekelník uváděl asi jako příklad k tvrzení, že nemáš ani tucha o OOP, protože je to naprosto nesmyslný zápis.

public function actionDefault(){
	$this->template->novinka = $this->kategorieTitle($this->kategorie);
}

private function kategorieTitle($kategorie){
	return strtolower($kategorie);
}

místo třeba:

public function actionDefault(){
	$this->template->novinka = $this->kategorieTitle();
}

private function kategorieTitle(){
	return strtolower($this->kategorie);
}

Pokud jde o tvou chybu tak zaprvé fetchAll() zadruhé si tam měl překlep. Pokud si tohle opravil a pořád ti to vrací tuto chybu tak logicky v presenteru místo přiřazení proměnné do šablony dej

debug::dump($model->kategorieTitle($nazev)->fetchAll());
exit;

pokud to nevrací to co by mělo tak tam dej

$model->kategorieTitle($nazev)->test();
exit;

zkontrolovat SQL dotaz. Prostě klasický postup pokud něco nefunguje. Ideální by pro tebe asi bylo sehnat si nějaké IDE s Debugerem a naučit se ho používat.

Jod
Člen | 701
+
0
-

Pozerám, že pomocou nette fóra sa dá už aj zarábať bez znalostí programovania, všetko za teba spravia ostatní ;)

toka
Člen | 253
+
0
-

Jod napsal(a):

Pozerám, že pomocou nette fóra sa dá už aj zarábať bez znalostí programovania, všetko za teba spravia ostatní ;)

No, začíná to tak místy vypadat :-)

radvis
Začátečník | 110
+
0
-

Etch:
Já pořad nechápu z kama bereš ty kódy, nikde nemam např:

<?php
$this->template->novinka = $this->kategorieTitle($this->kategorie);
?>

Jod:
Kde jsi přišel na to, že na tom vydělávám?:). Ale prostě nevím kde je chyba řeším to už dlouho a psal jsem: dojde to až do modelu ten nazve kdyz jsem vypsal treba jen nazve a pod tim ho vypsal (pod selectem) tak to nazev vypiše, ale na stránku bohužel ne.

22
Člen | 1478
+
0
-

chápe ještě někdo o co jde? Já už ne…radvis, začni na jednoduchých příkladech, tohle je na tebe moc složitý…vyzkoušej si, jak se posílají data na mezi Presenterem<->Šablonou a Presenterm<->Modelem a až ti to bude předávat data křížem krážem na jedné nebo dvou proměnných, tak jsi to pochopil a nebudeš se porád ptat dokola. Základy máš v tutoriálech nebo v příručce programátora..to je pořád dokola.

To jako nestačí pročíst, jak známe tvoji obvyklou hlášku, to si musíš minimálně vyzkoušet, jestli to zvládáš i bez koukání do tutoriálu.

radvis
Začátečník | 110
+
0
-

Ze začátku byl dotaz ten, jak dám data z šablony do bootstrapu (neco.cz/novinky/nadpis-novinky) na to jte mi odpověděli, ale ted mám problém v tom, že mi to háže tuhle chybu (nevím proč). To co jsi psal zvládam, ale věčinou v tom hledám složitější věc než je.

Jod
Člen | 701
+
0
-

radvis: v undergrounde nette komunity xD

Pridám sa aj ja :D

$this->template->novinka =  strtolower($this->kategorie);
BigCharlie
Člen | 283
+
0
-

radvis napsal(a):
Ze začátku byl dotaz ten, jak dám data z šablony do bootstrapu (neco.cz/novinky/nadpis-novinky)

A čo vy si radvis predstavujete pod takýmto úkolom? – omlouvám se za slovenštinu, parafrázuji jednoho majora. Zdá se, že už nemáme jen vymýšlet řešení tvých problémů, ale rovnou si i domýšlet zadání, na které ses chtěl ptát.

Zřejmě začínám radvisovatět – ničemu nerozumím…

pekelnik
Člen | 462
+
0
-

Data z šablony do bootstrapu bych teda cpát nechtěl.

Upřímně řečeno ani nevím jak se to dělá.

Tipnul bych něco takovýhodle:

// template.phtml
{block content}
{push $data => bootstrap}

Výsledek ověřilo 9 z 10 radvisů B)

radvis
Začátečník | 110
+
0
-

pekelnik:
Hahaha:)

BigCharlie:
Někteří tomu asi rozuměli když mi řekli jak to mám udělat:)

Editoval radvis (9. 3. 2010 18:02)

toka
Člen | 253
+
0
-

radvis napsal(a):

pekelnik:
Hahaha:)

BigCharlie:
Někteří tomu asi rozuměli když mi řekli jak to mám udělat:)

A někteří tomu brzy raději přestanou rozumět… hahaha jim již nepřijde dost vtipné!

jasir
Člen | 746
+
0
-

Radvisi, ty se neumíš nebo nebtěžuješ ani pořádně zeptat. Číst tvé nepořádné a zmatené otázky, z nichž u půlky si mají „tví řešitelé“ sami domyslet zadání a napsat ti kód a u druhé půlky ti vysvětlovat smysl chybových hlášek PHP, o objektovém programování ani nemluvě, je utrpení.

Rozhodně to není na žádné hahahaha.

Etch
Člen | 403
+
0
-

radvis napsal(a):

Etch:
Já pořad nechápu z kama bereš ty kódy, nikde nemam např:

<?php
$this->template->novinka = $this->kategorieTitle($this->kategorie);
?>

Jak říkám původně to asi bylo myšleno jako příklad toho jak tvé kódy můžou „vypadat“.

Sorry, ale pokud tu někdo napíše

$this->template->novinka = $Model->KategorieTitle($nazev)->fetch();

a pak

{foreach $novinky as $novinka}
<a href="{plink Novinka:list,  $novinka->nazev}">{$novinka->nazev}</a>
{/foreach}

se slovy, že si myslíš, že tam překlep nemáš.

To sou naprosto základní věci. Při práci se mi překlepy stávají 2× do hodiny, kdybych měl každou takovouhle chybu hledat tak dlouho jako ty tak nedělám nic jiného. Radil sem ti dobře pokud ti dělají takovéhle věci problém pořiď si IDE s debugerem.

radvis
Začátečník | 110
+
0
-

Už to mám(IDE). Vynechám třeba ; a ono to jednou zaznamená podruhe ne. Psal jsem, že jsem to přepisoval sem na forum jinak to mám dobře. A zjistil jsem, že bude chyba asi v další šabloně (do které to má vypsat), protože jsem si to vypsal z modelu a vypsalo mi to, ale do šablony to nedojde.

Editoval radvis (10. 3. 2010 16:54)

Etch
Člen | 403
+
0
-

radvis napsal(a):

Už to mám(IDE). Vynechám třeba ; a ono to jednou zaznamená podruhe ne. Psal jsem, že jsem to přepisoval sem na forum jinak to mám dobře. A zjistil jsem, že bude chyba asi v další šabloně (do které to má vypsat), protože jsem si to vypsal z modelu a vypsalo mi to, ale do šablony to nedojde.

Tak znova. V jaké další šabloně? Pokud ti už původně laděnka řekla, že chyba je jinde tak proč si sem vůbec dával šablonu která je v pořádku a ne tu ve které je chyba?? Asi nepochopím.

A v bodech:

  1. mít IDE je jedna věc, ale umět ho používat druhá
  2. radil sem ti aby sis pořídil IDE s debugerem
  3. ten debuger tam je to hlavní

IDE není o doplňování středníků to je to nejmenší co by tě mělo zrovna tebe zajímat. Měl by zajímat hlavně ten debuger, krokování v kódu a výpisy z debugeru jako sou globální a lokální proměnné. Další věc je, že pokud nedokážeš rozlousknout chybu „Invalid argument passed to foreach resp. SmartCachingIterator; array or Iterator expected, NULL given.“ tak je něco špatně. I kdyby si dal do kódu třeba jen

$this->template->novinky = array(1,2,3);

tak by si tím otestoval jestli se opravdu proměnná $novinky přenese v pořádku do šablony, protože by zmizela výše napsaná chyba. ( Pravděpodobně by sice následovala jiná výjimka, ale to je jedno ) a tak by to mohlo pokračovat dál.

Než začneš psát nějakou aplikaci měl by ses nejdříve naučit porozumět chybám a naučit se je hledat. Bez toho se opravdu nikam nedostaneš.

redhead
Člen | 1313
+
0
-

Zdá se mi to nebo tam furt má tu samou chybu, kterou tu už avizovalo několik lidí? Že do šablony naplňuješ proměnnou $novinka, ale ve foreachi iteruješ nad proměnnou $novinky (písmeno a/y na konci) ???

radvis
Začátečník | 110
+
0
-

redhead: Psal jsem, že u mně to mám opravené.
Etch: S tou šablonou se omlouvám, jsem si toho všiml až teď:-X. A jakým způsobem se je mám naučit? Až teď při pečlivém projíždění examples jsem přišel na to, že na věčinu věcí jsem měl odpověď přímo pod nosem. Omlouvám se, měl jsem to pečlivěji projít (někdy jsem ale nevěděl jak to funguje a to jsem se dozvěděl zde). Zkouším naprogramovat své rs tak doufám, že se na něm naučím základní věci. K tomu rs bych se jen chtěl zeptat, zda bude těžké do něj pak dát další jazykové mutace. Díky všem za trpělivost a budu se sem snažit co nejméně psát:).

SyXcz
Člen | 75
+
0
-

redhead napsal(a):

Zdá se mi to nebo tam furt má tu samou chybu, kterou tu už avizovalo několik lidí? Že do šablony naplňuješ proměnnou $novinka, ale ve foreachi iteruješ nad proměnnou $novinky (písmeno a/y na konci) ???

nezdá, už je to tak… ale nesměj se, je to spíš k pláči…

SyXcz
Člen | 75
+
0
-

radvis napsal(a):

redhead: Psal jsem, že u mně to mám opravené.
Etch: S tou šablonou se omlouvám, jsem si toho všiml až teď:-X. A jakým způsobem se je mám naučit? Až teď při pečlivém projíždění examples jsem přišel na to, že na věčinu věcí jsem měl odpověď přímo pod nosem. Omlouvám se, měl jsem to pečlivěji projít (někdy jsem ale nevěděl jak to funguje a to jsem se dozvěděl zde). Zkouším naprogramovat své rs tak doufám, že se na něm naučím základní věci. K tomu rs bych se jen chtěl zeptat, zda bude těžké do něj pak dát další jazykové mutace. Díky všem za trpělivost a budu se sem snažit co nejméně psát:).

a neměl bys na to spíš založit nový téma? co když pak přijde někdo, kdo bude mít podobnej problém? tohle už docela s routováním nemá nic společnýho, tohle už jsou šablony, resp. presentery který šabloně předávají data

radvis
Začátečník | 110
+
0
-

To mluvíš o té vícejazyčné mutaci?

SyXcz
Člen | 75
+
0
-

radvis napsal(a):

To mluvíš o té vícejazyčné mutaci?

mno když se to tak vezme, tak k tématu „routování“ sem patří jen prvních pár příspěvků, zbytek už je uplně o něčem jinym… nebo respektive založ téma jménem radvis :)

radvis
Začátečník | 110
+
0
-

A nebo ne:). Nevím proč bych zakládal téma kde bych se zeptal, zda bude obtížné přidat časem do mého rs jazykovou mutaci.

Editoval radvis (10. 3. 2010 21:57)

Honza Marek
Člen | 1664
+
0
-

Není nad to si tu přečíst každý den novou dávku skvělé legrace.

pekelnik
Člen | 462
+
0
-

někdo by to tady měl zamknout a nejlépe smazat :)