Seien Sie dabei!

Als Dienstleister im Markt für Internetanwendungen egal ob browserbasiert oder für das mobile Internet ist die edition-software GmbH eine gute Adresse wenn es um zuverlässige Anwendungen mit einem ausgezeichneten Preis-Leistungsverhältnis geht. Überzeugen Sie sich, sprechen Sie uns gerne an.

Ihre edition-software

SixCMS und Smarty Templates (1)

Das Content-Managementsystem SixCMS der Firma Six Offene Systeme GmbH kommt mit einer eingebauten Template Engine daher. Hier können mit Hilfe von Detail- und Listentemplates sowie Abfragen und Seiten Anwendungen erstellt werden. Dies ist jedoch nicht die einzige Möglichkeit. In diesen Artikel wird gezeigt, wie SixCMS mit Smarty "verheiratet" werden kann.

Smarty ist eine PHP basierte Template Engine die den Anspruch hat, die Präsentationslogik von der Anwendungslogik zu trennen. Dies impliziert, dass die Anwendungslogik in PHP geschrieben ist und von der Präsentation getrennt wird. Für alle ernstzunehmenden Anwendungen ist dies essentiell, da die Wartbarkeit und Skalierbarkeit sonst erheblich leiden kann.

Für erste Schritte laden wir uns die Smarty Engine herunter und installieren sie in einem beliebigen Verzeichnis, das durch den Webserver lesbar sein muss, aber nicht beschreiben werden sollte.

Da wir SixCMS zur Zusammenarbeit mit Smarty überreden wollen, werden wir nicht direkt die Smarty Klasse instantiieren, sondern sie zunächst ableiten. Wir erstellen eine Klasse sixcms_smarty. Im Konstruktor dieser Klasse stellen wir einige Variablen auf die entsprechenden SixCMS Pfade ein.

class sixcms_smarty extends smarty {
  public function __construct(){
    parent::__construct();
    $this->template_dir = CMSAPI_Value::Get('prefs.template_path_fs');
    $this->compile_dir =  CMSAPI_Value::Get('prefs.template_path_fs') . '/smarty/compile';
    $this->cache_dir =  CMSAPI_Value::Get('prefs.template_path_fs') . '/smarty/cache';
    $this->caching = true;
  }
}

Als Basis benutzen für die Compile- und Cache- Verzeichnisse von Smarty verwenden wir das Verzeichnis, in dem die SixCMS Templates liegen, die Unterverzeichnisse werden automatisch von Smarty angelegt. Wir können aber auch jedes andere Verzeichnis, das der Webserver beschreiben darf, verwenden.

Unser Ziel besteht nun darin, die typische Smarty Syntax zu verwenden:

<?php
$smarty = new sixcms_smarty();
$smarty->display('first_test_template');
?>

Die Label der Smarty Templates sollen identisch mit den Label der SixCMS Detailtemplates sein. Wir legen daher zunächst ein SixCMS Detailtemplate an und füllen es mit dem Inhalt:
Heute ist der: {$smarty.now|date_format:"%b %e, %Y"}.

Das Template nennen wir first_test_template und speichern es im SixCMS ab.

Bekanntlich werden die SixCMS Templates nicht unter ihrem Label sondern unter ihrer numerischen ID im Dateisystem abgespeichert. Damit unser Beispiel funktioniert müssen wir nun noch das Label in den korrekten Dateinamen des evaluierten SixCMS Templates umsetzen. Hierzu überladen wir die Methode display der Smarty Klasse in unserer sixcms_smarty Klasse:

  /**
   * überladen der basismethode zur umsetzung des cms template label auf die id
   */
  public function display( $template, $cache_id = null, $compile_id = null, $parent = null){
    // umsetzen des sixcms label in den eigentlichen dateinamen
    $out = array();
    CMSAPI_RecordGet(array('label' => $template, 
			   'max' => 1), 
		     $out, 
		     array('return' => 'ids', 
			   'progicon' => 
			   'template', 
			   'action' => 'get',
			   'readonly' => 'online'
			   )
		     );
    if (!empty($out)){
      $template = 'template'.$out[0].'.php';
      return parent::display( $template, $cache_id, $compile_id, $parent);
    }
    throw new SmartyException("Smarty error: template " . $template . "nicht gefunden");
  }

Für die Umsetzung benutzen wir die PHP-API im readonly Modus, die lizenzkostenfrei in jeder SixCMS Installation zur Verfügung steht. Gelingt uns die Umsetzung nicht, werfen wir einen normalen Smarty Fehler, der als PHP Laufzeitfehler dann auftritt.
Mit diesen einfachen Schritten haben wir nun die Grundfunktion einer Smarty Engine für SixCMS hergestellt. Im nächsten Kapitel wird es dann um die Ausgabe von Daten aus dem SixCMS in den Smarty Templates gehen.

Technologie

02/29/2012 - 18:43
02/29/2012 - 17:43
01/19/2012 - 11:45
04/06/2011 - 08:58
12/21/2010 - 23:28
11/26/2010 - 15:54
11/14/2010 - 10:42