`
phplaber
  • 浏览: 144044 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

利用MzTreeView 2.0实现树结构显示的一个示例

    博客分类:
  • PHP
阅读更多

MzTreeView 是一款优秀的JS开发框架,中文名为“梅花雪树控件”,主要用来进行树结构的显示,使得展示层次清晰。一个可能的使用场合是,需要展示一件产品下所包含的组件和材料信息。下面以“高压水枪”为例,利用MzTreeView 2.0实现该产品树结构显示。

高压水枪

(注:图片来源:http://a.img.youboy.com/coimg/2010/1/24/g3_2230987.jpg)

下图为“高压水枪”的产品结构图:

产品结构图

 

首先,需要建立产品信息数据库demo,demo中包含三张表:demo_product, demo_material和demo_tree。其中,demo_product包含了product, component和item的信息,这样做是为了减少数据库的复杂度。demo_material为材料数据表。demo_tree为树结构显示数据表,通过这张表建立demo_product和demo_material的联系,从而实现产品结构的树状显示。demo的数据字典如下图:

产品数据库数据字典

通过学习MzTreeView提供的关于csdn导航目录的例子,可以知道MzTreeView是依据“父节点_当前节点”来进行树结构展示的,所以要正确展示出“高压水枪”的树状结构图,必须在demo_tree中正确关联demo_product和demo_material中的数据。


定义好数据的存储结构后,下一步需要考虑的将是如何正确读取数据的问题。因为“高压水枪”包含组件和材料,而组件下又包含材料,所以需要递归的读取数据,因此考虑一个递归函数,只要当前节点不为材料,便继续往下读取信息,一直到材料层。

<?php
	require '../Smarty/Smarty.class.php';
	$id = trim($_GET['id']);			// 产品ID
	$treeId = trim($_GET['treeId']);	// 产品树ID
	
	$con = mysql_connect('localhost', User, Password);
	if (!$con)
		die('数据库连接错误:'.mysql_error());
	mysql_select_db('demo', $con);
	
	// 根据当前产品id,查询产品名称
	mysql_set_charset('utf8', $con);
	$prodResult = mysql_query("SELECT name FROM demo_product WHERE id = {$id}");
	$prodArray = mysql_fetch_array($prodResult, MYSQL_ASSOC);
	$prodName = $prodArray['name'];
	
	// 递归函数
	function getTree($proId)
	{
		static $child = array();
		$result = mysql_query("SELECT * FROM demo_tree WHERE parentId = {$proId} ORDER BY parentId");
		if ($total = mysql_num_rows($result))
		{
			for ($i=0; $i<$total; $i++)
				$tree[$i] = mysql_fetch_array($result, MYSQL_ASSOC);
		}
		$total = count($tree);
		if ($total > 0)
		{
			for ($i=0; $i<$total; $i++)
			{
				if ($tree[$i]['type'] == 0)
				{
					$result = mysql_query("SELECT name FROM demo_material WHERE id = {$tree[$i]['currentId']}");
					$material = mysql_fetch_array($result, MYSQL_ASSOC);
					$tree[$i]['name'] = $material['name'];
					$child = array_merge($child, array($tree[$i]));
				}
				elseif ($tree[$i]['type'] == 1)
				{
					$result = mysql_query("SELECT name FROM demo_product WHERE id = {$tree[$i]['currentId']}");
					$product = mysql_fetch_array($result, MYSQL_ASSOC);
					$tree[$i]['name'] = $product['name'];
					$child = array_merge($child, array($tree[$i]));
					getTree($tree[$i]['id']);
				}
			}
		}
		return $child;
	}
	$test = getTree($treeId);
	//print_r($test);exit;
	// Use Smarty
	$smarty = new Smarty();
	$smarty->assign("treeId", $treeId);
	$smarty->assign("name", $prodName);
	$smarty->assign("child", $test);
	$smarty->display('show.html');
	
	mysql_close($con);
?>

需要说明一点,$id为产品的根节点标识,此处即指“高压水枪”在demo_product中对应的id。而$treeId为产品树的标识,即demo_tree中字段parentId=0所对应的id。PHP正是通过这两个值在数据库中进行指定查询,从而显示不同的树结构。$id和$treeId的值是通过GET方法传递的。


最后,在模板层,通过MzTreeView的语法结构data[],配合Smarty的遍历语法foreach结构,便能正确为树结构显示赋值。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Product Tree</title>
<style type="text/css">
#treeview{
	width: 500px;
	height: 200px;
	margin: 10px 0;
	padding: 10px;}
</style>
<script src="../scripts/jsframework.js"></script>
<script type="text/javascript">
var a;
function test(){
	alert('Hello World');
}
function loadTree(){
	var data = {};
	{foreach from=$child item=item}
		data["{$item.parentId}_{$item.id}"] = "text: {$item.parentId}_{$item.id}_{$item.name} ;";
    {/foreach}
	
	data["-1_{$treeId}"] = "text: {$name};";
	Using("System.Web.UI.WebControls.MzTreeView");
	a = new MzTreeView();
	a.autoSort = false;
	a.useCheckbox = false;
	a.canOperate = true;
	a.dataSource = data;
	document.getElementById("treeview").innerHTML = a.render();
	a.expandLevel(1);
}
</script>
</head>

<body>

<button onClick="javascript:loadTree();">Show Tree!</button>
<div id="treeview"></div>
</body>
</html>

 

当在URL上传递正确的id和treeId时,如:http://127.0.0.1/treeview/demo/index.php?id=1&treeId=1,页面显示一个值为“Show Tree!”的按钮,点击按钮并将每层节点都打开时,显现如下树状图:

树结构效果图

(完)

 

  • 大小: 11.8 KB
  • 大小: 165.6 KB
  • 大小: 11.8 KB
  • 大小: 8.5 KB
分享到:
评论

相关推荐

    自己优化的mztreeview2.0 梅花雪好用强大

    由于只有一个文件名 "mztreeview2",可以推测这可能是一个压缩包,包含了mztreeview2.0的所有源代码、编译文件、文档或示例项目。用户解压后可以查看源码、学习、调试或直接在项目中集成这个优化过的控件。 【相关...

    MzTreeView2.0

    - **文件系统浏览器**:利用MzTreeView2.0可以快速构建一个类似于Windows资源管理器的文件系统浏览界面,用户可以浏览目录结构,进行文件操作。 - **数据库对象管理**:在数据库管理工具中,可以展示数据库的表、...

    梅子园系列 Mztreeview1.0 Mztreeview2.0 日历控件 日期控件

    梅子园系列 Mztreeview1.0 Mztreeview2.0 日历控件 日期控件 详情请访问:http://www.cnblogs.com/qiaojun/articles/1428058.html

    梅花雪2.0,mztreeview2

    【标题】"梅花雪2.0,mztreeview2"是一个关于CSDN社区中的一个知名开发者,梅花雪,所创建的树形控件——mztreeview2的升级版本。这个控件是为软件开发人员设计的,特别是那些使用C++或相关编程语言进行Windows应用...

    mztreeview树形控件

    "mztreeview树形控件"是一个用于网页的JavaScript组件,专门用于创建和展示树形结构的数据。在网页设计和开发中,树形控件常用于组织和展示层次化的信息,如目录结构、菜单系统或者关系图表。Mztreeview是一个流行的...

    三个常用树控件dtree最新dtree带checkbox还有mztreeview1.0跟2.0

    三个常用树控件dtree最新dtree带checkbox还有mztreeview1.0跟2.0里面还有本人写的部分demo如果是常用开发请使用mztree1.0或dtree 如果有特殊需求请使用带checkbox的dtree或mztree2.0

    MzTreeView + jQuery 实现地区树型选择.

    2. **异步加载**:可以实现按需加载,当用户展开一个节点时,只加载该节点下的子节点,减少初始加载时的数据量。 3. **操作接口**:提供添加、删除、展开、折叠、选中等操作接口,方便对树形结构进行动态管理。 4. *...

    树形结构示例

    在这个实例中,`mztreeview2`可能是一个包含了实现树形结构的JavaScript代码文件,它可能包含了构建、遍历、添加和删除节点等功能。例如,它可能有以下方法: - `addNode(parentNode, newNode)`: 向父节点下添加一...

    一个好用的js树 梅花雪MzTreeView

    【标题】:“一个好用的js树 梅花雪MzTreeView” 在这个主题中,我们探讨的是“梅花雪MzTreeView”,这是一个基于JavaScript的...如果你的项目需要显示层次结构的数据,那么MzTreeView无疑是一个值得考虑的优秀工具。

    MzTreeView10.rar

    【标题】"MzTreeView10.rar" 是一个压缩包文件,其中包含了一个名为 "MzTreeView10" 的资源,这个资源是一个基于JavaScript实现的树形控件,能够展示1024个节点的数据结构。 【描述】描述中提到,这是一个用...

    mztreeview1.0

    总之,MzTreeView1.0是开发人员构建具有强大树形结构功能的应用程序时的一个有力工具。通过其灵活的特性、丰富的功能以及良好的用户交互体验,可以极大地提高开发效率并提升最终产品的质量。对于那些需要处理层次化...

    mztreeview2

    "mztreeview2" 是一个基于JavaScript实现的树视图组件,它提供了高效且优化的算法来构建和操作树结构。这个组件的亮点在于其性能优化,相比其他树生成方法,它能更有效地处理大量数据,提供流畅的用户体验。 **描述...

    MzTreeView1.0

    "MzTreeView1.0" 是一个专门用于创建和管理树形结构的JavaScript库,它提供了丰富的功能和良好的用户体验。在Web开发中,树形结构常用于展现层级关系的数据,如目录结构、组织架构或者导航菜单等。这个库的发布旨在...

    mztreeview

    "mztreeview"是一个专用于创建树形菜单的软件组件,尤其在网页开发中常见,主要用于构建层次结构清晰、交互性强的导航系统。这个组件的名字可能来源于“梅花”(mz)与“tree view”(树视图)的组合,暗示了其设计...

    MzTreeView10

    在Windows编程中,树形视图控件是常见的一种界面元素,它允许用户以层级结构来展示数据,通常用于文件系统浏览、组织结构显示或者自定义菜单等场景。MzTreeView10作为一款第三方控件,提供了丰富的功能和自定义选项...

    javascript特效之树控件MzTreeView

    JavaScript特效之树控件MzTreeView是一个用于网页交互设计中的组件,它允许用户在网页上以树状结构展示数据。这种控件常用于文件管理、菜单导航、组织结构图等场景,因为它能清晰地呈现层次关系。MzTreeView是基于...

    MzTreeView10 开发文档

    MzTreeView10 开发文档 菜单树开发入门

    MzTreeView(asp.net调用方法)

    MzTreeView是一款高效且功能丰富的树形控件,最初是为ASP环境设计的。然而,随着Web开发技术的发展,ASP.NET成为了构建动态网站的主流框架。因此,将MzTreeView的功能扩展到ASP.NET环境中变得非常必要。这个更新的...

Global site tag (gtag.js) - Google Analytics