tutorials.de Buch-Aktion 05/2012
RSS-Feed anzeigen

engelb's Blog

MODx Smarty Templates

Bewerten
von Michael Engel am 17.07.08 um 16:50 (12175 Hits)
Meine Firma setzt nun seit einer Weile auf Smarty als CMS System. Soweit war es ja auch immer OK das einzige Problem das ich immer damit hatte das es Schlichtweg keine Template Engine Verwendet sondern Templates durch hässliche Snippets zusammengebaut werden müssen in denen HTML Code abgelegt werden muss weil es sonst weit Oversized währ.

In einer Späteren Version soll das CMS eine Smarty unterstüzung bekommen, doch bis dahin dauerte es mir zu lange ,) Und die Unterstüzung wurde kuzerhand als Plugin geschrieben. Da sicherlich noch andere Intresse an so etwas haben erscheint es hier:

Zuerst wurde Smarty komplett heruntergeladen und unterhalb von /manager/ abgelegt worden, hier kann man natürlich stattdessen auch das ggf. vorhandene Paket verwenden.

Dannach legen wir das tmp_c Verzeichniss mit dem Smarty später arbeitet des weiteren benötigen wir noch ein Verzeichniss für die Smarty Scripte... hier wurde in meinem Fall "/smartyScripts/" auf der MODx Hauptebene angelegt.

Zuletzt muss noch das Plugin unter Resourcen erstellt werden:
PHP-Code:
if(file_exists(getcwd().'/smartyScripts/'.$modx->documentObject['id'].'.php')) {
define('SMARTY_DIR'getcwd().'/manager/Smarty/libs/' );
require_once(
'manager/Smarty/libs/Smarty.class.php');

$smarty                 = new Smarty;
$smarty->config_dir     SMARTY_DIR;
$smarty->template_dir   './smartyScripts';
$smarty->compile_dir    './manager/Smarty/tmp_c';
$smarty->cache_dir      './manager/Smarty/tmp_c';

$smarty->caching        false;
$smarty->force_compile  true;
$smarty->compile_check  false;

// None-Caching Blöcke registrieren
function smarty_block_dynamic($param$content, &$smarty) {
    return 
$content;
}
$smarty->register_block('dynamic''smarty_block_dynamic'false);

function 
modx_get_template ($tpl_name, &$tpl_source, &$smarty_obj)
{
    
// Get Template from Modx
    
global $modx;
    
$tpl_source $modx->documentOutput;
    
// Dies ist nötig da unsere Designer und ModX viel inline Javascript verwendet das sonst zu Fehlern von Smarty führt.
    
$tpl_source preg_replace("%<script.*</script>%Uis","{literal}\\0{/literal}"$tpl_source);
    
$tpl_source preg_replace("%<style.*</style>%Uis","{literal}\\0{/literal}",   $tpl_source);
    return 
true;
}

function 
modx_get_timestamp($tpl_name, &$tpl_timestamp, &$smarty_obj)
{
       
$tpl_timestamp time();
        return 
true;
}

function 
modx_get_secure($tpl_name, &$smarty_obj)
{
    
// assume all templates are secure
    
return true;
}

function 
modx_get_trusted($tpl_name, &$smarty_obj)
{
    
// not used for templates
}

// register the resource name "modx"
$smarty->register_resource("modx", array("modx_get_template",
                                       
"modx_get_timestamp",
                                       
"modx_get_secure",
                                       
"modx_get_trusted"));

require(
getcwd().'/smartyScripts/'.$modx->documentObject['id'].'.php');
$modx->documentOutput $smarty->fetch('modx:current');

Wichtig: es muss mit dem Ereigniss "OnWebPagePrerender" Verknüpft werden.


Soweit ist nun alles vorbereitet.Und das ganze Funktioniert so das die Programmierabteilung eine PHP Datei mit der Dokumenten ID als namen in das Smarty Verzeichniss Uploaded, in welchem die assigns auf die Smarty-variablen stehen. Und im Template Editor können die Designer wie gewohnt auf Smarty Befehle zugreifen, und müssen nicht mehr wegen jeder Kleinigkeit ein Snippet anfordern.

Ich hoffe es ist nicht Allzu Umständlich beschrieben ,)

"MODx Smarty Templates" bei Twitter speichern "MODx Smarty Templates" bei Facebook speichern

Kategorien
Programming

Kommentare

  1. Avatar von Radhad
    Also Smarty zu verwenden finde ich schon bekloppt: warum eine Template Sprache wie PHP mit einem weiteren Template Layer verknüpfen und verunstalten? Wenn man schon ein CMS entwickelt dann wenigstens mit dem MVC Pattern, dann ist sowas wie Smarty auch überflüssig Das Ding bringt auch viel zu viel Overhead mit sich. Wer Caching brauch, kann sich das ja auch kurz selber schreiben.

    Wenn die Designer die abtrahierte Sprache von Smarty erlernt haben, können die auch die paar PHP Befehle wie if, else, for, foreach und echo auch erlernen und anwenden - zumal sie dann ein besseres Verständnis für die (PHP-)Entwicklung haben.

    Naja, ist meine Meinung zu dem Thema Zu deiner Implementierung: größter Kritikpunkt meinerseits ist, dass es keine Klasse ist. Schreibt ihr noch prozedural / mit PHP4? Dann dürfte das CMS aber ganz schön aufgebläht sein.