Oznámení

Provoz fóra byl ukončen

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š