treemenu.php
来自「视频监控网络部分的协议ddns,的模块的实现代码,请大家大胆指正.」· PHP 代码 · 共 206 行
PHP
206 行
<?php//// +----------------------------------------------------------------------+// | PEAR :: DB_NestedSet_TreeMenu |// +----------------------------------------------------------------------+// | Copyright (c) 1997-2003 The PHP Group |// +----------------------------------------------------------------------+// | This source file is subject to version 2.0 of the PHP license, |// | that is bundled with this package in the file LICENSE, and is |// | available at through the world-wide-web at |// | http://www.php.net/license/2_02.txt. |// | If you did not receive a copy of the PHP license and are unable to |// | obtain it through the world-wide-web, please send a note to |// | license@php.net so we can mail you a copy immediately. |// +----------------------------------------------------------------------+// | Authors: Jason Rust <jrust@rustyparts.com> |// +----------------------------------------------------------------------+//// $Id: TreeMenu.php,v 1.13 2003/10/07 00:11:27 datenpunk Exp $//require_once 'HTML/TreeMenu.php';// {{{ DB_NestedSet_TreeMenu:: class/*** A helper class to translate the data from a nested set table into a HTML_TreeMenu object* so that it can be used to create a dynamic tree menu using the PEAR HTML_TreeMenu class.** @see docs/TreeMenu_example.php* @author Jason Rust <jrust@rustyparts.com>* @package DB_NestedSet* @version $Revision: 1.13 $* @access public*/// }}}class DB_NestedSet_TreeMenu extends DB_NestedSet_Output { // {{{ properties /** * @var array The current menu structure * @access private */ var $_structTreeMenu = false; // }}} // {{{ DB_NestedSet_TreeMenu function &DB_NestedSet_TreeMenu($params) { $this->_structTreeMenu =& $this->_createFromStructure($params); } // }}} // {{{ _createFromStructure() /** * <pre>Creates a HTML_TreeMenu structure based off of the results from getAllNodes() method * of the DB_NestedSet class. The needed parameters are: * o 'structure' => the result from $nestedSet->getAllNodes(true) * o 'textField' => the field in the table that has the text for node * o 'linkField' => the field in the table that has the link for the node * o 'options' => (optional) an array of any additional options to pass to the node when * Additionally these parameters may be added to the individual nodes to control their * behavior: * o 'ensureVisible' => (optional) whether or not the field should be forced as visible * creating it such as 'icon' or 'expandedIcon' * o 'events' => (optional) an array of any events to pass to the node when creating it * such as 'onclick' or 'onexpand'</pre> * </pre> * @access public * @return object A HTML_TreeMenu object */ function &_createFromStructure($params) { // Basically we go through the array of nodes checking to see // if each node has children and if so recursing. The reason this // works is because the data from getAllNodes() is ordered by level // so a root node will always be first, and sub children will always // be after them. if (!isset($params['treeMenu'])) { $treeMenu =& new HTML_TreeMenu(); } else { $treeMenu =& $params['treeMenu']; } // always start at level 1 if (!isset($params['currentLevel'])) { $params['currentLevel'] = 1; } // have to use a while loop here because foreach works on a copy of the array and // the child nodes are passed by reference during the recursion so that the parent // will know when they have been hit. reset($params['structure']); while(list($key, $node) = each($params['structure'])) { // see if we've already been here before if (isset($node['hit'])) { continue; } // mark that we've hit this node $params['structure'][$key]['hit'] = $node['hit'] = true; $tag = array( 'text' => $node[$params['textField']], 'link' => $node[$params['linkField']], 'ensureVisible' => isset($node['ensureVisible']) ? $node['ensureVisible'] : false, ); $options = isset($params['options']) ? array_merge($params['options'], $tag) : $tag; $events = isset($node['events']) ? $node['events'] : array(); $parentNode =& $treeMenu->addItem(new HTML_TreeNode($options, $events)); // see if it has children if (($node['r'] - 1) != $node['l']) { $children = array(); // harvest all the children $tempStructure = $params['structure']; foreach ($tempStructure as $childKey => $childNode) { if (!isset($childNode['hit']) && $childNode['l'] > $node['l'] && $childNode['r'] < $node['r'] && $childNode['rootid'] == $node['rootid']) { // important that we assign it by reference here, so that when the child // marks itself 'hit' the parent loops will know $children[] =& $params['structure'][$childKey]; } } $recurseParams = $params; $recurseParams['structure'] = $children; $recurseParams['treeMenu'] =& $parentNode; $recurseParams['currentLevel']++; $this->_createFromStructure($recurseParams); } } return $treeMenu; } // }}} // {{{ printTree() /** * Print's the current tree using the output driver * * @access public */ function printTree() { $options = $this->_getOptions('printTree'); $tree =& new HTML_TreeMenu_DHTML($this->_structTreeMenu, $options); $tree->printMenu(); } // }}} // {{{ printListbox() /** * Print's a listbox representing the current tree * * @access public */ function printListbox() { $options = $this->_getOptions('printListbox'); $listBox =& new HTML_TreeMenu_Listbox($this->_structTreeMenu, $options); $listBox->printMenu(); } // }}} // }}} // {{{ tree_toHTML() /** * Returns the HTML for the DHTML-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 * @Author Emanuel Zueger */ function tree_toHTML() { $options = $this->_getOptions('toHTML'); $tree =& new HTML_TreeMenu_DHTML($this->_structTreeMenu, $options); return $tree->toHTML(); } // }}} // {{{ listbox_toHTML() /** * Returns the HTML for the listbox. This method can be * used instead of printListbox() to use the menu system * with a template system. * * @access public * @return string The HTML for the listbox * @author Emanuel Zueger */ function listbox_toHTML() { $options = $this->_getOptions('toHTML'); $listBox =& new HTML_TreeMenu_Listbox($this->_structTreeMenu, $options); return $listBox->toHTML(); } // }}}}?>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?