Problem s podminkou v šabloně

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

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?

westrem
Člen | 398
+
0
-

Bez blizsieho popisu co sa deje v:

$this->groups->getGroup($id)

to asi nepojde.
To co mas napisane mi pripomina DibiFluent, to vsak pokial viem nic ako getGroup() neobsahuje.

Si si isty, ze ti v tom pripade rowCount nadobuda spravneo vysledku?

Mesiah
Člen | 240
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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.