Oznámení
Práce s handlery krok za krokem
před 12 lety
- soustruh
- Člen | 15
omlouvám se za další dotaz na toto téma, ale nějak jsem z předchozích odpovědí nepochopil, jak mám v textu formátovaném pomocí texy! zapsat tento kód
<? hodnoceni(7); ?>
aby se funkce hodnoceni skutečně spustila. používám texy 2 beta 2 rev. 172 na php 4. předem díky za odpověď :-)
před 12 lety
- soustruh
- Člen | 15
nemohl byste mi prosím přesně napsat, jaký kód do stránek vložit, abych mohl spouštět tuto konkrétní funkci s celočíselnými argumenty? opravdu se v tom zaslaném odkazu nevyznám, už jsem to právě dříve zkoumal a bez výsledku :-( díky za trpělivost :-)
Editoval soustruh (29. 8. 2007 14:22)
před 12 lety
- David Grudl
- Nette Core | 6806
Do textu zapsaného v Texy syntaxi není možné vkládat PHP skripty. Takže je buď možné text interpretovat předem:
ob_start();
include 'soubor.texy';
$text = ob_get_clean();
Nebo vytvořit tzv. skript
handler. Když se pak v textu objeví např.
{{ mojefunkce: 13, 5, xyz }}
, zavolá se mnou určená (přes
$texy->addHandler
) funkce. Např.
scriptHandler($invocation, 'mojefunkce', array(13, 5, 'xyz'))
.
A co tato funkce vrátí, to se objeví v textu. Kdyby její podoba byla
taková:
/**
* @param TexyHandlerInvocation handler invocation
* @param string command
* @param array arguments
* @param string arguments in raw format
* @return TexyHtml|string|FALSE
*/
function scriptHandler($invocation, $cmd, $args, $raw)
{
if ($cmd === 'hodnoceni') {
return (string) hodnoceni($args[0]);
}
return $invocation->proceed();
}
…tak všude v textu bude {{hodnoceni: 7}}
nebo
{{hodnoceni(7)}}
nahraženo výsledek funkce
hodnoceni(7)
.
před 12 lety
- soustruh
- Člen | 15
moc díky, už mi to funguje, jen s jednou drobnou chybou – html kód vytvořený voláním funkce se vkládá na začátek dokumentu, ne na to místo, ve kterém je volán skript. můžete si to prohlédnout přímo na příslušné stránce
v místě, ve kterém je text
**Hodnocení Worms Česky:** {{hodnoceni(7)}}se tedy zobrazí jen
Hodnocení Worms Česky:
a 7 barevných červíků jako výsledek funkce hodnoceni(7) je zobrazeno na stránce úplně nahoře. můžete mi prosím ještě poradit, co s tím?
Editoval soustruh (29. 8. 2007 22:54)
před 12 lety
- David Grudl
- Nette Core | 6806
Zřejmě funkce místo návratové hodnoty (return) přímo něco vypisuje (echo).
před 12 lety
- soustruh
- Člen | 15
ano, opět jste měl pravdu :-) takže jsem doufal, že už nebudu otravovat, ale narážím na další, snad už definitivně poslední, problém:
výstup skriptu (aspon u mě) není formátován texy! (nemohu např.
použít klasický texy zápis pro obrázky), takže se obrázky snažím
vkládat klasicky přes <img… problém je v tom, že stále i přes
nefunkčnost jiných modulů texy dochází k náhradě znaků < a >
kódem a uvozovky se mění na české (opět uvádím odkaz). jak toto chování vypnout? zkoušel jsem uzavírat
výstup skriptu do těchto uvozovek
i do bloku /---html \---, ale
neúspěšně
před 12 lety
- David Grudl
- Nette Core | 6806
Pokud je výstupem handleru textový řetězec, tak je ještě dále zpracováván – třeba znaky < & > jsou nahrazeny za entity, aplikují se typografické korekce (ony uvozovky) atd. Pokud bych chtěl na výstup poslat něco složitějšího, musím šáhnout po TexyHtml (jeden stručný návod už je třeba tady).
Poměrně snadno se dá pomocí TexyHtml poslat na výstup text ve formátu Texy:
function scriptHandler($invocation, $cmd, $args, $raw)
{
$texy = $invocation->getTexy();
...
// nějaký text s Texy formátováním
$str = '[* obrazek.jpg *]';
$el = TexyHtml::el();
$el->parseLine($texy, $str); // nebo $el->parseBlock($texy, $str);
return $el;
...
}
před 12 lety
- soustruh
- Člen | 15
fajn, je to tam 8-) moc díky za pomoc a trpělivost :-)