⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 token.php

📁 FP2 CRM code+Mysql DB
💻 PHP
📖 第 1 页 / 共 2 页
字号:
            while ($i<$total && is_a($res[$i],'HTML_Template_Flexy_Token_Text')) {                if (isset($res[$i])) {                    $res[$first]->value .= $res[$i]->value;                    $res[$i]->value = '';                }                $i++;            }        }          // connect open  and close tags.                // this is done by having a stack for each of the tag types..        // then removing it when it finds the closing one        // eg.        //  <a href=""><img src=""></a>        //  ends up with a stack for <a>'s and a stack for <img>'s        //        //        //        //echo '<PRE>' . htmlspecialchars(print_R($res,true));//exit;        //echo '<PRE>';        for($i=1;$i<$total;$i++) {                        if (empty($res[$i]->tag)) {                continue;            }            //echo "Checking TAG $i {$res[$i]->tag}\n";            if ($res[$i]->tag{0} == '/') { // it's a close tag..                //echo "GOT END TAG: {$res[$i]->tag}\n";                $tag = strtoupper(substr($res[$i]->tag,1));                if (!count($stack)) {                    continue;                }                $ssc = count($stack) - 1;                /* go up the stack trying to find a match */                for($s = $ssc; $s > -1; $s--) {                    if (!isset($stack[$s])) {                        echo "MISSED STACK? $s<BR><PRE>";print_r($stack);exit;                    }                    if (!isset($_HTML_TEMPLATE_FLEXY_TOKEN['tokens'][$stack[$s]])) {                        echo "STACKED BAD OFFSET : {$stack[$s]}<BR><PRE>";print_r($stack);exit;                    }                    $tok =  &$_HTML_TEMPLATE_FLEXY_TOKEN['tokens'][$stack[$s]];                    if (strtoupper($tok->tag) == $tag) {                        // got the matching closer..                        // echo "MATCH: {$i}:{$tok->tag}({$tok->line}) to  {$stack[$s]}:$tag<BR>";                        $tok->close = &$_HTML_TEMPLATE_FLEXY_TOKEN['tokens'][$i];                                                array_splice($stack,$s);                        //print_R($stack);                                                 break;                    }                }                continue;            }            $stack[] = $i;            // tag with no closer (or unmatched in stack..)        }                               // create a dummy close for the end        $i = $total;        $_HTML_TEMPLATE_FLEXY_TOKEN['tokens'][$i] = new HTML_Template_Flexy_Token;        $_HTML_TEMPLATE_FLEXY_TOKEN['tokens'][$i]->id = $total;        $_HTML_TEMPLATE_FLEXY_TOKEN['tokens'][0]->close = &$_HTML_TEMPLATE_FLEXY_TOKEN['tokens'][$total];                // now is it possible to connect children...        // now we need to GLOBALIZE!! -                         $_HTML_TEMPLATE_FLEXY_TOKEN['tokens'] = $res;                HTML_Template_Flexy_Token::buildChildren(0);        //new Gtk_VarDump($_HTML_TEMPLATE_FLEXY_TOKEN['tokens'][0]);        //echo '<PRE>';print_R($_HTML_TEMPLATE_FLEXY_TOKEN['tokens'][$_HTML_TEMPLATE_FLEXY_TOKEN['base']]  );         return $_HTML_TEMPLATE_FLEXY_TOKEN['tokens'][$_HTML_TEMPLATE_FLEXY_TOKEN['base']];    }    /**    * Matching closing tag for a Token    *    * @var object|none  optional closing tag    * @access public     */          var $close;               /**    * array of children to each object.     *    * @var array    * @access public|private    */          var $children = array();        /**    * Build the child array for each element.    * RECURSIVE FUNCTION!!!!    * @param   int  id of node to add children to.    *    * @access   public    * @static    */    function buildChildren($id)     {        global $_HTML_TEMPLATE_FLEXY_TOKEN;                $base = &$_HTML_TEMPLATE_FLEXY_TOKEN['tokens'][$id];        $base->children = array();        $start = $base->id +1;        $end = $base->close->id;                for ($i=$start; $i<$end; $i++) {            //echo "{$base->id}:{$base->tag} ADDING {$i}{$_HTML_TEMPLATE_FLEXY_TOKEN['tokens'][$i]->tag}<BR>";            //if ($base->id == 1176) {            //    echo "<PRE>";print_r($_HTML_TEMPLATE_FLEXY_TOKEN['tokens'][$i]);            // }                     $base->children[] = &$_HTML_TEMPLATE_FLEXY_TOKEN['tokens'][$i];                        if (isset($_HTML_TEMPLATE_FLEXY_TOKEN['tokens'][$i]) &&                 is_object($_HTML_TEMPLATE_FLEXY_TOKEN['tokens'][$i]->close)) {                            // if the close id is greater than my id - ignore it! -                 if ($_HTML_TEMPLATE_FLEXY_TOKEN['tokens'][$i]->close->id > $end) {                    continue;                }                HTML_Template_Flexy_Token::buildChildren($i);                $i = $_HTML_TEMPLATE_FLEXY_TOKEN['tokens'][$i]->close->id;            }        }    }                                        /**    * Flag to ignore children - Used to block output for select/text area etc.    * may not be required as I moved the Tag parsing into the toString ph    *    * @var boolean ingore children    * @access public    */          var $ignoreChildren = false;                     /* ======================================================== */    /* variable STATE management     *    * raw variables are assumed to be $this->, unless defined by foreach..    * it also monitors syntax - eg. end without an if/foreach etc.    */         /**    * tell the generator you are entering a block    *    * @access   public    */    function pushState()     {        global $_HTML_TEMPLATE_FLEXY_TOKEN;                $_HTML_TEMPLATE_FLEXY_TOKEN['state']++;        $s = $_HTML_TEMPLATE_FLEXY_TOKEN['state'];                $_HTML_TEMPLATE_FLEXY_TOKEN['statevars'][$s] = array(); // initialize statevars    }    /**    * tell the generator you are entering a block    *    * @return  boolean  parse error - out of bounds    * @access   public    */    function pullState()     {        global $_HTML_TEMPLATE_FLEXY_TOKEN;                $s = $_HTML_TEMPLATE_FLEXY_TOKEN['state'];        $_HTML_TEMPLATE_FLEXY_TOKEN['statevars'][$s] = array(); // initialize statevars        $_HTML_TEMPLATE_FLEXY_TOKEN['state']--;        if ($s<0) {            return false;        }        return true;    }     /**    * get the real variable name formated x.y.z => $this->x->y->z    * if  a variable is in the stack it return $x->y->z    *    * @return  string PHP variable     * @access   public    */        function toVar($s) {        // wrap [] with quotes.        $s = str_replace('[',"['",$s);        $s = str_replace('%5b',"['",$s);        $s = str_replace('%5B',"['",$s);        $s = str_replace(']',"']",$s);        $s = str_replace('%5d',"']",$s);        $s = str_replace('%5D',"']",$s);        // strip the quotes if it's only numbers..        $s = preg_replace("/'([-]?[0-9]+)'/", "\\1",$s);                $parts = explode(".",$s);                        $ret =  $this->findVar($parts[0]);        if (is_a($ret,'PEAR_Error')) {            return $ret;        }                array_shift($parts);                if (!count($parts)) {            return $ret;        }        foreach($parts as $p) {            $ret .= "->{$p}";        }        return $ret;    }    /**    * do the stack lookup on the variable    * this relates to flexy    * t relates to the object being parsed.    *    * @return  string PHP variable     * @access   public    */        function findVar($string)     {        global $_HTML_TEMPLATE_FLEXY_TOKEN;            if (!$string || $string == 't') {            return '$t';        }        if ($string == 'this') {            return '$this';        }        // accept global access on some string        if (@$GLOBALS['_HTML_TEMPLATE_FLEXY']['currentOptions']['globals'] &&            preg_match('/^(_POST|_GET|_REQUEST|_SESSION|_COOKIE|GLOBALS)\[/',$string)) {            return '$'.$string;        }         if (!@$GLOBALS['_HTML_TEMPLATE_FLEXY']['currentOptions']['privates'] &&                ($string{0} == '_')) {                return HTML_Template_Flexy::raiseError('HTML_Template_Flexy::Attempt to access private variable:'.                    " on line {$this->line} of {$GLOBALS['_HTML_TEMPLATE_FLEXY']['filename']}".                    ", Use options[privates] to allow this."                   , HTML_TEMPLATE_FLEXY_ERROR_SYNTAX ,HTML_TEMPLATE_FLEXY_ERROR_RETURN);        }                $lookup = $string;        if ($p = strpos($string,'[')) {            $lookup = substr($string,0,$p);        }                        for ($s = $_HTML_TEMPLATE_FLEXY_TOKEN['state']; $s > 0; $s--) {            if (in_array($lookup , $_HTML_TEMPLATE_FLEXY_TOKEN['statevars'][$s])) {                return '$'.$string;            }        }        return '$t->'.$string;    }    /**    * add a variable to the stack.    *    * @param  string PHP variable     * @access   public    */        function pushVar($string)     {        global $_HTML_TEMPLATE_FLEXY_TOKEN;        $s = $_HTML_TEMPLATE_FLEXY_TOKEN['state'];        $_HTML_TEMPLATE_FLEXY_TOKEN['statevars'][$s][] = $string;    }         /**    * dump to text ATM    *    *     * @access   public    */        function dump() {        echo "{$this->token}/" . (isset($this->tag) ? "<{$this->tag}>" : '') . ": {$this->value}\n";    }                }   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -