Class. rFastTemplate. php 3

Source: Internet
Author: User

/// Description // Perform substitution on the template. we do not really recurse // downward in the sense that we do not do subsitutions on inferior // templates. for each inferior template which is a part of this // template, we insert the current value of their results. //// Notes // Do I want to make this return a reference? Function subst ($ handle, $ tag, $ autoload = true) {$ append = false; $ debug = $ this-> DEBUGALL | $ this-> DEBUG [subst]; $ this-> LAST = $ handle; if ($ debug) $ this-> logwrite ("subst (handle = $ handle, tag = $ tag, autoload = $ autoload) "); // For compatibility with FastTemplate, the results need to overwrite // for an array. this really only seems to be useful in the case of // something like // $ t-> parse (MAIN, Array (array, main); // Where the main template has a variable named MAIN which will be // set on the first pass (I. e ., when parasing array) and used on the // second pass (I. e ., when parsing main ). if (gettype ($ tag) = array) {foreach (array_values ($ tag) as $ t) {if ($ debug) $ this-> logwrite ("subst: calling subst ($ handle, $ t, $ autoload) "); $ this-> subst ($ handle, $ t, $ autoload);} return $ this-> HANDLE [$ handle];} // Period prefix means append result to pre-existing value. if (substr ($ tag, 0, 1) = .) {$ append = true; $ tag = substr ($ tag, 1); if ($ debug) $ this-> logwrite ("subst (handle = $ handle, tag = $ tag, autoload = $ autoload) in append mode ");} // $ this-> TEMPLATE [$ tag] will only be set if it was explicitly // declared via define (); I. e ., inferior templates will not have an // entry. if (iss Et ($ this-> TEMPLATE [$ tag]) {if (! Isset ($ this-> TEMPLATE [$ tag] [parsed]) |! $ This-> TEMPLATE [$ tag] [parsed]) $ this-> parse_internal ($ tag);} else {if (! $ This-> DYNAMIC) {$ this-> error ("subst (handle = $ handle, tag = $ tag, autoload = $ autoload ):". no such tag and dynamic templates are turned off, true);} if ($ autoload) {if ($ debug) $ this-> logwrite ("subst: TEMPLATE [tag = $ tag] not found, trying autoload "); foreach (array_keys ($ this-> TEMPLATE) as $ t) {if ($ debug) $ this-> logwrite ("subst: calling parse_internal (tag = $ t)"); if (! Isset ($ this-> TEMPLATE [$ tag] [parsed]) |! $ This-> TEMPLATE [$ tag] [parsed]) $ this-> parse_internal ($ t);} if ($ debug) $ this-> logwrite (subst: retrying with autoload = false); $ this-> subst ($ handle, $ tag, false); if ($ debug) $ this-> logwrite (subst: completed with autoload = false); return;} else {$ this-> error ("subst (handle = $ handle, tag = $ tag, autoload = $ autoload ): no such tag ", true) ;}} if (! $ Append) {$ this-> TEMPLATE [$ tag] [result] =; if ($ debug) $ this-> logwrite ("subst (handle = $ handle, tag = $ tag, autoload = $ autoload) in overwrite mode ");} if ($ debug) $ this-> logwrite (subst: type (this-> TEMPLATE [$ tag] [part]) =>. gettype ($ this-> TEMPLATE [$ tag] [part]); // Hmmm, clear () called before subst () seems to result in this not // being defined which leaves me a bit confused .... $ result =; if (is Set ($ this-> TEMPLATE [$ tag] [part]) {reset ($ this-> TEMPLATE [$ tag] [part]); foreach (array_keys ($ this-> TEMPLATE [$ tag] [part]) as $ p) {if ($ debug) $ this-> logwrite ("subst: looking at TEMPLATE [$ tag] [part] [$ p] "); $ tmp = $ this-> TEMPLATE [$ tag] [part] [$ p]; // Dont try if ($ p = parent ).... if (strcmp ($ p, parent) = 0) {if ($ debug) $ this-> logwrite ("subst: skipping part $ p"); $ tmp = ;} else if (gettype ($ t His-> TEMPLATE [$ tag] [part] [$ p]) = string) {if ($ debug) $ this-> logwrite ("subst: using part $ p "); reset ($ this-> VAR); // Because we treat VAR and HANDLE separately (unlike // class. fastTemplate. php3), we have to iterate over both or we // miss some substitutions and are not 100% compatible. while (list ($ key, $ val) = each ($ this-> VAR) {if ($ debug) $ this-> logwrite ("subst: substituting VAR $ key = $ Val in $ tag "); $ key = {. $ key .}; $ tmp = str_replace ($ key, $ val, $ tmp);} reset ($ this-> HANDLE); while (list ($ key, $ val) = each ($ this-> HANDLE) {if ($ debug) $ this-> logwrite ("subst: substituting HANDLE $ key = $ val in $ tag "); $ key = {. $ key .}; $ tmp = str_replace ($ key, $ val, $ tmp);} $ result. = $ tmp;} else {$ xtag = $ this-> TEMPLATE [$ tag] [part] [$ p] [tag]; if ($ debug) {$ this-> logwrite ("subst: substi Tuting other tag $ xtag result in $ tag ");} // The assignment is a no-op if the result is not set, but when // E_ALL is in effect, a warning is generated without the // isset () test. if (isset ($ this-> TEMPLATE [$ xtag] [result]) $ result. = $ this-> TEMPLATE [$ xtag] [result] ;}}if ($ this-> STRICT) {// if quiet-mode is turned on, skip the check since were not going // to do anything anyway. if (! $ This-> QUIET) {if (preg_match ($ this-> REGEX_VAR, $ result) {$ this-> error ("Unmatched tags still present in $ tag
") ;}} Else {$ result = preg_replace ($ this-> REGEX_VAR, $ result);} if ($ append) {if ($ debug) {$ this-> logwrite ("subst: appending TEMPLATE [$ tag] [result] = $ result"); $ this-> logwrite ("subst: old HANDLE [$ handle] ={$ this-> HANDLE [$ handle]} "); $ this-> logwrite (" subst: old TEMPLATE [$ tag] [result] = {$ this-> TEMPLATE [$ tag] [result]} ");} // The isset () tests are to suppresss warning when E_ALL is in Effect // and the variables have not actually been set yet (even though the // user specified append-mode ). if (isset ($ this-> HANDLE [$ handle]) $ this-> HANDLE [$ handle]. = $ result; else $ this-> HANDLE [$ handle] = $ result; if (isset ($ this-> TEMPLATE [$ tag] [result]) $ this-> TEMPLATE [$ tag] [result]. = $ result; else $ this-> TEMPLATE [$ tag] [result] = $ result; if ($ debug) {$ this-> logwrite ("subst: new HANDLE [$ Handle] ={$ this-> HANDLE [$ handle]} "); $ this-> logwrite (" subst: new TEMPLATE [$ tag] [result] = {$ this-> TEMPLATE [$ tag] [result]} ") ;}} else {if ($ debug) $ this-> logwrite ("subst: setting TEMPLATE [$ tag] [result] = $ result"); $ this-> HANDLE [$ handle] = $ result; $ this-> TEMPLATE [$ tag] [result] = $ result;} return $ this-> HANDLE [$ handle];} /// Description // Clear a block from a template. the intent is to r Emove an inferior // template from a parent. this works even if the template has already // been parsed since we go straight to the specified template and clear // the results element. if the given template has not yet been // loaded, the load is forced by calling parse_internal (). // function clear_dynamic ($ tag = NULL) {$ debug = $ this-> DEBUGALL | $ this-> DEBUG [clear_dynamic]; if (is_null ($ tag)) {// Clear all result elements. uhm, needs to be tested. if ($ debug) $ this-> logwrite ("clear_dynamic (NULL)"); foreach (array_values ($ this-> TEMPLATE) as $ t) {$ this-> clear_dynamic ($ t);} return;} else if (gettype ($ tag) = array) {if ($ debug) $ this-> logwrite ("clear_dynamic ($ tag)"); foreach (array_values ($ tag) as $ t) {$ this-> clear_dynamic ($ t );} return;} else if (! Isset ($ this-> TEMPLATE [$ tag]) {if ($ debug) $ this-> logwrite ("clear_dynamic ($ tag) --> $ tag not set, calling parse_internal "); $ this-> parse_internal ($ tag); // $ this-> TEMPLATE [$ tag] = array ();} if ($ debug) $ this-> logwrite ("clear_dynamic ($ tag)"); // $ this-> TEMPLATE [$ tag] [loaded] = true; // $ this-> TEMPLATE [$ tag] [string] =; $ this-> TEMPLATE [$ tag] [result] =; // $ this-> TEMPLATE [$ tag] [clear] = true;} // Description // Clear the results of a handle set by parse (). the input handle can // be a single value, an array, or the PHP constant NULL. for the // last case, all handles cleared. // function clear ($ handle = NULL) {$ debug = $ this-> DEBUGALL | $ this-> DEBUG [clear]; if (is_null ($ handle )) {// Dont bother unsetting them, just set the whole thing to a new, // empty array. if ($ debug) $ this-> logwrite ("clear (NULL)"); $ this-> HANDLE = array ();} else if (gettype ($ handle) = array) {if ($ debug) $ this-> logwrite ("clear ($ handle)"); foreach (array_values ($ handle) as $ h) {$ this-> clear ($ h) ;}} else if (isset ($ this-> HANDLE [$ h

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.