treemenu.php

来自「视频监控网络部分的协议ddns,的模块的实现代码,请大家大胆指正.」· PHP 代码 · 共 823 行 · 第 1/2 页

PHP
823
字号
            $this->$option = $value;        }    }    /**    * Allows setting of various parameters after the initial    * constructor call. Possible options you can set are:    *  o text    *  o link    *  o icon    *  o cssClass    *  o expanded    *  o isDynamic    *  o ensureVisible    * ie The same options as in the constructor    *    * @access public    * @param  string $option Option to set    * @param  string $value  Value to set the option to    */    function setOption($option, $value)    {        $this->$option = $value;    }    /**    * Adds a new subnode to this node.    *    * @access public    * @param  object $node The new node    */    function &addItem(&$node)    {        $node->parent  = &$this;        $this->items[] = &$node;        /**        * If the subnode has ensureVisible set it needs        * to be handled, and all parents set accordingly.        */        if ($node->ensureVisible) {            $this->_ensureVisible();        }        return $this->items[count($this->items) - 1];    }    /**    * Private function to handle ensureVisible stuff    *    * @access private    */    function _ensureVisible()    {        $this->ensureVisible = true;        $this->expanded      = true;        if (!is_null($this->parent)) {            $this->parent->_ensureVisible();        }    }} // HTML_TreeNode/*** HTML_TreeMenu_Presentation class** Base class for other presentation classes to* inherit from.*/class HTML_TreeMenu_Presentation{    /**    * The TreeMenu structure    * @var object    */    var $menu;    /**    * Base constructor simply sets the menu object    *    * @param object $structure The menu structure    */    function HTML_TreeMenu_Presentation(&$structure)    {        $this->menu = &$structure;    }    /**    * Prints the HTML generated by the toHTML() method.    * toHTML() must therefore be defined by the derived    * class.    *    * @access public    * @param  array  Options to set. Any options taken by    *                the presentation class can be specified    *                here.    */    function printMenu($options = array())    {        foreach ($options as $option => $value) {            $this->$option = $value;        }        echo $this->toHTML();    }}/*** HTML_TreeMenu_DHTML class** This class is a presentation class for the tree structure* created using the TreeMenu/TreeNode. It presents the* traditional tree, static for browsers that can't handle* the DHTML.*/class HTML_TreeMenu_DHTML extends HTML_TreeMenu_Presentation{    /**    * Dynamic status of the treemenu. If true (default) this has no effect. If    * false it will override all dynamic status vars and set the menu to be    * fully expanded an non-dynamic.    */    var $isDynamic;    /**    * Path to the images    * @var string    */    var $images;    /**    * Target for the links generated    * @var string    */    var $linkTarget;    /**    * Whether to use clientside persistence or not    * @var bool    */    var $usePersistence;    /**    * The default CSS class for the nodes    */    var $defaultClass;    /**    * Whether to skip first level branch images    * @var bool    */    var $noTopLevelImages;        /**    * Name of Jabbascript object to use    * @var string    */    var $jsObjectName;    /**    * Constructor, takes the tree structure as    * an argument and an array of options which    * can consist of:    *  o images            -  The path to the images folder. Defaults to "images"    *  o linkTarget        -  The target for the link. Defaults to "_self"    *  o defaultClass      -  The default CSS class to apply to a node. Default is none.    *  o usePersistence    -  Whether to use clientside persistence. This persistence    *                         is achieved using cookies. Default is true.    *  o noTopLevelImages  -  Whether to skip displaying the first level of images if    *                         there is multiple top level branches.    *  o maxDepth          -  The maximum depth of indentation. Useful for ensuring    *                         deeply nested trees don't go way off to the right of your    *                         page etc. Defaults to no limit.    *  o jsObjectName      -  Name to use for jabbascript object. Set this if you have    *                         different menus that should maintain their persistence    *                         information separately.    *    * And also a boolean for whether the entire tree is dynamic or not.    * This overrides any perNode dynamic settings.    *    * @param object $structure The menu structure    * @param array  $options   Array of options    * @param bool   $isDynamic Whether the tree is dynamic or not    */    function HTML_TreeMenu_DHTML(&$structure, $options = array(), $isDynamic = true)    {        $this->HTML_TreeMenu_Presentation($structure);        $this->isDynamic = $isDynamic;        // Defaults        $this->images           = 'images';        $this->maxDepth         = 0;        // No limit        $this->linkTarget       = '_self';        $this->jsObjectName     = 'objTreeMenu';        $this->defaultClass     = '';        $this->usePersistence   = true;        $this->noTopLevelImages = false;        foreach ($options as $option => $value) {            $this->$option = $value;        }    }    /**    * Returns the HTML for the menu. This method can be    * used instead of printMenu() to use the menu system    * with a template system.    *    * @access public    * @return string The HTML for the menu    */    function toHTML()    {        static $count = 0;        $menuObj     = $this->jsObjectName . '_' . ++$count;        $html  = "\n";        $html .= '<script language="javascript" type="text/javascript">' . "\n//<![CDATA[\n\t";        $html .= sprintf('%s = new TreeMenu("%s", "%s", "%s", "%s", %s, %s);',                         $menuObj,                         $this->images,                         $menuObj,                         $this->linkTarget,                         $this->defaultClass,                         $this->usePersistence ? 'true' : 'false',                         $this->noTopLevelImages ? 'true' : 'false');        $html .= "\n";        /**        * Loop through subnodes        */        if (isset($this->menu->items)) {            for ($i=0; $i<count($this->menu->items); $i++) {                $html .= $this->_nodeToHTML($this->menu->items[$i], $menuObj);            }        }        $html .= sprintf("\n\t%s.drawMenu();", $menuObj);        $html .= sprintf("\n\t%s.writeOutput();", $menuObj);        if ($this->usePersistence && $this->isDynamic) {            $html .= sprintf("\n\t%s.resetBranches();", $menuObj);        }        $html .= "\n// ]]>\n</script>";        return $html;    }    /**    * Prints a node of the menu    *    * @access private    */    function _nodeToHTML($nodeObj, $prefix, $return = 'newNode', $currentDepth = 0, $maxDepthPrefix = null)    {        $prefix = empty($maxDepthPrefix) ? $prefix : $maxDepthPrefix;                $expanded  = $this->isDynamic ? ($nodeObj->expanded  ? 'true' : 'false') : 'true';        $isDynamic = $this->isDynamic ? ($nodeObj->isDynamic ? 'true' : 'false') : 'false';        $html = sprintf("\t %s = %s.addItem(new TreeNode('%s', %s, %s, %s, %s, '%s', '%s', %s));\n",                        $return,                        $prefix,                        str_replace("'", "\\'", $nodeObj->text),                        !empty($nodeObj->icon) ? "'" . $nodeObj->icon . "'" : 'null',                        !empty($nodeObj->link) ? "'" . $nodeObj->link . "'" : 'null',                        $expanded,                        $isDynamic,                        $nodeObj->cssClass,                        $nodeObj->linkTarget,                        !empty($nodeObj->expandedIcon) ? "'" . $nodeObj->expandedIcon . "'" : 'null');        foreach ($nodeObj->events as $event => $handler) {            $html .= sprintf("\t %s.setEvent('%s', '%s');\n",                             $return,                             $event,                             str_replace(array("\r", "\n", "'"), array('\r', '\n', "\'"), $handler));        }        if ($this->maxDepth > 0 AND $currentDepth == $this->maxDepth) {            $maxDepthPrefix = $prefix;        }        /**        * Loop through subnodes        */        if (!empty($nodeObj->items)) {            for ($i=0; $i<count($nodeObj->items); $i++) {                $html .= $this->_nodeToHTML($nodeObj->items[$i], $return, $return . '_' . ($i + 1), $currentDepth + 1, $maxDepthPrefix);            }        }        return $html;    }} // End class HTML_TreeMenu_DHTML/*** HTML_TreeMenu_Listbox class** This class presents the menu as a listbox*/class HTML_TreeMenu_Listbox extends HTML_TreeMenu_Presentation{    /**    * The text that is displayed in the first option    * @var string    */    var $promoText;    /**    * The character used for indentation    * @var string    */    var $indentChar;    /**    * How many of the indent chars to use    * per indentation level    * @var integer    */    var $indentNum;    /**    * Target for the links generated    * @var string    */    var $linkTarget;    /**    * Constructor    *    * @param object $structure The menu structure    * @param array  $options   Options whic affect the display of the listbox.    *                          These can consist of:    *                           o promoText  The text that appears at the the top of the listbox    *                                        Defaults to "Select..."    *                           o indentChar The character to use for indenting the nodes    *                                        Defaults to "&nbsp;"    *                           o indentNum  How many of the indentChars to use per indentation level    *                                        Defaults to 2    *                           o linkTarget Target for the links. Defaults to "_self"    *                           o submitText Text for the submit button. Defaults to "Go"    */    function HTML_TreeMenu_Listbox($structure, $options = array())    {        $this->HTML_TreeMenu_Presentation($structure);        $this->promoText  = 'Select...';        $this->indentChar = '&nbsp;';        $this->indentNum  = 2;        $this->linkTarget = '_self';        $this->submitText = 'Go';        foreach ($options as $option => $value) {            $this->$option = $value;        }    }    /**    * Returns the HTML generated    */    function toHTML()    {        static $count = 0;        $nodeHTML = '';        /**        * Loop through subnodes        */        if (isset($this->menu->items)) {            for ($i=0; $i<count($this->menu->items); $i++) {                $nodeHTML .= $this->_nodeToHTML($this->menu->items[$i]);            }        }        return sprintf('<form target="%s" action="" onsubmit="var link = this.%s.options[this.%s.selectedIndex].value; if (link) {this.action = link; return true} else return false"><select name="%s"><option value="">%s</option>%s</select> <input type="submit" value="%s" /></form>',                       $this->linkTarget,                       'HTML_TreeMenu_Listbox_' . ++$count,                       'HTML_TreeMenu_Listbox_' . $count,                       'HTML_TreeMenu_Listbox_' . $count,                       $this->promoText,                       $nodeHTML,                       $this->submitText);    }    /**    * Returns HTML for a single node    *    * @access private    */    function _nodeToHTML($node, $prefix = '')    {        $html = sprintf('<option value="%s">%s%s</option>', $node->link, $prefix, $node->text);        /**        * Loop through subnodes        */        if (isset($node->items)) {            for ($i=0; $i<count($node->items); $i++) {                $html .= $this->_nodeToHTML($node->items[$i], $prefix . str_repeat($this->indentChar, $this->indentNum));            }        }        return $html;    }} // End class HTML_TreeMenu_Listbox?>

⌨️ 快捷键说明

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