switch v php, ale v nette jak?

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

Dobrý den nebo také ahoj.
Chci se zeptat zda-li je nějaká možnost v nette pro zapsaní funkce switch z php
můj původní kód v php:

$panel = mysql_result($result, $i, 'panel');
switch ($panel) {
	case 'web':
		echo '<div class="panel panel-info">';
	break;
	case 'server':
		echo '<div class="panel panel-danger">';
	break;
	case 'problem':
		echo '<div class="panel panel-warning">';
	break;
	case 'info':
		echo '<div class="panel panel-success">';
	break;
	default:
		echo '<div class="panel panel-primary">';
	break;
}

kdy $result je databáze a panel je sloupeček.

Děkuji za odpovědi.

ali
Člen | 342
+
+2
-

Zrejme myslis moznost pro zapsani v latte a moznost je, pouzij jednoduse if

{if $panel === "web"}
...
{elseif $panel === "server"}
...
...
...
{else}
...
{/if}
Altimit
Člen | 82
+
0
-

takže pokud to dobře chápu tak tedy to bude vypadat nějak takto?

<?php
<div class="panel
        {if $post->panel === "web"}
            panel-info
        {elseif $post->panel === "server"}
            panel-danger
        {elseif $post->panel === "info"}
            panel-success
        {else}
            panel-default
        {/if}
        ">
?>

Omlouvám se, ale učím se to..
Děkuji za odpověď.

CZechBoY
Člen | 3608
+
-4
-

Nebo můžeš použít

{php switch:
  case 5: ...;
  endswitch;
}

Ale není to moc přehledný :/

Editoval CZechBoY (13. 11. 2015 8:26)

Altimit
Člen | 82
+
0
-

CZechBoY to si myslím, že to nejde protože v switch musíš definovat default a to je už v nette a dělálo to neplechu (když jsem to četl tady na forum)
jinak už jsem přišel v čem mi to pak nenačítalo..
byla to fakt drobnost..
zde je kod z nette:

<?php
<div n:foreach="$posts as $post" class="post">
    <div class="panel
        {if $post->panel === "web"}
            panel-info
        {elseif $post->panel === "server"}
            panel-danger
        {elseif $post->panel === "info"}
            panel-success
        {else}
            panel-default
        {/if}
        ">
            <div class="panel-heading"><h4 style="margin-top:-5px;"><a n:href="Post:show $post->id">{$post->title}</a></h4>
            <small class="text-right">Autor: <span style="color:black;">{$post->autor}</span> Datum: <span style="color:black;">{$post->created_at|date:'j. m. Y'}</span></small>
            </div>
            <div class="panel-body">{$post->content}</div>
        </div>
</div>
?>

Chyběl mi tak <div n:foreach="$posts as $post" class="post">
a už to jede :-)
jinak děkuji za pomoc alimu.

ali
Člen | 342
+
0
-

Jinak pro to, na co to potrebujes bych ti spis doporucil makro n:class

<div n:class="$post->panel === 'web' ? 'panel-info' : ($post->panel === 'server' ? 'panel-danger' : ($post->panel === 'info' ? 'panel-success' : 'panel-default'))">
Milo
Nette Core | 1283
+
+8
-

@Altimit Jestli to chceš použít na více místech v šablonách napříč aplikací, udělal bych si na to filtr. Přibližně:

$latte->addFilter('cssClassPanel', function ($panel) {
	switch ($panel) {
		case 'web': return 'panel-info';
		case 'server': return 'panel-danger';
		...
	}
	return 'panel-primary';
});

A v šablonách:

<div class="panel {$panel |cssClassPanel}">
	...
</div>