Oznámení
Jak vkládat další direktivy
před 12 lety
- veros
- Člen | 12
Dobrý den,
Snažím se rozšířit Texy! tak, aby umělo ignorovat některé kousky textu, které hodlám dále zpracovávat.
Napříkald {{blablabla}}
by mělo po prohnání Texy! zůstat
dáke {{blablabla}}
.
Předpokládám, že bych měl vypnout scriptModule
, ale
nevidím jak. TexyScriptModule
nikde netestuje atribut
allowed
, přehlédl jsem něco?
Další problém je, že Texy! okolo řádku vkládá automaticky značky
<p>
a </p>
, takže ve výsledku bych
stejně dostal <p>{{blablabla}}}</p>
Předem děkuju za jakoukoliv radu
--Věroš
PS: Přiznávám, že v PHP jsem několikaletý začátečník.
před 12 lety
- David Grudl
- Nette Core | 6806
Princip skriptování je spíš opačný – kousky textu nezpracovávat až po přeformátování, ale během přeformátování. A to tak, že si uděláš vlastní handler pro scriptModule (popis zde).
Pokud chceš zpracovávat až po, můžeš také lokálně vypnout Texy.
před 12 lety
- veros
- Člen | 12
Díky za odpověď, zmiňovaný odkaz jsem už četl.
Texy! používám přes XML-RPC ve větším kusu programu který není v PHP, ale v Pythonu.
V PHP wrapperu pro Texy! tedy nemám možnost zjistit, co přesně se má
vložit místo toho {{blablabla}}
. Jinak by to bylo samozřejmě
nejlepší řešení. Volat znovu Pythonovou část programu přes XML-RPC
z Texy wrapperu mi přijde trošku šílené, může to vést k deadlocku,
apod. :-)
Proto mi přišlo jako nejjednodušší řešení přesvědčit Texy!, aby mi
nechalo na pokoji nějaké sekvence. Napadá mne ještě zkusit udělat handler
pro Texy!, který bude nahrazovat {{blablabla}}
za
{{blablabla}}
a dál si to budu upravovat v Pythonu.
Případně existuje nějaká možnost, jak si zavést vlastní syntaxi pro jednořádkové direktivy?
#blablabla
Děkuju za čas
--Věroš
Editoval veros (13. 2. 2007 12:37)
před 12 lety
- David Grudl
- Nette Core | 6806
Tak si vytvoř v PHP handler pro scriptModule, který prostě
{{xxx}}
zachová. Nějak takto:
function preserve($element, $identifier, $args)
{
$element->setContent($identifier, TRUE);
}
$texy->scriptModule->handler = 'preserve';
pozn. platí jen pro verzi Texy 1.x
před 12 lety
- veros
- Člen | 12
Nakonec jsem skončil ve stavu
function scriptHandler(&$element, $identifier, $args) {
$value = "{{". $identifier . "|";
foreach ($args as $i) { $value = $value . $i . "|"; }
$value = substr($value,0,-1) . "}}";
$element->setContent($value, TRUE);
}
$texy->scriptModule->handler = scriptHandler;
kdy dostávám pro vstup
krteček
{{imgbox(id=10,align=L)}}
vcelku uvěřitelný výstup
<p>krteček</p>
<div>{{imgbox|id=10|align=L}}</div>
Děkuju za pomoc.
--Věroš
Editoval veros (13. 2. 2007 21:02)
před 12 lety
- David Grudl
- Nette Core | 6806
ještě můžeš doplnit do handleru:
$element->contentType = TEXY_CONTENT_BLOCK;
Díky tomu se nebude element obalovat do <div>
.
Ještě maličkost – existuje předpřipravený handler, který lze aktivovat takto:
$texy->scriptModule->handler = array($texy->scriptModule, 'defaultHandler');
A ten vstup např. {{imgbox(id=10,align=L)}}
transformuje na
<texy:script content="imgbox(id=10,align=L)" />
pozn. platí jen pro verzi Texy 1.x
před 12 lety
- veros
- Člen | 12
Děkuju za opravu,
myslím, že to první navržené řešení je pro moje účely více než dostačující.
--Věroš