--- nfo/php/libs/net.php.pear/HTML/TreeMenu.php 2003/02/27 16:45:21 1.1 +++ nfo/php/libs/net.php.pear/HTML/TreeMenu.php 2004/07/07 02:21:09 1.2 @@ -33,8 +33,8 @@ // | Harald Radi | // +-----------------------------------------------------------------------+ // -// Id: TreeMenu.php,v 1.15 2003/02/21 18:19:39 richard Exp -// $Id: TreeMenu.php,v 1.1 2003/02/27 16:45:21 joko Exp $ +// Id: TreeMenu.php,v 1.18 2003/12/20 13:10:59 richard Exp +// $Id: TreeMenu.php,v 1.2 2004/07/07 02:21:09 joko Exp $ /** * HTML_TreeMenu Class @@ -101,7 +101,7 @@ * are Wolfram Kriesings' PEAR Tree class, and Richard Heyes' (me!) * Tree class (available here: http://www.phpguru.org/). This * method is intended to be used statically, eg: - * $treeMenu = &HTML_TreeMenu::import($myTreeStructureObj); + * $treeMenu = &HTML_TreeMenu::createFromStructure($myTreeStructureObj); * * @param array $params An array of parameters that determine * how the import happens. This can consist of: @@ -172,7 +172,38 @@ break; /** - * Richard Heyes' (me!) Tree class + * Richard Heyes' (me!) second (array based) Tree class + */ + case 'heyes_array': + // Need to create a HTML_TreeMenu object ? + if (!isset($params['treeMenu'])) { + $treeMenu = &new HTML_TreeMenu(); + $parentID = 0; + } else { + $treeMenu = &$params['treeMenu']; + $parentID = $params['parentID']; + } + + // Loop thru the trees nodes + foreach ($params['structure']->getChildren($parentID) as $nodeID) { + $data = $params['structure']->getData($nodeID); + $parentNode = &$treeMenu->addItem(new HTML_TreeNode(array_merge($params['nodeOptions'], $data))); + + // Recurse ? + if ($params['structure']->hasChildren($nodeID)) { + $recurseParams['type'] = 'heyes_array'; + $recurseParams['parentID'] = $nodeID; + $recurseParams['nodeOptions'] = $params['nodeOptions']; + $recurseParams['structure'] = &$params['structure']; + $recurseParams['treeMenu'] = &$parentNode; + HTML_TreeMenu::createFromStructure($recurseParams); + } + } + + break; + + /** + * Richard Heyes' (me!) original OO based Tree class */ case 'heyes': default: @@ -202,55 +233,55 @@ return $treeMenu; } - - /** + + /** * Creates a treeMenu from XML. The structure of your XML should be - * like so: - * - * - * - * - * - * - * - * - * - * Any of the options you can supply to the HTML_TreeNode constructor can be supplied as - * attributes to the tag. If there are no subnodes for a particular node, you can - * use the XML shortcut instead of . The $xml argument can - * be either the XML as a string, or an pre-created XML_Tree object. Also, this method - * REQUIRES my own Tree class to work (http://phpguru.org/tree.html). If this has not - * been include()ed or require()ed this method will die(). - * - * @param mixed $xml This can be either a string containing the XML, or an XML_Tree object - * (the PEAR::XML_Tree package). - * @return object The HTML_TreeMenu object - */ - function createFromXML($xml) - { - if (!class_exists('Tree')) { - die('Could not find Tree class'); - } - - // Supplied $xml is a string - if (is_string($xml)) { - require_once('XML/Tree.php'); - $xmlTree = &new XML_Tree(); - $xmlTree->getTreeFromString($xml); - - // Supplied $xml is an XML_Tree object - } else { - $xmlTree = $xml; - } - - // Now process the XML_Tree object, setting the XML attributes - // to be the tag data (with out the XML tag name or contents). - $treeStructure = Tree::createFromXMLTree($xmlTree, true); - $treeStructure->nodes->traverse(create_function('&$node', '$tagData = $node->getTag(); $node->setTag($tagData["attributes"]);')); - - - return HTML_TreeMenu::createFromStructure(array('structure' => $treeStructure)); - } + * like so: + * + * + * + * + * + * + * + * + * + * Any of the options you can supply to the HTML_TreeNode constructor can be supplied as + * attributes to the tag. If there are no subnodes for a particular node, you can + * use the XML shortcut instead of . The $xml argument can + * be either the XML as a string, or an pre-created XML_Tree object. Also, this method + * REQUIRES my own Tree class to work (http://phpguru.org/tree.html). If this has not + * been include()ed or require()ed this method will die(). + * + * @param mixed $xml This can be either a string containing the XML, or an XML_Tree object + * (the PEAR::XML_Tree package). + * @return object The HTML_TreeMenu object + */ + function createFromXML($xml) + { + if (!class_exists('Tree')) { + die('Could not find Tree class'); + } + + // Supplied $xml is a string + if (is_string($xml)) { + require_once('XML/Tree.php'); + $xmlTree = &new XML_Tree(); + $xmlTree->getTreeFromString($xml); + + // Supplied $xml is an XML_Tree object + } else { + $xmlTree = $xml; + } + + // Now process the XML_Tree object, setting the XML attributes + // to be the tag data (with out the XML tag name or contents). + $treeStructure = Tree::createFromXMLTree($xmlTree, true); + $treeStructure->nodes->traverse(create_function('&$node', '$tagData = $node->getTag(); $node->setTag($tagData["attributes"]);')); + + + return HTML_TreeMenu::createFromStructure(array('structure' => $treeStructure)); + } } // HTML_TreeMenu @@ -349,7 +380,7 @@ * o link The link for the node, defaults to blank * o icon The icon for the node, defaults to blank * o expandedIcon The icon to show when the node is expanded - * o class The CSS class for this node, defaults to blank + * o cssClass The CSS class for this node, defaults to blank * o expanded The default expanded status of this node, defaults to false * This doesn't affect non dynamic presentation types * o linkTarget Target for the links. Defaults to linkTarget of the @@ -546,6 +577,9 @@ * 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. * * And also a boolean for whether the entire tree is dynamic or not. * This overrides any perNode dynamic settings. @@ -561,6 +595,7 @@ // Defaults $this->images = 'images'; + $this->maxDepth = 0; // No limit $this->linkTarget = '_self'; $this->defaultClass = ''; $this->usePersistence = true; @@ -582,7 +617,7 @@ function toHTML() { static $count = 0; - $menuObj = 'objTreeMenu_' . ++$count; + $menuObj = 'objTreeMenu_' . ++$count; $html = "\n"; $html .= '