Oznámení

Provoz fóra byl ukončen

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

David Grudl
Nette Core | 6806

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 :-)