* The own template engine for loading caching and sending out the web pages
* and emails.
*
- * @author Roland Haeder <webmaster@ship-simu.org>
- * @version 0.0
+ * @author Roland Haeder <webmaster@mxchange.org>
+ * @version 0.3.0
* @copyright Copyright(c) 2007, 2008 Roland Haeder, this is free software
* @license GNU GPL 3.0 or any newer version
+ * @link http://www.mxchange.org
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
*/
private $configVariables = array();
- /**
- * The language instance which should link to an object of LanguageSystem
- */
- private $langInstance = null;
-
/**
* Loaded templates for recursive protection and detection
*/
*/
private $regExpCodeTags = '/\{\?([a-z_]+)(:("[^"]+"|[^?}]+)+)?\?\}/';
+ /**
+ * Loaded helpers
+ */
+ private $helpers = array();
+
// Exception codes for the template engine
const EXCEPTION_TEMPLATE_TYPE_IS_UNEXPECTED = 0xa00;
- const TEMPLATE_CONTAINS_INVALID_VAR_EXCEPTION = 0xa01;
+ const EXCEPTION_TEMPLATE_CONTAINS_INVALID_VAR = 0xa01;
+ const EXCEPTION_INVALID_VIEW_HELPER = 0xa02;
/**
* Private constructor
parent::constructor(__CLASS__);
// Set part description
- $this->setPartDescr("Template-Engine");
+ $this->setObjectDescription("Template-Engine");
// Create unique ID number
$this->createUniqueID();
/**
* Creates an instance of the class TemplateEngine and prepares it for usage
*
- * @param $basePath The local base path for all templates
- * @param $langInstance An instance of LanguageSystem (default)
- * @param $ioInstance An instance of FileIOHandler (default, middleware!)
- * @return $tplInstance An instance of TemplateEngine
- * @throws BasePathIsEmptyException If the provided $basePath is empty
- * @throws InvalidBasePathStringException If $basePath is no string
- * @throws BasePathIsNoDirectoryException If $basePath is no
- * directory or not found
- * @throws BasePathReadProtectedException If $basePath is
- * read-protected
+ * @param $basePath The local base path for all templates
+ * @param $langInstance An instance of LanguageSystem (default)
+ * @param $ioInstance An instance of FileIOHandler (default, middleware!)
+ * @return $tplInstance An instance of TemplateEngine
+ * @throws BasePathIsEmptyException If the provided $basePath is empty
+ * @throws InvalidBasePathStringException If $basePath is no string
+ * @throws BasePathIsNoDirectoryException If $basePath is no
+ * directory or not found
+ * @throws BasePathReadProtectedException If $basePath is
+ * read-protected
*/
- public final static function createTemplateEngine ($basePath, ManageableLanguage $langInstance, FileIOHandler $fileIOInstance) {
+ public final static function createTemplateEngine ($basePath, ManageableLanguage $langInstance, FileIOHandler $ioInstance) {
// Get a new instance
$tplInstance = new TemplateEngine();
// Set the language and IO instances
$tplInstance->setLanguageInstance($langInstance);
- $tplInstance->setIOInstance($fileIOInstance);
+ $tplInstance->setFileIOInstance($ioInstance);
// Set template extensions
$tplInstance->setRawTemplateExtension($cfgInstance->readConfig("raw_template_extension"));
$this->varStack = new FrameworkArrayObject();
}
- /**
- * Setter for language instance which should be LanguageSystem
- *
- * @param $langInstance The language instance
- * @return void
- */
- public final function setLanguageInstance (ManageableLanguage $langInstance) {
- $this->langInstance = $langInstance;
- }
-
- /**
- * Setter for file I/O instance which should be FileIOHandler
- *
- * @param $ioInstance The file I/O instance
- * @return void
- */
- public final function setIOInstance (FileIOHandler $ioInstance) {
- $this->ioInstance = $ioInstance;
- }
-
- /**
- * Getter for file I/O instance which should be FileIOHandler
- *
- * @return $ioInstance The file I/O instance
- */
- public final function getIOInstance () {
- return $this->ioInstance;
- }
-
/**
* Setter for base path
*
* Private setter for raw template data
*
* @param $rawTemplateData The raw data from the template
- * @return void
+ * @return void
*/
private final function setRawTemplateData ($rawTemplateData) {
// Cast it to string
// Construct the FQFN for the template by honoring the current language
$fqfn = sprintf("%s%s/%s/%s%s",
$this->getBasePath(),
- $this->langInstance->getLanguageCode(),
+ $this->getLanguageInstance()->getLanguageCode(),
$this->getTemplateType(),
$template,
$ext
));
// Get a input/output instance from the middleware
- $ioInstance = $this->getIOInstance();
+ $ioInstance = $this->getFileIOInstance();
// Validate the instance
if (is_null($ioInstance)) {
/**
* Extract variables from a given raw data stream
*
- * @param $rawData The raw template data we shall analyze
+ * @param $rawData The raw template data we shall analyze
* @return void
* @throws InvalidTemplateVariableNameException If a variable name
- * in a template is
- * invalid
+ * in a template is
+ * invalid
*/
private function extractVariablesFromRawData ($rawData) {
// Cast to string
// Is the variable name valid?
if (($variableMatches[1][$key] != $this->getConfigInstance()->readConfig("tpl_valid_var")) && ($variableMatches[1][$key] != "config")) {
// Invalid variable name
- throw new InvalidTemplateVariableNameException(array($this, $this->getLastTemplate(), $variableMatches[1][$key], $this->getConfigInstance()), self::TEMPLATE_CONTAINS_INVALID_VAR_EXCEPTION);
+ throw new InvalidTemplateVariableNameException(array($this, $this->getLastTemplate(), $variableMatches[1][$key], $this->getConfigInstance()), self::EXCEPTION_TEMPLATE_CONTAINS_INVALID_VAR);
}
// Try to assign it, empty strings are being ignored
$this->assignVariable($var, $varMatches[3][$key]);
} else {
// Non-string found so we need some deeper analysis...
+ // @TODO Unfinished work or don't die here.
die("Deeper analysis not yet implemented!");
}
break;
}
}
+
+ /**
+ * Loads a given view helper (by name)
+ *
+ * @param $helperName The helper's name
+ * @return void
+ * @throws ViewHelperNotFoundException If the given view helper was not found
+ */
+ protected function loadViewHelper ($helperName) {
+ // Make first character upper case, rest low
+ $helperName = ucfirst($helperName);
+
+ // Is this view helper loaded?
+ if (!isset($this->helpers[$helperName])) {
+ // Create a class name
+ $className = "{$helperName}ViewHelper";
+
+ // Does this class exists?
+ if (!class_exists($className)) {
+ // Abort here!
+ throw new ViewHelperNotFoundException(array($this, $helperName), self::EXCEPTION_INVALID_VIEW_HELPER);
+ }
+
+ // Generate new instance
+ $eval = sprintf("\$this->helpers[%s] = %s::create%s();",
+ $helperName,
+ $className,
+ $className
+ );
+
+ // Run the code
+ @eval($eval);
+ }
+
+ // Return the requested instance
+ return $this->helpers[$helperName];
+ }
}
// [EOF]