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

📄 class_tree.php

📁 jsp程序开发系统
💻 PHP
字号:
<?php// $Id: class_Tree.php,v 1.5 2004/02/06 04:46:59 deskpro Exp $/*** HTML_TreeMenu Class* @author  Richard Heyes* @author  Harald Radi* @access  public* @package HTML_TreeMenu*/class HTML_TreeMenu{	/**    * Indexed array of subnodes	* @var array    */	var $items;	/**    * The layer ID	* @var string    */	var $layer;	/**    * Path to the images	* @var string    */	var $images;	/**    * Name of the object	* This should not be changed without changing	* the javascript.	* @var string    */	var $menuobj;	/**    * Constructor	*	* @access public	* @param  string $layer          The name of the layer to add the HTML to.	*                                In browsers that do not support document.all	*                                or document.getElementById(), document.write()	*                                is used, and thus this layer name has no effect.	* @param  string $images         The path to the images folder.	* @param  string $linkTarget     The target for the link. Defaults to "_self"	* @param  string $usePersistence Whether to use clientside persistence. This option	*                                only affects ie5+.    */	function HTML_TreeMenu($layer, $images, $linkTarget = '_self', $usePersistence = true)	{		$this->menuobj        = 'objTreeMenu';		$this->layer          = $layer;		$this->images         = $images;		$this->linkTarget     = $linkTarget;		$this->usePersistence = $usePersistence;	}	/**    * This function adds an item to the the tree.	*	* @access public	* @param  object $menu The node to add. This object should be	*                      a HTML_TreeNode object.	* @return object       Returns a reference to the new node inside	*                      the tree.    */	function &addItem(&$menu)	{		$this->items[] = &$menu;		return $this->items[count($this->items) - 1];	}	/**    * This function prints the menu Jabbascript code. Should	* be called *AFTER* your layer tag has been printed. In the	* case of older browsers, eg Navigator 4, The menu HTML will	* appear where this function is called.	*	* @access public    */ 	function printMenu()	{		echo "\n"; 		echo '<script language="javascript" type="text/javascript">' . "\n\t";		echo sprintf('%s = new TreeMenu("%s", "%s", "%s", "%s");',		             $this->menuobj,					 $this->layer,					 $this->images,					 $this->menuobj,					 $this->linkTarget); 		echo "\n";		if (isset($this->items)) {			for ($i=0; $i<count($this->items); $i++) {				$this->items[$i]->_printMenu($this->menuobj . ".n[$i]");			}		} 		echo sprintf("\n\t%s.drawMenu();", $this->menuobj);		if ($this->usePersistence) {			echo sprintf("\n\t%s.resetBranches();", $this->menuobj);		}		echo "\n</script>";	}} // HTML_TreeMenu/*** HTML_TreeNode class* * This class is supplementary to the above and provides a way to* add nodes to the tree. A node can have other nodes added to it. ** @author  Richard Heyes* @author  Harald Radi* @access  public* @package HTML_TreeMenu*/class HTML_TreeNode{	/**    * The text for this node.	* @var string    */	var $text;	/**    * The link for this node.	* @var string    */	var $link;	/**    * The icon for this node.	* @var string    */	var $icon;	/**    * Indexed array of subnodes	* @var array    */	var $items;	/**    * Whether this node is expanded or not	* @var bool    */	var $expanded;	/**    * Constructor	*	* @access public	* @param  string $text      The description text for this node	* @param  string $link      The link for the text	* @param  string $icon      Optional icon to appear to the left of the text	* @param  bool   $expanded  Whether this node is expanded or not (IE only)	* @param  bool   $isDynamic Whether this node is dynamic or not (no affect on non-supportive browsers)    */	function HTML_TreeNode($text = null, $link = null, $icon = null, $expanded = false, $isDynamic = true)	{		$this->text      = (string)$text;		$this->link      = (string)$link;		$this->icon      = (string)$icon;		$this->expanded  = $expanded;		$this->isDynamic = $isDynamic;	}	/**    * Adds a new subnode to this node.	*	* @access public	* @param  object $node The new node    */	function &addItem(&$node)	{		$this->items[] = &$node;		return $this->items[count($this->items) - 1];	}	/**    * Prints jabbascript for this particular node.	*	* @access private	* @param  string $prefix The jabbascript object to assign this node to.    */	function _printMenu($prefix)	{		echo sprintf("\t%s = new TreeNode('%s', %s, %s, %s, %s);\n",		             $prefix,		             htmlspecialchars($this->text),		             !empty($this->icon) ? "'" . $this->icon . "'" : 'null',		             !empty($this->link) ? "'" . $this->link . "'" : 'null',					 $this->expanded  ? 'true' : 'false',					 $this->isDynamic ? 'true' : 'false');		if (!empty($this->items)) {			for ($i=0; $i<count($this->items); $i++) {				$this->items[$i]->_printMenu($prefix . ".n[$i]");			}		}	}}// +-----------------------------------------------------------------------+// | END OF PEAR COPYRIGHT                                                 |// +-----------------------------------------------------------------------+/*** Builds a tree menu object out of two* mysql tables.** EXPECTS*  o A global variable $db (database object from Deskpro)* */class categoryTree{	var $catLinkFormat;	var $artLinkFormat;	var $catNameFormat;	var $artNameFormat;	var $categories;	var $articles;	/**	* Constructor. Autostarts the build process	*/	function categoryTree()	{		$this->catLinkFormat = 'index.php?catid={id}';		$this->artLinkFormat = 'view.php?do=view&articleid={id}';		$this->catNameFormat = '{name} ({totalarticles})';		$this->artNameFormat = '{title}';		$this->_getData();		$this->tree = &new HTML_TreeMenu('fooLayer', 'treeMenu/images/');		$this->_buildTree($this->_getCategories(0), $this->tree);	}		/**	* Prints the menu	*/	function printMenu()	{		$this->tree->printMenu();	}		/**	* Builds the menu	*/	function _buildTree($categories, &$treenode)	{		for ($i=0; $i<count($categories); $i++) {			$newnode = &$treenode->addItem(new HTML_TreeNode($this->_parseLinkFormat($this->catNameFormat, $categories[$i]), $this->_parseLinkFormat($this->catLinkFormat, $categories[$i]), 'folder.gif'));						// Handle subcategories			$subcats = $this->_getCategories($categories[$i]['id']);			if (!empty($subcats)) {				$this->_buildTree($subcats, $newnode);			}						// Handle articles			$articles = $this->_getArticles($categories[$i]['id']);			if (!empty($articles)) {				foreach ($articles as $article) {					$newnode->addItem(new HTML_TreeNode($this->_parseLinkFormat($this->artNameFormat, $article), $this->_parseLinkFormat($this->artLinkFormat, $article), 'article.gif'));				}			}		}	}	/**	* Gets categories using the given parent id	*/			function _getCategories($id)	{		$return = array();		if (is_array($this->categories)) {			foreach ($this->categories as $key => $value) {				if ($value['parent'] == $id) {					$return[] = $value;				}			}		}				return $return;	}	/**	* Gets articles using the given category id	*/			function _getArticles($category)	{		return !empty($this->articles[$category]) ? $this->articles[$category] : array();	}	/**	* Parses the data from the db	*/	function _getData()	{		$GLOBALS['db']->query('SELECT * FROM faq_cats ORDER BY parent, show_order, id');		while ($row = $GLOBALS['db']->row_array()) {			$row['name'] = addslashes($row['name']);			$this->categories[] = $row;		}		$GLOBALS['db']->query('SELECT id, title, category FROM faq_articles ORDER BY category, show_order, id');		while ($row = $GLOBALS['db']->row_array()) {			$row['title'] = addslashes($row['title']);			$this->articles[$row['category']][] = $row;		}	}	/**	* Parses a link (though not only used for links)	*/			function _parseLinkFormat($format, $data)	{		return preg_replace('/{(.+)}/Ue', "@\$data['\\1'];", $format);	}}?>

⌨️ 快捷键说明

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