Latte samostatně – použití cyklu {while} s vlastním databázovým layerem (MSSQL)
- RadaR
- Člen | 46
Chci nasadit Latte samostatně do již hotového projektu. Rád bych využíval i cykly {while} pro zobrazování položek z databáze.
Stávající systém šablon je komplikovaný, kupříkladu pro iterace musím mít dvě šablony – zvlášť pro hlavičku <table>%polozky%</table> a zvlášť pro položky <tr><td>%hodnota-z-db%</td></tr>. Data pro položky si připravuji skrze šablonu uvnitř while, přepisováním tokenů, pak přepisuji šablonu hlavičky. Potřebuji něco sofistikovanějšího. Na Latte se mi líbí podmínky a cykly.
Rád bych se ale vyhnul totálnímu přepisování všeho, hlavně způsobu volání SQL dotazů a vůbec práce s databází a proto bych chtěl používat svůj stávající databázový objekt. Ale nevím, jestli ho lze nějak do Latte naroubovat.
Používám Microsoft Drivers 3.0 for PHP for SQL Server, pro které mám napsaný databázový layer.
Nevím si rady, jak mám předat do šablony resultset pro cyklus while. Zkoušel jsem něco takového:
<?php
$db_obj->Query("SELECT TOP 5 sloupec1, sloupec2 FROM tabulka", "tabulka");
$template->rows = $db_obj->Fetch_Array("tabulka");
?>
což je ekvivalent
<?php
$result = $db_obj->Query("SELECT TOP 5 sloupec1, sloupec2 FROM tabulka", "tabulka");
$template->rows = sqlsrv_fetch_array($result);
?>
ale nedaří se. Hlásí mi to že `Parse error: syntax error, unexpected ‚as‘ (T_AS) in `
Je to řešitelné anebo musím použít dibi či Nette\Database ?
Editoval RadaR (12. 11. 2013 15:41)
- petr.pavel
- Člen | 535
Zeptal jsem se Googlu na tuhle hlášku a našel mi případy lidí, kteří
psali chyby jako
while(... as ...)
nebo
foreach (... as ... as ...)
.
Jestli to není ono, hoď sem kus té svojí šablony, kde se ti tahle chyba stává.
Kde najdeš její zkompilovanou podobu víš, že jo? Tam by ses mohl taky mrknout, jestli tě něco netrkne.
- RadaR
- Člen | 46
Oh – díky za nakopnutí správným směrem. Jak jsem experimentoval v šablonách s cykly, nechal jsem tam zápis pro foreach a ne pro while :)
Jinak nevím jestli je to správný postup, ale předávám si do šablony celý svůj databázový objekt a v šabloně pak volám jeho metody. Vypadá to, že vše šlape jak má.
<?php
// po připojení k databázi a vytvoření objektu $template si do šablon předám db objekt
$template->db_obj = $db_obj;
// SQL dotaz
$db_obj->Query("SELECT TOP 5 sloupec1, sloupec2 FROM knihy", "knihy");
?>
a šablona vypadá takto:
<table>
{while $table_knihy = $db_obj->Fetch_Array(„knihy“)}
<tr>
<td>{$table_knihy[ckod]}</td>
<td>{$table_knihy[cnazev]|upper}</td>
</tr>
{/while}
</table>