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 " " * 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 = ' '; $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 + -
显示快捷键?