Problem s podminkou v šabloně
- Mesiah
- Člen | 240
Ahoj,
prosím Vás, mám problém, mám podmínku v šabloně, jenže nechová se tak jak bych rád. Vyhazuje mi exception a laděnku. V podstatě jako by tam podmínka nebyla…
<?php
public function actionShowGroup($id)
{
$group = $this->groups->getGroup($id)->execute()->setRowClass('Group');
$products = $this->products->getProducts()->where('[groups.id] = %i', max(0, $id))->execute()->setRowClass('Product');
if ($group->rowCount > 0)
{
$this->template->show = TRUE;
}
else
{
$this->template->show = FALSE;
}
$this->template->group = $group;
$this->template->products = $products;
}
?>
{block #content}
{if $show}
<h1>{block #title}{$group->name}{/block}</h1>
{if count($products)>0}
<div id="produkty">
{foreach $products as $product}
<div id="produkt">
<a href="#"> <img src="design/littlepicture.png" width="200" height="122" alt="" /> </a>
</div>
{/foreach}
</div>
<hr class="cleaner" />
{else}
<p>Bohužel, v současnosti tady nic nenabízíme.</p>
{/if}
{/if}
Momentálně není nic v DB, takže proměnná show by měla být FALSE (a
taky je), jenže dostávám Exception:
Cannot read an undeclared property DibiResult::$name.
.
Poradíte?
- Mesiah
- Člen | 240
Groups je z modelu, metoda má jednoduché tělo:
<?php
public function getGroup($id)
{
if ($id)
{
return $this->sqlFactory()->where('[id] = %i', max(0, $id));
}
else
{
return NULL;
}
// podminka je pravdepodobne zbytecna, spis myslim ze i chybna, ted nad tim premyslim
}
public function sqlFactory()
{
return dibi::select('*')->from('groups');
}
?>
a co se tyka toho rowCount() tak jde o to, ze nemuzu pouzit isset(), bo vzdy jde o objekt DibiResult, takze jediny zposob jak zjistim, jestli je nejaky zaznam tak je pres tuhle metodu…
Edit: tedka jsem si vsiml, ze v prvnim postu mam $groups->rowCount, to je ofc spatne, ve zdrojaku mam rowCount(), vsiml sem si toho, kdyz jsem to postoval, ve zdrojaku jsem to opravil, tady ne. Kazdopadne v tomhle chyba neni, testoval jsem to proto jsem to zapomnel prepsat pred postovanim.
Editoval Mesiah (31. 8. 2010 0:08)
- Pepča
- Člen | 12
nestačí to udělat takto?
<?php
public function getGroup($id) {
return dibi::select('*')->from('groups')->where('[id] = %i', max(0, $id));
}
?>
btw na testování zadaného $whatever je lepsi
<?php
if (isset($whatever)) ...
?>
nez
<?php
if ($whatever) ...
?>
Editoval Pepča (31. 8. 2010 1:54)
- westrem
- Člen | 398
Pepča napsal:
to getGroup($id)
je istotne lepsie ako si to sam napisal, to
povodne s NULL mohlo byt chybove kedze tam dalej predpoklada fluent
interface.
Podmienka na isset()
v tomto pripade netreba, premenna
$show
sa nastavi vzdy, skor by som tam pridal typovu kontrolu napr.
$show === TRUE
.
Kazdopadne nech na to kukam akokolvek a studujem API k dibi, backend vyzera byt napisany korektne, kukni si co sa ti vygeneruje v sablone (kukni cache)
- Mesiah
- Člen | 240
Díky za rady… Přesně tak, s tím NULL a fluent int. by to mohlo dělat
neplechu, taky mě to napadlo, bohužel až když jsem to napsal.
Nakonec jsem přistoupil k tomu, že pokud nebyl záznam, vytvořil jsem
prázdný objekt. Původně jsem se tomu chtěl vyhnout… Ale nevadí, spíš
mě zarazilo, že při renderingu šablony se dosazuje vše, myslel jsem že tam
funguje „něco jako lazy-loading“ – převede se to co je potřeba,
ostatní se vynechá. Ale podle toho, jak se to chová, tak bych řekl, že asi
ne.
Děkuji za pomoc a hezký den.