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

📄 xmltree.php

📁 极限网络智能办公系统—MYOA26—100%—源程序。
💻 PHP
字号:
<?php

class tree
{

	var $FILE_SORT;
	var $file = "display.xml";
	var $fontSize = -1;
	var $expandAll = 0;
	var $imgPath = "treeicon/";
	var $imgType = array
	(
		"leaf" => "t_leaf.gif",
		"tplus" => "t_tplus.gif",
		"cplus" => "t_cplus.gif",
		"tminus" => "t_tminus.gif",
		"cminus" => "t_cminus.gif",
		"mbar" => "t_bar.gif",
		"mtee" => "t_tee.gif",
		"mcorner" => "t_c.gif",
		"mspace" => "t_dot.gif",
		"audio" => "t_audio.gif",
		"disk" => "t_disk.gif",
		"document" => "t_web.gif",
		"email" => "t_email.gif",
		"help" => "t_help.gif",
		"ini" => "t_ini.gif",
		"music" => "t_music.gif",
		"pdf" => "t_pdf.gif",
		"text" => "t_text.gif",
		"folder" => "t_folder.gif",
		"web" => "t_web.gif",
		"word" => "t_word.gif",
		"write" => "t_write.gif"
	);
	var $xmlDepth = array( );
	var $treeDepth;
	var $lastElement;
	var $nodeName;
	var $nodeCount;
	var $maxLevel;

	function startelement( $parser, $name, $attrs )
	{
		$this->lastElement = $name;
		if ( $name == "TREE" )
		{
			$this->node[0]['treeDepth'] = "0";
			$this->node[0]['NAME'] = trim( $attrs['NAME'] );
			$this->node[0]['TYPE'] = trim( $attrs['TYPE'] );
			$this->node[0]['LINK'] = trim( $attrs['LINK'] );
			$this->node[0]['TARGET'] = trim( $attrs['TARGET'] );
			$this->node[0]['FORM'] = trim( $attrs['FORM'] );
		}
		if ( $name == "NODE" )
		{
			++$this->treeDepth;
			if ( $this->maxLevel < $this->treeDepth )
			{
				$this->maxLevel = $this->treeDepth;
			}
			++$this->nodeCount;
			$this->nodeID = $this->nodeCount;
			$this->node[$this->nodeID]['treeDepth'] = $this->treeDepth;
		}
		while ( list( $k, $v ) = each( $attrs ) )
		{
			$this->node[$this->nodeID][$k] = trim( $v );
		}
		++$this->xmlDepth[$parser];
	}

	function dataelement( $parser, $data )
	{
		$this->node[$this->nodeID][$this->lastElement] .= trim( $data );
	}

	function endelement( $parser, $name )
	{
		if ( $name == "NODE" )
		{
			--$this->treeDepth;
			$this->node[$this->nodeID]['last'] = 1;
		}
		--$this->xmlDepth[$parser];
	}

	function maketree( $XML_FILE = "" )
	{
		if ( get_magic_quotes_runtime( ) )
		{
			set_magic_quotes_runtime( 0 );
			$mq = 1;
		}
		$this->parser = xml_parser_create( );
		xml_set_object( $this->parser, &$this );
		xml_set_element_handler( $this->parser, "startElement", "endElement" );
		xml_set_character_data_handler( $this->parser, "dataElement" );
		if ( $XML_FILE )
		{
			if ( !( $fp = fopen( $XML_FILE, "r" ) ) )
			{
				exit( "Could not open XML file" );
			}
		}
		else if ( !( $fp = fopen( $this->file, "r" ) ) )
		{
			exit( "Could not open XML file" );
		}
		while ( $data = fread( $fp, 4096 ) )
		{
			if ( !xml_parse( $this->parser, $data, feof( $fp ) ) )
			{
				exit( sprintf( "XML error: %s at line %d", xml_error_string( xml_get_error_code( $this->parser ) ), xml_get_current_line_number( $this->parser ) ) );
			}
		}
		xml_parser_free( $this->parser );
		if ( $mq )
		{
			set_magic_quotes_runtime( 1 );
		}
		return $this->displaytree( );
	}

	function maketreetext( $XML_TEXT = "" )
	{
		if ( get_magic_quotes_runtime( ) )
		{
			set_magic_quotes_runtime( 0 );
			$mq = 1;
		}
		$this->parser = xml_parser_create( );
		xml_set_object( $this->parser, &$this );
		xml_set_element_handler( $this->parser, "startElement", "endElement" );
		xml_set_character_data_handler( $this->parser, "dataElement" );
		if ( $XML_TEXT == "" )
		{
			exit( "XML TEXT is empty!" );
		}
		$POS = 0;
		$LEN = strlen( $XML_TEXT );
		while ( $data = substr( $XML_TEXT, $POS, 4096 ) )
		{
			if ( !xml_parse( $this->parser, $data, 0 ) )
			{
				exit( sprintf( "XML error: %s at line %d", xml_error_string( xml_get_error_code( $this->parser ) ), xml_get_current_line_number( $this->parser ) ) );
			}
			$POS += 4096;
			if ( $LEN <= $POS )
			{
				break;
			}
		}
		xml_parser_free( $this->parser );
		if ( $mq )
		{
			set_magic_quotes_runtime( 1 );
		}
		return $this->displaytree( );
	}

	function displaytree( )
	{
		global $e;
		$expands = explode( ",", $e );
		$totalExpands = count( $expands );
		foreach ( $expands as $x )
		{
			$expand[$x] = 1;
		}
		$visible[0] = 1;
		$aNode = 0;
		for ( ;	$aNode <= $this->nodeCount;	++$aNode	)
		{
			if ( $this->expandAll == 1 && !$e )
			{
				$visible[$aNode] = 1;
				$expand[$aNode] = 1;
			}
			if ( $this->node[$aNode]['treeDepth'] == 0 )
			{
				$visible[$aNode] = 1;
			}
			if ( $this->node[$aNode]['treeDepth'] < $this->node[$aNode + 1]['treeDepth'] )
			{
				$expandable[$aNode] = 1;
			}
			else if ( !( $this->expandAll == 1 && !$e ) && !( $expandable[$aNode] == 1 ) )
			{
				$expand[$aNode] = 1;
			}
		}
		$i = 0;
		for ( ;	$i <= $totalExpands;	++$i	)
		{
			$aNode = $expands[$i];
			if ( $aNode < $this->nodeCount && $visible[$aNode] == 1 && $expand[$aNode] == 1 )
			{
				$nextNode = $aNode + 1;
				while ( $this->node[$aNode]['treeDepth'] < $this->node[$nextNode]['treeDepth'] )
				{
					if ( $this->node[$nextNode]['treeDepth'] == $this->node[$aNode]['treeDepth'] + 1 )
					{
						$visible[$nextNode] = 1;
						$lastnode = $nextNode;
					}
					++$nextNode;
				}
				$lastNode[$lastnode] = 1;
			}
		}
		$lastlevel = $this->maxLevel;
		$i = $this->nodeCount - 1;
		for ( ;	0 <= $i;	--$i	)
		{
			if ( $this->node[$i]['treeDepth'] < $lastlevel )
			{
				$nextNode = $this->node[$i]['treeDepth'] + 1;
				for ( ;	$nextNode < $this->maxLevel;	++$nextNode	)
				{
					$treeLevels[$nextNode] = 0;
				}
			}
			if ( $treeLevels[$this->node[$i]['treeDepth']] == 0 )
			{
				$treeLevels[$this->node[$i]['treeDepth']] = 1;
				$lastNode[$i] = 1;
			}
			$lastlevel = $this->node[$i]['treeDepth'];
		}
		$treeHTML = "";
		$treeHTML .= ( "<table cellspacing=0 cellpadding=0 border=0  cols=".( $this->maxLevel + 3 ) )." width=".( $this->maxLevel * 16 + $width2 ).">\n";
		$treeHTML .= "<tr>";
		$i = 0;
		for ( ;	$i < $this->maxLevel;	++$i	)
		{
			$treeHTML .= "<td width=16></td>";
		}
		$treeHTML .= "<td></td></tr>\n";
		$i = 0;
		for ( ;	$i < $this->maxLevel;	++$i	)
		{
			$treeLevels[$i] = 1;
		}
		$aNode = 0;
		for ( ;	$aNode < $this->nodeCount + 1;	++$aNode	)
		{
			$nextNode = $aNode + 1;
			if ( $visible[$aNode] == 1 )
			{
				$treeHTML .= "<tr>\n";
				$i = 0;
				for ( ;	$i < $this->node[$aNode]['treeDepth'] - 1;	++$i	)
				{
					if ( $treeLevels[$i] == 1 )
					{
						$treeHTML .= "<td><img src=\"".$this->imgPath.$this->imgType['mbar']."\" alt=\"\"></td>";
					}
					else
					{
						$treeHTML .= "<td><img src=\"".$this->imgPath.$this->imgType['mspace']."\" alt=\" \"></td>";
					}
				}
				if ( $this->node[$aNode]['treeDepth'] )
				{
					if ( $lastNode[$aNode] )
					{
						$treeDepth1 = $this->node[$aNode]['treeDepth'];
						if ( $aNode == $this->nodeCount - 1 && $treeDepth1 == $this->node[$this->nodeCount]['treeDepth'] )
						{
							$Img = $this->imgType['mtee'];
						}
						else
						{
							$Img = $this->imgType['mcorner'];
						}
						$treeHTML .= "<td><img src=\"".$this->imgPath.$Img."\" alt=\"\"></td>";
						$treeLevels[$this->node[$aNode]['treeDepth'] - 1] = 0;
					}
					else
					{
						if ( $this->expandAll == 1 )
						{
							if ( $this->nodeCount == $aNode )
							{
								$Img2 = $this->imgType['mcorner'];
							}
							else
							{
								$Img2 = $this->imgType['mtee'];
							}
						}
						else
						{
							$Img2 = $this->imgType['mtee'];
						}
						$treeHTML .= "<td><img src=\"".$this->imgPath.$Img2."\" alt=\"\"></td>";
						$treeLevels[$this->node[$aNode]['treeDepth'] - 1] = 1;
					}
				}
				if ( $this->node[$aNode]['treeDepth'] < $this->node[$nextNode]['treeDepth'] )
				{
					$postString = "?e=";
					$i = 0;
					for ( ;	$i < $this->nodeCount;	++$i	)
					{
						if ( $expand[$i] == 1 xor $aNode == $i )
						{
							if ( $postString != "?e=" )
							{
								$postString .= ",";
							}
							$postString .= $i;
						}
					}
					$postString .= "&FILE_SORT=".$this->FILE_SORT;
					if ( $expand[$aNode] == 0 )
					{
						if ( $lastNode[$aNode] )
						{
							$treeHTML .= "<td><a href=\"".$PHP_SELF.$postString."\"><img src=\"".$this->imgPath.$this->imgType['cplus']."\" border=\"0\" alt=\"展开\"></a></td>\n";
						}
						else
						{
							$treeHTML .= "<td><a href=\"".$PHP_SELF.$postString."\"><img src=\"".$this->imgPath.$this->imgType['tplus']."\" border=\"0\" alt=\"展开\"></a></td>\n";
						}
					}
					else
					{
						$treeHTML .= "<td><a href=\"".$PHP_SELF.$postString."\"><img src=\"".$this->imgPath.$this->imgType['tminus']."\" border=\"0\" alt=\"收缩\"></a></td>\n";
					}
				}
				else
				{
					if ( $this->node[$aNode]['TYPE'] )
					{
						if ( $this->imgPath.$this->imgType[$this->node[$aNode]['TYPE']] )
						{
							$leafImg = $this->imgPath.$this->imgType[$this->node[$aNode]['TYPE']];
						}
						else
						{
							$leafImg = $this->imgPath.$this->imgType['leaf'];
						}
					}
					if ( $leafImg )
					{
						$treeHTML .= "<td><img src=\"".$leafImg."\" alt=\"\"></td>\n";
					}
					else
					{
						$treeHTML .= "<td></td>";
					}
				}
				if ( $this->node[$aNode]['SUB'] == "0" || $aNode == 0 )
				{
					$treeHTML .= ( "<td  valign=top colspan=".( $this->maxLevel - $this->node[$aNode]['treeDepth'] + 3 ) )." nowrap >";
					$treeHTML .= "<img src=\"/images/menu/file_folder.gif\"><font face =\"tahoma\" size=\"".$this->fontSize."\">&nbsp;";
					$treeHTML .= $this->node[$aNode]['NAME']."<br></font>";
					$treeHTML .= "</td>\n";
				}
				else
				{
					$treeHTML .= ( "<td colspan=".( $this->maxLevel - $this->node[$aNode]['treeDepth'] + 3 ) )." nowrap>";
					$treeHTML .= "<font size=\"".$this->fontSize."\">";
					if ( $this->node[$aNode]['treeDepth'] < $this->node[$nextNode]['treeDepth'] )
					{
						if ( $expand[$aNode] == 0 )
						{
							$treeHTML .= "<img src=\"/images/menu/tree_dir.gif\">";
						}
						else
						{
							$treeHTML .= "<img src=\"/images/menu/tree_diropen.gif\">";
						}
					}
					$treeHTML .= "<a href=\"".$this->node[$aNode]['LINK'];
					if ( $aNode == 0 )
					{
						$treeHTML .= "?e=0";
					}
					else
					{
						if ( $this->node[$aNode]['LINK'] == "" )
						{
							$treeHTML .= "?e=".$e;
						}
						$treeHTML .= "&FILE_SORT=".$this->FILE_SORT;
					}
					$treeHTML .= "\" ";
					if ( $this->node[$aNode]['TARGET'] )
					{
						$treeHTML .= "target=\"".$this->node[$aNode]['TARGET']."\"";
					}
					$treeHTML .= ">".$this->node[$aNode]['NAME']."</font></a></td>\n";
				}
				$treeHTML .= "</tr>\n";
			}
		}
		$treeHTML .= "</table></font>\n";
		return $treeHTML;
	}

}

echo " \r\n";
?>

⌨️ 快捷键说明

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