použití {$promenna} v {block|texy}
- MartinJanda
- Člen | 60
Ahoj,
jak správně použít v {$promenna} v {block|texy}?
Zkouším:
{block|texy}
{$title}
========
text bla bla bla
{/block}
{$title} to vypíše, ale formát podtržení na H1 to nepřevede. Místo toho vrací {$title}======== . Přitom text dál zformátuje správně.
Inicializuju v beforeRender v BasePresenter, ze kterého pak dědím do všech presenterů
$texy = new Texy;
$texy->encoding = 'utf-8';
$texy->allowedTags = Texy::NONE;
$texy->allowedStyles = Texy::NONE;
$texy->setOutputMode(Texy::XHTML1_STRICT);
$this->template->registerFilter('Nette\Templates\CurlyBracketsFilter::invoke');
$this->template->registerHelper('texy', array($texy, 'process'));
Editoval MartinJanda (14. 4. 2009 9:45)
- Honza Marek
- Člen | 1664
Aha… tak to bych se nedrbal levou uchou za pravou nohou a napsal bych tam něco takového:
<h2>{$title}</h2>
{block|texy}
text bla bla bla
{/block}
- MartinJanda
- Člen | 60
Jasně, zatím to tak řeším, ale asi mi dáš za pravdu, že to ubírá na významu použití Texy a přehlednosti.
- _Martin_
- Generous Backer | 679
MartinJanda napsal(a):
Jasně, zatím to tak řeším, ale asi mi dáš za pravdu, že to ubírá na významu použití Texy a přehlednosti.
Ani ne, význam Texy přeci není psát celé (X)HTML čistým textem. Ve většině případů jde o to, mít někde uložené lehce upravitelné texty (třeba zadané uživateli, kteří (X)HTML znát nemusí) a ty následně pomocí Texy formátovat. Nikoliv psát šablonu (kde se naopak obsah typu (X)HTML očekává) způsobem
{block|texy}
šablona
{/block}
To poněkud ubírá na významu použití šablon.
- kravčo
- Člen | 721
To, ako to funguje je riadne pochopiteľné, php parser „zožerie“ aj
nový riadok bezprostredne za ukončovacím tagom ?>
, otázkou
je, či sa to dá považovať za správnu funkcionalitu. Ja si myslím,
že nie.
Už pred časom som skúmal ako vyzerá výstup po expandovaní
CurlyBracketsFiltra
– totiž ja osobne mám rád pekne odsadené
HTML, nové riadky, kde ich treba a podobne – a tam sa tento problém tiež
prejaví: z vygenerovanej šablóny pri vykonaní miznú nové riadky práve
týmto spôsobom.
Myslím, že pridanie medzery nie je riešenie – pridáva do výstupu medzeru, ktorá môže byť nežiadúca. Problém by vyriešilo zdvojenie nového riadku. To by však mohlo mať za následok sťažené debugovanie vygenerovaných šablón…
Čo si o tom myslíte vy?
Editoval kravco (15. 4. 2009 23:58)
- David Grudl
- Nette Core | 8172
Lidi, vy si navymýšlíte věci – pekne odsadené HTML ;)
Ok, zkusil jsem to implementovat.
- kravčo
- Člen | 721
David Grudl napsal(a):
Lidi, vy si navymýšlíte věci – pekne odsadené HTML ;)
Ok, zkusil jsem to implementovat.
Áno, vymýšľam si úchylné veci, no nemyslel som to ako feature request. Navyše odsadzovanie aké som myslel na úrovni CB implementovať nejde – musí prebiehať v runtime a je zamýšľané buď na development, alebo v kombinácii s kešovaním hotového html výstupu:
list.phtml
<ul>
{include 'items.phtml'}
</ul>
items.phtml
<li>item1</li>
<li>item2</li>
výsledok
<ul>
<li>item1</li>
<li>item2</li>
</ul>
To na čo som upozorňoval (resp. navrhoval úpravu) je miznutie nového riadku z výstupu v prípade, že cb konštrukt je na konci riadku a zmenou na php blok parser tento znak nového riadku vezme so sebou… Pri podmienkach a cykloch by to mohlo byť žiadúce, ale aj nie – podľa situácie:
<ul>
<li>item1</li>
<li>item2</li>
{if 1}
<li>item3</li>
{/if}
{if 0}<li>item4</li>{/if}
</ul>
Naopak pri vypisovaní premenných určite nie – viď príklad vyššie s
{block |texy}
, generovanie plaintext mailov zo šablóny (kde jeden
newline hore-dole zaváži) a pod.
Tento príspevok je myslený ako námet na diskusiu ;)
- David Grudl
- Nette Core | 8172
kravco napsal(a):
To na čo som upozorňoval (resp. navrhoval úpravu) je miznutie nového riadku z výstupu v prípade, že cb konštrukt je na konci riadku a zmenou na php blok parser tento znak nového riadku vezme so sebou… Pri podmienkach a cykloch by to mohlo byť žiadúce, ale aj nie – podľa situácie:
No vždyť píšu, že jsem se to pokusil implementovat…
list.phtml
<ul> {include 'items.phtml'} </ul>
Tohle raději dělat manuálně, třeba pomocí
{include 'items.phtml'|indent}
, protože to nemusí být vždy
chtěné.
- kravčo
- Člen | 721
Dobré :)
Mám návrh na dva malé fixy:
- prvý riadok „nezačína“ na
"\n"
, teda v prvom riadku je fungovanie trochu rozbité (v predošlej revízii nebolo – nahradzovalo sa v"\n" . $s
) - ak šablóna začína prázdnym riadkom, kód úvodných nastavení
ukončený
?>
bez nového riadka zabráni jeho vypísaniu
ps> Tipnite si, čo vypíšu tieto dve šablóny?
#1
{contentType text/plain}
qwerty
#2
<!-- tu má byť úplne prázdny riadok, texy mi ho v kóde nezobrazí -->
{contentType text/plain}
asdfgh
- David Grudl
- Nette Core | 8172
Můžeš prosím vyzkoušet, jestli vložení \n
před
$s
na tomto
řádku problémy vyřeší?