Makro {if podminka} … {else} … {/if}

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

Zdravím, potřeboval bych přjít na to, proč mi nefunguje makro:

{if !empty($news)}
{foreach $news AS $newsItem}
	...
	<div id="content">{!$newsItem->content}</div>
	...
{/foreach}
{else}
<div class="flash {$flash->type}">Žádné aktuality k zobrazení.</div>
{/if}

$news naplnuji v renderDefault takto:

public function renderDefault()
{
	$news = new News;
	$this->template->news = $news->findAll()->orderBy('added');
}

Kdyz v databazi nejake aktuality jsou, tak se v poradku vypisuji. Kdyz tam ale neni zadna, tak bych chel zobrazit to info v casti else. To se mi ale bohuzel nezobrazuje a ja netusim proc.

Dekuji :)!


Pak bych se ještě chtěl mimo téma zeptat jak by mělo fungovat (nebo jaké byly úmysly) s css zápisem u flash messages. Co by mělo znamenat to {$flash->type} (class="flash {$flash->type}")? Predstavuji si pod tim, ze type nastavim treba jako info/error/notice a podle toho jaky type to je, tak se treba jinak barevne zobrazi ta flash zprava. Je to takto zamysleno?

Pak by me zajimalo jak by bylo treba napsat CSS styl pro jednotlive tyto notices. Puvodni styl je:

div.flash {
	color: black;
	background: #FFF9D7;
	border: 1px solid #E2C822;
	padding: 1em;
	margin: 1em 0;

	text-align: center;
}

EDIT: uz jsem si zjistil jak funguje ta metoda flashMessage, takze potrebuju vedet jak to nastylovat?

Nemuzu totiz v CSS napast` div.flash info { … }` nebo div.flash error { ... } atd. Nevim jak to udelat, aby to pak odpovidalo vygenerovanemu kodu z class="flash {$flash->type}".

Diky.

Editoval Endrju (7. 3. 2010 16:56)

Ola
Člen | 385
+
0
-

Ad. 1) aby se na to dalo odpovědět je třeba, abys sem dal ještě metodu modelu – findall – hádám ale že použiváš dibidatasource, pak je potřeba dotaz vykonat – dibidatasource je lazy, je potřeba v presenteru zavolat ještě metodu fetchAll (stačí to fluent doplnit za orderby).

Ad. 2) chubí ti tečka před selektorem

Endrju
Člen | 147
+
0
-

Ola napsal(a):

Ad. 1) aby se na to dalo odpovědět je třeba, abys sem dal ještě metodu modelu – findall – hádám ale že použiváš dibidatasource, pak je potřeba dotaz vykonat – dibidatasource je lazy, je potřeba v presenteru zavolat ještě metodu fetchAll (stačí to fluent doplnit za orderby).

News model, ktery dedi z Base modelu:

class News extends BaseModel
{
	/** @var string */
	private $table = 'news';

	...

	public function findAll()
	{
		return $this->db->select('*')->from($this->table);
	}

	...
}

V tom Base modelu mam:

abstract class BaseModel extends Object
{
	private static $db;

	public function getDb()
	{
		if (self::$db == NULL) {
		  self::$db = new DibiConnection(Environment::getConfig("database"));
		}

		return self::$db;
	}
}

Co bych tedy mel kde a jak upravit? A ano, v config.ini mam nastaveno database.lazy = TRUE

Ola napsal(a):

Ad. 2) chybí ti tečka před selektorem

Promin, asi upne nerozumim (jen tusim). Mas na mysli tu tecku pred „info“ div.flash .info { … }?

Pokud ne, tak by bylo asi nejlepsi, kdyby jsi mi take ukazal, jak by treba vypadal ukazkovy CSS styl pro ty ruzne flash message. Dekuji

Ondřej Mirtes
Člen | 1536
+
0
-

div.flash.info – div, který má třídu flash a zároveň třídu info.

Endrju
Člen | 147
+
0
-

Diky Ondro.

Zustava tedy nezodpovezeno Ad.1)

maarlin
Člen | 207
+
0
-

Ad.1:
Myslím, že bude potřeba přidat fetchAll do presenteru…

public function renderDefault()
{
        $news = new News;
        $this->template->news = $news->findAll()->orderBy('added')->fetchAll();
}
Endrju
Člen | 147
+
0
-

Aha, no jo :). Zrejmne jsem nepochopil jak to Ola myslel, takhle je to jasnejsi :))). Diky maarlin, funguje

Editoval Endrju (7. 3. 2010 19:01)

Ola
Člen | 385
+
0
-

Sorry za zmatky, psal jsem to narychlo z mobilu.