Smarty und das Adventure-PHP-Framework?!

Das Forum soll der Ablage von Lösungen für immer wieder auftauchende Problemstellungen dienen. // This forum contains solutions to problems that frequently occur.
Antworten
Benutzeravatar
dr.e.
Administrator
Beiträge: 4525
Registriert: 04.11.2007, 16:13:53

Smarty und das Adventure-PHP-Framework?!

Beitrag von dr.e. » 17.02.2008, 00:29:39

Ich habe in einer E-Mail die Frage gestellt bekommen, ob es möglich ist, bereits vorhandene Smarty-Templates im Adventure-PHP-Framework (APF) weiter zu verwenden. Hier ein Auszug aus der Antwort:

Im Moment arbeite ich mit "normalem" PHP und benutze für die Ausgabe die Template-Engine Smarty. Smarty läßt überaus dynamische Templates zu und ist einfach zu programmieren, sodass ich nur schweren Herzens darauf verzichten möchte.
Der Einsatz ist auch grundsätzlich zu befürworten, nur hat Smarty im Vergleich zum APF einen beschränkteren Einsatzbereich. Sobald eine Applikation komplexer wird und daher mehrere Hirarchiestufen von Templates, die dynamisch gefüllt werden, existieren müssen, wird es nur mit sehr hohem Aufwand möglich dies mit Smarty aufzubauen. Eine Möglichkeit ist der Einsatz von Funktionen, jedoch wird der Programmcode irgendwann nicht mehr mit sinnvollem Einsatz wartbar. An diesem Punkt setzt das Adventure-PHP-Framework an, das ermöglicht, beliebig komplexe GUIs zu designen und neue Funktionen mit XML-Tags dynamisch in bestehende Templates einzufügen. Ich behaupte daher, dass es keine Funktion an Smarty gibt, die nicht auch, oder sogar besser mit dem Adventure-PHP-Framework erledigt werden können. Man kann sagen, dass im Framework _auch_ Templating enthalten ist, es jedoch noch erheblich mehr leisten kann.

Meine Frage dazu:
Ist es möglich, die Templates für die Seitenausgabe im Adventure-FW über die Template-Engine Smarty zu realisieren.
Das via Smarty zu realisieren ist kein Problem. Im konkreten Beispiel könnte ich mir vorstellen, dass die Ausgabe einer Webseite im DocumentController eine Instanz von Smarty erstellt und die Ausgabe des Templates von Smarty in den Inhalt des aktuellen Knotens zurückschreibt. Nehmen wir an, es existiert ein Standard-Template, das in der index.php als globales Template angegeben wird, so kann man in diesem Template einen DocumentController definieren, der die Aufgabe wir beschrieben ausführt. Codetechnisch könnte das so aussehen:

index.php

Code: Alles auswählen

// Pfad zum Applikations-Verzeichnis angeben
define('APPS__PATH','./apps');
define('APPS__NAME','mysite');

// ApplicationManager einbinden
require_once(APPS__PATH.'/core/applicationmanager/ApplicationManager.php');

// Page-Controller einbinden
import('core::pagecontroller','pagecontroller');

// Seite transformieren und ausgeben
$Page = new Page();
$Page->loadDesign('sites::mysite','pres/templates/website');
echo $Page->transform();


website.html

Code: Alles auswählen

<@controller namespace="sites::mysite::pres:.documentcontroller" file="smarty_template_controller" class="smarty_template_controller" @>


smarty_template_controller.php

Code: Alles auswählen

require_once('/path/to/my/smarty/Smarty.class.php');

class smarty_template_controller extends baseController
{

   function transformContent(){

      // Smarty instanziieren
      //
      // Zur Steigerung der Performance könnte man Smarty an dieser Stelle auch singleton
      // verwenden: $smarty = &Singleton::getInstance('Smarty');
      $smarty = new Smarty();

      // Smarty konfigurieren
      $smarty->template_dir = '/path/to/my/smarty/templates';
      $smarty->compile_dir = '/path/to/my/smarty/templates_c';
      $smarty->cache_dir = '/path/to/my/smarty/cache';
      $smarty->config_dir = '/path/to/my/smarty/configs';

      // Dem Template Werte zuweisen
      $smarty->assign('foo','bar');

      // Smarty-Template transformieren und in den Inhalt des aktuellen Knotens einsetzen
      $this->__Content = $smarty->fetch('mysmyrty.tpl');

    // end if
   }

 // end class
}


Damit wird der Output des Smarty-Templates in den aktuellen Knoten ($this->__Content) geschrieben und beim Transformieren der Seite aus gegeben.
Viele Grüße,
Christian

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast