Šablony, curlyBrackets a Web::Html

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
stpnkcrk
Generous Backer | 190
+
0
-

Ahoj,

snažím se nějak skloubit tyto tři věci dohromady a chci v šablonách používat Web::Html, ale nějak se mi to nedaří.

Například kód

{? $changeStatus = Html::el('a');}
{if $comment->status == 'p'}
{? $changeStatus->href("{link deleteComment! $comment->comment_id}"); }
{? $changeStatus->setText('smazat komentář');
{else}
{? $changeStatus->href("{link publishComment! $comment->comment_id}"); }
{? $changeStatus->setText('publikovat komentář');
{/if}
- {$changeStatus}

mi nevyhodí to, co bych si představoval – nelíbí se mu zápis curlyBrackets a vyhodí

Parse error: syntax error, unexpected '}' in /home/www/default/nette/stepankocourek.cz/app/temp/cache-Nette.Template%00c35dc6a0b8931fa8585142d0a2d6a025.list.phtml on line 16

(ve vygenerovaném PHP v /app/temp to udělá)

<?php
$changeStatus->href("{link deleteComment! $comment->comment_id ?>"); }
?>

Nikde jsem žádné příklady použití Html v šablonách nenašel, proto se obracím sem.
Máte někdo nějaký nápad?

PetrP
Člen | 587
+
0
-

ono {? … } je jen náhrada za <?php ?> a tam curlyBracket prostě nefunguje (ani nemůže). ale pro vygenerován linku můžeš takto:

{? $changeStatus->href($presenter->link('deleteComment!', $comment->comment_id)); }

a stejně i u toho druhého

Editoval PetrP (25. 12. 2008 13:38)

stpnkcrk
Generous Backer | 190
+
0
-

Nice! Funguje, díky.

(edit)
No jo, v tom případě se ale nedá používat v Web::Html fičurek jako jsou helpery {$promenna|date} a tak dále, že? To není zrovna pohodlné. Lze to vyřešit nějak jinak?

Editoval skocourek (25. 12. 2008 14:01)

PetrP
Člen | 587
+
0
-

To by zase mělo fungovat takto:

$template->date($promenna)

edit:
V čem je vlastně výhoda použitý Nette\Html před rovnou html v šablonách?

{if $comment->status == 'p'}
<a href="{link deleteComment! $comment->comment_id}">smazat komentář</a>
{else}
<a href="{link publishComment! $comment->comment_id}">publikovat komentář</a>
{endif}

Editoval PetrP (25. 12. 2008 15:34)

_Martin_
Generous Backer | 679
+
0
-

skocourek napsal(a):

(edit)
No jo, v tom případě se ale nedá používat v Web::Html fičurek jako jsou helpery {$promenna|date} a tak dále, že? To není zrovna pohodlné. Lze to vyřešit nějak jinak?

A je nutné používat v šablonách Web::Html? Přijde mi, že je to v tomto případě zcela zbytečné a navíc práci komplikující.

Nevyužil by jsi více takovýto způsob?

{if $comment->status == 'p'}
- <a href="{link deleteComment! $comment->comment_id}">smazat komentář</a>
{else}
- <a href="{link publishComment! $comment->comment_id}">publikovat komentář</a>
{/if}
PetrP
Člen | 587
+
0
-

Přesně tak _Martin_, dokonce si to napsal rychleji ;]

Jinak {endif} je správně {/if} nějak jsem si to promíchal z jinýma šábloníma syntaxema.

stpnkcrk
Generous Backer | 190
+
0
-

_Martin_: Přesně tak, jak jsi to napsal, jsem to měl napsané před tím, ale chtěl jsem použít Web::Html a zkoumal jsem, jak na něj.

David Grudl
Nette Core | 8218
+
0
-

25. prosince a vy tu řešíte curlyBrackets? ;)

curlyBrackets řadu věcí zjednodušují tak, že použití Web\Html situaci spíš komplikuje. Ale jsou případy, kdy by se Html hodilo, například při zapisování atributů. Tohle není úplně ono:

<a href="xxx"{if $level==0} class="top"{/if}{if $color || $background} style="{if $color}color:{$color};{/if}{if $background}background:{$background}{/if}"{/if}>

Zkusil jsem experimentálně přidat tohle (výsledek je ekvivalentní):

<a href="xxx" {attr class('top', $level==0) style('color', $color) style('background', $background)}>

Což se vlastně přeloží jako

echo Html::el()->class('top', $level==0)->style('color', $color)->style('background', $background);
veena
Člen | 98
+
0
-

David Grudl napsal(a):

Zkusil jsem experimentálně přidat tohle (výsledek je ekvivalentní):

<a href="xxx" {attr class('top', $level==0) style('color', $color) style('background', $background)}>

Což se vlastně přeloží jako

echo Html::el()->class('top', $level==0)->style('color', $color)->style('background', $background);

To chválim :-)

Třeba se časem dostanem k mému vysněnému ideálu templatovacího jazyka, který je jako obyčejné html, ale zároveň trošičku objektovější. Že mu bude rozumět kodér a syntax higlihting v editoru a zároveň nebude štvát programátora.

Tzn třeba to psaní html tagů bez ukončení a jejich zanoření by bylo dáno jen správným odsazením html tagů.

Takže {if tenhle_div_zobrazit}<div>{/if} by stačiló a nemuselo by být někde v hloubi ještě

{if tenhle_div_zobrazit}</div>{/if}

David Grudl
Nette Core | 8218
+
0
-

No jestli máš na to chuť, můžeš napsat takový filtr pro Nette.

veena
Člen | 98
+
0
-

David Grudl napsal(a):

No jestli máš na to chuť, můžeš napsat takový filtr pro Nette.

Zkusím se podívat do zdrojáků, co je potřeba pro to udělat a jestli to zvládnu.

David Grudl
Nette Core | 8218
+
0
-

Filtr je jakákoliv funkce nebo metoda, která má na vstupu řetězec (obsah šablony) a vrací řetězec (přefiltrovanou šablonu, tj. nějaký PHP soubor).

Jod
Člen | 701
+
0
-

Btw toto poznáte? Haml , v RoR sa s tým celkom fajn robilo :)