Smarty plugin pro Texy!
3. January 2007
Jistě jste slyšeli o templatovacím systému Smarty a převaděči textu do formátovaného HTML kódu s názvem Texy!. Smarty používám již téměř rok. Texy! jsem začal používat právě teď a potřeboval jsem najít způsob jak ho bezbolestně zaintegrovat do stávajícího webu. Výsledkem je tento jednoduchý Smarty plugin.
Pro tvorbu webů v PHP používám Zend Framework (doplněný o vlastní přetížené třídy a vlastní pluginy). Následující fragment kódu ukazuje vytvoření nové instance Texy! a uložení pointeru do registrů.
require_once('texy-1.1/texy/texy.php');
$texy = new Texy();
Zend::register('texy', $texy);Následující kód je ze souboru block.texy.php, který musí být umístěn v plugin adresáři Smartů.
/*
 * Smarty plugin
 * -------------------------------------------------------------
 * File:     block.texy.php
 * Type:     block
 * Name:     texy
 * Purpose:  convert a block of text from Texy! to HTML
 * -------------------------------------------------------------
 */
function smarty_block_texy($params, $content, &$smarty, &$repeat) {
    if(!$repeat){
        if(Zend::isRegistered('texy')) {
            $texy = Zend::registry('texy');
            $str = $texy->process($content);
            return $str;
        } else {
            return $content;
        }
    }
}A následuje kýžená ukázka použití na přímo ve smarty templatu.
Pokud je splněna podmínka 
if(Zend::isRegistered(‚texy‘))  bude blok textu
zpracován pomocí Texy!. V opačném případě bude zobrazen beze
změny.
{texy}{$article->content}{/texy}Jak vidíte je to velmi jednoduché.
Článek patří do kategorie: PHP
9 Komentářů Přidat komentář
1. Adam Heinrich | 5. January 2007 v 16.57
O Smarty jsem neslyšel, ale začíná se mi líbit:-)
2. d3x | 2. October 2007 v 21.45
Zdarvim, hezký plugin ale něják mi neni jistý tenhle řádek…
Nemá to být náhodou: $smarty->assign(‚texy‘, $texy);
Jinak mi to hlásí chybu. Dík za radu
3. Vlasta | 2. October 2007 v 22.08
Kod je spravne – jen je potreba si uvedomit, ze se v clanku pracuje se Zend Frameworkem. Pokud ZF nepouzivate, tak neni duvod Zend::register pouzivat (jedna se objektovou nahrazku globalnich promennych)
4. d3x | 2. October 2007 v 22.22
Jo díky za vysvětlení a nevíš jak by vypadal kód bez použití ZF – nepoužívám:( S php nejsem tak daleko ale rozumim.)
5. Vlasta | 2. October 2007 v 22.44
[4] Pak bych tedy nastavil instanci texy do Smarty:
$smarty->assign(‚texy‘, $texy);
a v pluginu bych místo řádky, která pracuje se Zendem uvedl:
$texy = $smarty->get_template_vars(‚texy‘);
6. d3x | 3. October 2007 v 0.14
Díky
7. d3x | 3. October 2007 v 0.31
Ještě maličkost ---> co by mělo být v podmínce místo: if(Zend::isRegistered(‚texy‘))
8. Vlasta | 3. October 2007 v 7.18
[7]
$texy = $smarty->get_template_vars(‚texy‘);
if($texy != null) {
…
}
9. d3x | 3. October 2007 v 16.44
Kdo chce návod bez Zend Framework a plugins tak tady to je:
1.
// načtení aplikace texy
require_once (INSTALL_PATH.„smarty/texy2/texy/texy.php“);
$texy = new Texy();
// načtení souboru „syntax.texy“ obsahující texy text
$txy = file_get_contents(„syntax.texy“);
$html = $texy->process($txy);
$smarty->assign(‚texy‘,$html);
//
?>
2. do šablony potom stačí vložit {$texy}
3. toť vše :)
Přidat komentář
Povolené HTML značky:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>
Odkazovat na tento článek | Přihlásit se k odběru těchto komentářů přes RSS Feed