0

well this one is the my first post in the daniweb , and i belive that i will get solved my problem .


well i trying to create a MLM project in which i m trying to creating binary tree by using this code which i have attached in this .

//Index.php file
<!DOCTYPE html>
<html>
    <head>
		<title>Tree-view Test</title>
			<meta http-equiv="Content-Type" content="text/html; charset=utf8">
				<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
				<script type="text/javascript" src="TreeView.js"></script>
				<script type="text/javascript">
					$(document).ready(function(){
					alelrt("Hello I m Active");
					TreeView.drawAll();
					});
				</script>
    </head>
    <body bgcolor="red">
    <?php
	ini_set('display_errors', true);
	error_reporting(E_ALL);
	include("TreeView.inc");
    $dbLink = new mysqli("localhost", "root", "root", "tree");
	$treeView = new TreeView($dbLink);
    $treeView->printTree('treeview');
     $dbLink->close();
    ?>
	    <div style="clear: both;">
			<pre><?php print_r($treeView->levels); ?></pre>
		</div>
	</body>
</html>

this is my TreeView.inc file

<?php
class TreeView
{
    private $bgColor ="white";
    private $dbLink;
    private $tblName;
    public $levels;
    public $TreeView_DivID=0;
    public function __construct(mysqli $dbLink)
    {
		if($dbLink != null && $dbLink->connect_errno == 0)
		{
			$this->dbLink = $dbLink;
			if(!isset($GLOBALS["TreeView_DivID"]))
			{
				$TreeView_DivID=0;
				$GLOBALS["TreeView_DivID"];
			}
		}
		else
		{
			throw new Exception("The mysqli object provided is invalid.");
		}
    }
    public function createTree($tblName)
    {
		if(!isset($tblName) || empty($tblName))
		{
			throw new Exception("Failed to create the tree. Table or database information is invalid");
		}
		else
		{
			$this->tblName = $tblName;
			$treeData = array();
			$output = "";
			$this->fetchTree($treeData);
			$divID = "TreeView_ContainerDiv_" . $GLOBALS["TreeView_DivID"];
			$output = <<<HTML
			<style type="text/css">
				div#{$divID} { margin: 0; padding: 0; text-align: center; }
				div#{$divID} div { margin: 0; padding: 0 10px; float: left; {$this->bgColor}}
				div#{$divID} p { margin: 0; padding: 0; margin-bottom: 10px; }
			</style>
			<div id="{$divID}">
				<div id="{$divID}_Inner">
				HTML;
				$this->buildHtml($treeData, $output);
				$rootID = array_keys($treeData);
				$rootID = $rootID[0];
				$output .= <<<HTML
		  </div>
			<script type="text/javascript">
				TreeView.addTree('Tree{$GLOBALS['TreeView_DivID']}_{$rootID}');
			</script>
		  </div>
	 HTML;
		$TreeView_DivID=$TreeView_DivID+1;
		return $output;
		}
    }
    public function printTree($tblName)
    {
	  echo $this->createTree($tblName);
    }
    private function fetchTree(&$parentArray, $parentID=null, $depth=0)
    {
		global $dbLink;
  		if($parentID == null)
		{
			$parentID = 0;
		}
		$sql = "SELECT `id` FROM `{$this->tblName}` WHERE `parentID`= ". intval($parentID);
			$result = $dbLink->query($sql);
			if($result)
			{
				while($row = mysqli_fetch_assoc($result))
				{
					$this->levels[$depth]= $row;
					$currentID = $row;
					$parentArray[$currentID] = array();
					$this->fetchTree($parentArray[$currentID], $currentID, $depth+1);
				}
			$result->close();
			}
			else
			{
				die("Failed to execute query! ($level / $parentID)");
			}
    }
    private function buildHtml($data, &$output)
    {
    	foreach($data as $_id => $_children)
	{
		$output .= "<div id=\"Tree{$GLOBALS["TreeView_DivID"]}_{$_id}\"><p>{$_id}</p>";
		$this->buildHtml($_children, $output);
		$output .= "</div>";
	}
    }
}
?>

And a Javascript file for creating downlines between members

/**
     * Handles drawing lines between the tree structures generated by PHP.
     */
    var TreeView =
    {
    /** Constants (sort of) **/
    LINE_MARGIN : 10, // px
    BORDER_STYLE : "solid 1px #555555",
     
    /** A list of root elements to draw when the window is loaded. */
    trees : [],
     
    /**
      * Adds a tree to the list of trees to be drawn.
      * @param rootID The ID of the root element of the tree.
      */
    addTree : function(rootID)
    {
    this.trees.push(rootID);
    },
     
    /**
      * Loops through all the trees and executes the drawing function for each of them.
      */
    drawAll : function()
    {
    for(var x = 0; x < this.trees.length; x++)
    {
    var root = $("#" + this.trees[x]);
    if(root.length > 0)
    {
    this.drawTree(root);
    }
    }
    },
     
    /**
      * Recursively draws all lines between all root-child elements in the given tree.
      * @param root The root element of the tree to be drawn.
      */
    drawTree : function(root)
    {
    root = $(root);
    if(root.length > 0)
    {
    var children = root.children('div');
    for(var i = 0; i < children.length; i++)
    {
    this.drawLine(root, children[i]);
    this.drawTree(children[i]);
    }
    }
    },
     
    /**
      * Draws a line between the two passed elements.
      * Uses an absolutely positioned <div> element with the borders as the lines.
      * @param elem1 The first element
      * @param elem2 The second element
      */
    drawLine : function(elem1, elem2)
    {
    // Use the <p> element as the base. Otherwise the height() call on the
    // <div> will return the entire hight of the tree, including the children.
    elem1 = $(elem1).find("p").eq(0);
    elem2 = $(elem2).find("p").eq(0);
     
    var e1_pos = $(elem1).position();
    var e2_pos = $(elem2).position();
    var borders = { top:true, left:true, right:false, bottom:false };
     
    // Move the position to the center of the element
    e1_pos.left += ($(elem1).width() / 2);
    e1_pos.top += ($(elem1).height() / 2);
    e2_pos.left += ($(elem2).width() / 2);
    e2_pos.top += ($(elem2).height() / 2);
     
    // Position if they are horizontally aligned.
    if(e1_pos.left == e2_pos.left)
    {
    borders.top = false;
    if(e1_pos.top < e2_pos.top)
    {
    e1_pos.top += ($(elem1).height() / 2);
    e2_pos.top -= ($(elem2).height() / 2);
    }
    else
    {
    e1_pos.top -= ($(elem1).height() / 2);
    e2_pos.top += ($(elem2).height() / 2);
    }
    }
     
    // Position if they are verticaly aligned.
    else if(e1_pos.top == e2_pos.top)
    {
    borders.left = false;
    e1_pos.top += ($(elem1).height() / 2);
    e2_pos.top += ($(elem2).height() / 2);
    if(e1_pos.left < e2_pos.left)
    {
    e1_pos.left += $(elem1).width();
    }
    else
    {
    e2_pos.top += $(elem2).height();
    }
    }
     
    // Position if the elements are not aligned.
    else
    {
    if(e1_pos.left < e2_pos.left)
    {
    borders.right = true;
    borders.left = false;
    }
     
    if(e1_pos.top > e2_pos.top)
    {
    borders.bottom = true;
    borders.top = false;
    }
    }
     
    // Calculate the overlay position and size
    var over_position = {
    left:(e1_pos.left < e2_pos.left ? e1_pos.left : e2_pos.left),
    top:(e1_pos.top < e2_pos.top ? e1_pos.top : e2_pos.top)
    };
    var over_size = {
    width:Math.abs(e1_pos.left - e2_pos.left),
    height:Math.abs(e1_pos.top - e2_pos.top)
    }
     
    // Create the overlay div
    var raw_overlay = document.createElement('div');
    var overlay = $(raw_overlay);
     
    // Add the borders, and create a margin for the lines so they are not
    // drawn "into" the numbers.
    if(borders.top) {
    overlay.css('border-top', this.BORDER_STYLE);
    over_size.height -= this.LINE_MARGIN;
    }
    if(borders.bottom) {
    overlay.css('border-bottom', this.BORDER_STYLE);
    over_position.top += this.LINE_MARGIN;
    over_size.height -= this.LINE_MARGIN;
    }
    if(borders.left) {
    overlay.css('border-left', this.BORDER_STYLE);
    over_size.width -= this.LINE_MARGIN;
    }
    if(borders.right) {
    overlay.css('border-right', this.BORDER_STYLE);
    over_position.left += this.LINE_MARGIN;
    over_size.width -= this.LINE_MARGIN;
    }
     
    overlay.css('position', 'absolute');
    overlay.css('top', over_position.top);
    overlay.css('left', over_position.left);
    overlay.css('width', over_size.width);
    overlay.css('height', over_size.height);
     
    document.body.appendChild(overlay.get(0));
    }
    }

my mysql table structure is

create table treeview( id int not null primary key auto_increment, parentID int);

pleaseeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
helpppppppppppppppppppppppppp meeeeeeeeeeeeeeeeeeeeeeee

Attachments
3
Contributors
10
Replies
11
Views
6 Years
Discussion Span
Last Post by peterpa
0

Just check if instead of using treeView.inc ,rename it to treeView.php and also rename where you are calling it....Check if it works...
and for line 56...i suppose it must be EOHTML;

Edited by IIM: n/a

0

hi , IIM , i m still getting the error in "TreeView.inc" lineno#100 .
please help me...

0

hi IIM , i have correct the last error thanks , but still i getting the error in this givven below

Notice: Undefined index: TreeView_DivID in C:\wamp\www\tree\TreeView.inc on line 17

Warning: Illegal offset type in C:\wamp\www\tree\TreeView.inc on line 80

Warning: Illegal offset type in C:\wamp\www\tree\TreeView.inc on line 81

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 261900 bytes) in C:\wamp\www\tree\TreeView.inc on line 81
0

Arrays and objects can not be used as keys. Doing so will result in a warning: Illegal offset type.
fr more details click here
and for error 1:-remove 17 line and check

Edited by IIM: n/a

0

thank you ihave solved the problems with help of you guys........

This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.