Odkaz na druhé kolo v šabloně

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

Zdravim,
zakládám nové téma pro spam :)
Snažím se udělat mojí první aplikaci, na bázi Todo (které je teď mimo provoz na webu v dokumentaci).

Doma mám (nebo budu mít) dvě kola: Amulet, Ravo – z těch budu vybírat vždycky to druhé, v tom je problém.
v šabloně mám:

{block content}
{var druheKolo $kolo=='Amulet' ? 'Ravo' : 'Amulet'}

potom nějaký blbosti a odkaz na druhé kolo:

<a href="{link this, 'kolo' => !$druheKolo}">{$druheKolo}</a>

to mi však vyhodí jen odkaz: „<a href="cesta/?kolo=“>Amulet</a> proměnnou to tam nedosadí, avšak text odkazu dosadí
Nevíte kde je chyba?
Díky moc

Editoval CZechBoY (13. 6. 2011 22:56)

nanuqcz
Člen | 822
+
0
-

Ahoj, chyba bude asi v tom vykřičníku před $druheKolo – neguješ tím její obsah.

<a href="{link this, 'kolo' => !$druheKolo}">{$druheKolo}</a>

Vykřičník má v šablonách funkci „neescapuj mě“ jen, když je bezprostředně za znakem { (např {!$druheKolo})

Jinak, nevím co používáš za verzi Nette, ale od 2.0 se makro {var } píše i s rovnítkem

{var druheKolo = $kolo=='Amulet'? 'Ravo': 'Amulet'}
voda
Člen | 561
+
0
-

odstraň ten vykřičník:

<a href="{link this, 'kolo' => $druheKolo}">{$druheKolo}</a>
CZechBoY
Člen | 3608
+
0
-

používám tu jak je v tutoriálu (byla) což je 0.9.asi 6, asi upgradnu na nejnovější, hodil jsem si na hostingu PHP 5.3

<a href="{link this, 'kolo' => $druheKolo}">{$druheKolo}</a>

taky nejede, to právě nevypíše ani ?kolo= do toho odkazu za href=

Editoval CZechBoY (13. 6. 2011 22:24)

nanuqcz
Člen | 822
+
0
-

Laděnka nezobrazuje žádné chyby? Ani warningy nebo noticy v debug-baru?

CZechBoY
Člen | 3608
+
0
-

jenom když tam dám to rovnítko, jinak nic :(
v HTML kodu zobrazuje pouze <a href=„bike/show/“>Amulet</a> (možná ještě nějaký parametry u A, ale takhle to je :( )

Zde to mám uložené

nanuqcz
Člen | 822
+
0
-

Problém bude zakopaný možná ještě jinde… Na URL http://www.testing.jabko.net/Nette_test/document_root/bike/show/?kolo=Ravo by se měl objevit odkaz s textem „Amulet“, že? Místo toho se přesměruje na URL bez parametru kolo.

Ukaž, jak máš definované routy (v bootstrap.php), určitě tam máš někde defaultní parametr 'kolo' => 'Ravo' (tak ho smaž a uvidíme, co to bude dělat pak).

CZechBoY
Člen | 3608
+
0
-

nemám páru co je v bootstrap, tak daleko nejsem, mám vše v originálu :D
hráli jste NFS:Underground 2 ne? tam je taková hláška, když vyhrajete pouliční závod :D

hodim to teda sem co mám v BootStrapu (pro jistotu)

<?php
// Step 4: Setup application router
$router = $application->getRouter();

$router[] = new NRoute('index.php', array(
	'presenter' => 'Homepage',
	'action' => 'default',
), NRoute::ONE_WAY);

$router[] = new NRoute('<presenter>/<action>/<id>', array(
	'presenter' => 'Homepage',
	'action' => 'default',
	'id' => NULL,
));
?>

Editoval CZechBoY (13. 6. 2011 22:57)

nanuqcz
Člen | 822
+
0
-

Ach jo :-) Tak sem hoď obsah souborů app/bootstrap.php a app/presenters/BikePresenter.php a snad tam někdo něco objeví.

CZechBoY
Člen | 3608
+
0
-

ten presenter mám skoro stejnej jako v tom tutoriálu :-)

<?php
final class BikePresenter extends BasePresenter
{

    private $bikeManager = null;

    function actionShow($kolo='Ravo')
    {
        $this->template->casy = $this->model->najdiCasy(Array('kolo'=>$kolo));
    }

    function renderShow($kolo)
    {
        $this->template->kolo = $kolo;
    }

    function getModel() {
          If(!IsSet($this->bikeManager))
              $this->bikeManager = new BikeManager;

          return $this->bikeManager;
    }
}
// zde mám ještě formulář, ale ten sem psát snad nemusim, nešlo to ani bez něj
?>
voda
Člen | 561
+
0
-

Pro $kolo == 'Ravo' ti to v kolo url nezobrazí, protože ho máš jaky výchozí parametr u actionShow. Podle ‚Zobrazuji časy na všech kolech‘ tam máš ještě třetí stav? Na začátku jsi psal, že zobrazuješ jedno nebo druhé.

Jinak bych doporučil mít u action* i render* stejně definované parametry – výchozí hodnoty.

CZechBoY
Člen | 3608
+
0
-

no tak buď je zadaný kolo v URL (mám 2 kola) nebo zobrazuju všechny údaje z obou kol

OK vyhodim tu výchozí hodnotu u action

áá díky, funguje to po odebrání parametru :-))
tákže jdu spát s klidným svědomím, že už mi funguje první stránka a dokonce to tahá (DB je prázdná tak to snad pojede) z DataBáze :)

nanuqcz
Člen | 822
+
0
-

Záhada pro mě ale je, jaktože mu to v textu toho odkazu zobrazuje zobrazovalo pokaždé text „Ravo“

{var druheKolo $kolo=='Amulet' ? 'Ravo' : 'Amulet'}

když při nedefinovaném parametru $kolo by mu to mělo vypsat text „Amulet“…

Editoval xxxObiWan (13. 6. 2011 23:31)

CZechBoY
Člen | 3608
+
0
-

můžu ještě obnovit tohle téma nebo mám udělat nový?

potřeboval bych vypsat všechny kola, ale dělá mi problém DiBi – jak napíšu aby to připsalo WHERE jen když to pole s $where není prázdný?

nanuqcz
Člen | 822
+
0
-
Dibi::query("
    SELECT * FROM `kola`
    %if", $where->kolo, "WHERE `kolo`=%s", $where->kolo, "%end
")->fetchAll();  //teď si nejsem jistý, jestli tam je %end, nebo %endif

Editoval xxxObiWan (13. 6. 2011 23:59)

CZechBoY
Člen | 3608
+
0
-

na DiBi návodu jsem našel, že tam %end ani být nemusí, ale ani s ním to nejede

mám toto:

<?php
function najdiCasy($where)
{
return dibi::query(
          'SELECT * FROM [kola_casy]',
           'if%',!Empty($where),'WHERE [kolo]=%s', $where, '%end'
        )->setRowClass('Bike');
}
?>

volám funkci takto: najdiCasy($kolo) – to $kolo z URL

OMG !! já tam měl if% místo %if !!!

tak tohle téma opravdu končím
děkuji vám pánové ponocníci a teď už jdeme ais všichni spát že? :)

Editoval CZechBoY (14. 6. 2011 0:05)