// Load the master template
$masterTemplate = $appInstance->getMasterTemplate();
+ // Load the home template
+ $templateInstance->loadWebTemplate("home");
+
+ // Assign the home template with the master template as a content ... ;)
+ $templateInstance->assignTemplateWithVariable("home", "content");
+
// Load the master template
$templateInstance->loadCodeTemplate($masterTemplate);
- // Load the home template
- $templateInstance->loadWebTemplate("home");
+ // Compile it...
+ $templateInstance->compileTemplate();
+
+ // ... and all variables. This should be merged together in a pattern
+ // to make things easier. A cache mechanism should be added between
+ // these two calls to cache compiled templates.
+ $templateInstance->compileVariables();
+ die("<pre>".print_r($templateInstance, true)."</pre>");
}
}
* Search for a variable in the stack
*
* @param $var The variable we are looking for
- * @return $idx FALSE means not found, > 0 means found on a specific index
+ * @return $idx FALSE means not found, >=0 means found on a specific index
*/
private function isVariableAlreadySet ($var) {
// First everything is not found
return $found;
}
+ /**
+ * Return a content of a variable or null if not found
+ *
+ * @param $var The variable we are looking for
+ * @return $content Content of the variable or null if not found
+ */
+ private function readVariable ($var) {
+ // First everything is not found
+ $content = null;
+
+ // Now search for it
+ for ($idx = $this->varStack->getIterator(); $idx->valid(); $idx->next()) {
+ // Get current item
+ $currEntry = $idx->current();
+
+ // Is the entry found?
+ if ($currEntry['name'] == $var) {
+ // Found!
+ $content = $currEntry['value'];
+ break;
+ }
+ }
+
+ // Return the current position
+ return $content;
+ }
+
/**
* Add a variable to the stack
*
* [2] => Array - An array with right part of a match including ":"
* [3] => Array - An array with right part of a match excluding ":"
*/
- private function analyzeTemplate ($templateMatches) {
+ private function analyzeTemplate (array $templateMatches) {
// Backup raw template data
$backup = $this->getRawTemplateData();
// RECURSIVE PROTECTION!
$this->loadedTemplates[] = $template;
} catch (FilePointerNotOpenedException $e) {
- // Template not found!
- $this->rawTemplates[] = $template;
+ // Template not found, but maybe variable assigned?
+ if ($this->isVariableAlreadySet($template) !== false) {
+ // Use that content here
+ $this->loadedRawData[$template] = $this->readVariable($template);
+
+ // Recursive protection:
+ $this->loadedTemplates[] = $template;
+ } else {
+ // Even this is not done... :/
+ $this->rawTemplates[] = $template;
+ }
}
} // if ((!isset( ...
* @param $templateMatches See method analyzeTemplate()
* @return void
*/
- private function insertAllTemplates ($templateMatches) {
+ private function insertAllTemplates (array $templateMatches) {
// Run through all loaded codes
foreach ($this->loadedRawData as $template => $code) {
* @param $varMatches An array full of variable/value pairs.
* @return void
*/
- private function assignAllVariables ($varMatches) {
+ private function assignAllVariables (array $varMatches) {
// Search for all variables
foreach ($varMatches[1] as $key=>$var) {
* @param $templateMatches See method analyzeTemplate() for details
* @return void
*/
- private function compileRawTemplateData ($templateMatches) {
+ private function compileRawTemplateData (array $templateMatches) {
// Are some code-templates found which we need to compile?
if (count($this->loadedRawData) > 0) {
// Lookup the matching variable data
if (isset($templateMatches[3][$foundIndex])) {
-
// Split it up with another reg. exp. into variable=value pairs
- @preg_match_all($this->regExpVarValue, $templateMatches[3][$foundIndex], $varMatches);
+ preg_match_all($this->regExpVarValue, $templateMatches[3][$foundIndex], $varMatches);
// Assign all variables
$this->assignAllVariables($varMatches);
$this->extractVariablesFromRawData($rawData);
// Search for code-tags which are {? ?}
- @preg_match_all($this->regExpCodeTags, $rawData, $templateMatches);
+ preg_match_all($this->regExpCodeTags, $rawData, $templateMatches);
// Analyze the matches array
if ((is_array($templateMatches)) && (count($templateMatches) == 4) && (count($templateMatches[0]) > 0)) {
// Return the requested instance
return $this->helpers[$helperName];
}
+
+ /**
+ * Assigns the last loaded raw template content with a given variable
+ *
+ * @param $templateName Name of the template we want to assign
+ * @param $variableName Name of the variable we want to assign
+ * @return void
+ */
+ public function assignTemplateWithVariable ($templateName, $variableName) {
+ // Get the content from last loaded raw template
+ $content = $this->getRawTemplateData();
+
+ // Assign the variable
+ $this->assignVariable($variableName, $content);
+
+ // Purge raw content
+ $this->setRawTemplateData("");
+ }
}
// [EOF]