Kombinace texyElements vs. curlyBrackets
- stpnkcrk
- Generous Backer | 190
Začal jsem v app používat filtr texyElements. Ano, vím, že je teprve ve
fázi vývoje, ale prostě <texy> ... </texy>
se mi
líbí více než {block|texy} ... {/block}
.
Relativně to funguje. Problém ovšem nastává, pokud uvnitř
<texy> ... </texy>
používám jakoukoliv curlyBrackets
syntaxi. Zkusil jsem obě pořadí registrace filtrů, ale obě zlobí.
Problémy jsou:
Pokud je nejdřív texyElements a až poté curlyBrackets, nelze používat
objektové proměnné (> totiž Texy nahradí za &rt; dřív, než prijde
ke slovu curlyBrackets a ten potom řve, že takovou proměnnou nezná), pokud
je nastaven imageModule->root a pro název obrázku se používá výpis
proměnné, tak je nemožné používat absolutní cestu, protože v době
zpracovávání Texy je tam [* {$promenna} *]
a Texy tam přidá
ten root.
Pokud je nejdřív curlyBrackets a poté až texyElements (řekl bych
logičtější postup), nastává chyba při jakém koliv výpisu proměnné
přes curlyBrackets, protože místo obsahu to vypíše něco na způsob
@php:p10@
. A zkoušel jsem jak {$promenna}
, tak
{!$promenna}
.
Napadá někoho z Vás, jak z toho ven?
Editoval skocourek (24. 1. 2009 17:36)
- kravčo
- Člen | 721
Podobný problém som riešil dávnejšie, vyriešil som ho tak, že som opustil texyElements…
V tvojom prípade totiž nie je ani jedno poradie správne, v tom je ten problém…
Zoberme si jednoduchý príklad:
<texy>{!$data->text}</texy>
Na chvíľu predpokladajme, že by to nevypísalo tie divné značky ale to, čo má:
- poradie texy, curly:
To, čo je medzi texy tagmi zožerie texy, vypľuje XHTML – minimálne zobáky escapuje, teda curlysyntax pokazí. Výsledkom je
<p><?php echo $data->text ?></p> // Parse error: ...
- poradie curly, texy:
Prebehne náhrada curly. To čo vygenerovalo curly dostane Texy ako vstup, sparsuje to a dá výsledok
<p><?php echo $data->text ?></p>
čo nie je celkom to, čo by sme očakávali, že áno…
Ako to funguje naozaj:
Od revízie 179 (28.12.2008) je php kód chránený pred filtrami tak, že
namiesto neho filtrami prechádzajú značky, vtedy v tvare
<php:p
číslo >
, od revízie 197
(21.01.2009) v tvare \x01@php:p
číslo
@\x02
. Ani jedna z týchto značiek neprejde cez Texy nezmenená,
zrejmé je, že zobáky escapne, čo je však menej zrejmé je, že
\x01
a \x02
sa v ňom stratia, Texy ich totiž
používa na svoje interné značenia… a tak sa značky neprevedú späť na
kód a vypíšu sa ich zmenené podoby namiesto toho, aby sa vykonal kód,
ktorý zastupujú.
Prečo tieto dva filtre v takomto spojení nie sú dobré?
Oni totiž nebudú fungovať tak, ako by mali. V prípade, že napríklad
značky zameníš za @@php:p
číslo @@@
,
bude to robiť to, čo od toho očakávaš, ale nie to, čo by malo – totiž
texy síce prebehne text, ktorý je v šablóne natvrdo, ale nie hodnoty,
ktoré sa doň dostávajú dynamicky.
Vráťme sa k príkladu a nech $data->text
je povedzme
"príklad":http://example.com
Tento text nám šablóna z pôvodného príkladu vypíše AS IS, zatiaľ čo, ak šablónu upravím takto:
{block|texy}{!$data->text}{/block}
vypíše mi odkaz – to čo by som normálne očakával.
filter texyElements sa dá použiť na statický text, v ktorom nie sú žiadne premenné, ale tým, že už funguje aj {block|texy}, stáva sa len akousi oldschoolovou alternatívou…
Editoval kravco (24. 1. 2009 19:21)