setvars($lang); // create array with parent index and location names $parents = array(); $location_names = array(); // get location information and insert to the arrays $result = mysql_query("SELECT location_id, location_name, parent FROM location") or die(mysql_error()); while ($row = mysql_fetch_object($result)) { $location_names[$row->location_id] = $row->location_name; $parents[$row->parent][] = $row->location_id; } // look for parents and create a new array for every child function location($parents, $parent = 0) { $children = array(); foreach ($parents[$parent] as $child) { if (isset($parents[$child])) { // element has children $children[$child] = location($parents, $child); } else { // no children, set NULL $children[$child] = NULL; } } return $children; } // recursive children check to template function checkchildren ($array, $level) { global $tp; global $location_names; foreach ($array as $location_id=>$val) { if($val != "") { $tp->set("location_id", $location_id); $tp->set("location_name", $location_names[$location_id]); $tp->set("nbsp", str_repeat("   ",$level)); $tp->parse("locationrow"); checkchildren($val, $level+1); } else { $tp->set("location_id", $location_id); $tp->set("location_name", $location_names[$location_id]); $tp->set("nbsp", str_repeat("   ",$level)); $tp->parse("locationrow"); } } $tp->parse("location"); $tp->clear("location"); } // assemble the tree $tree = location($parents); // check for values and build template checkchildren($tree, 0); // output $tp->parse(); $tp->spit(); include("footer.php"); ?>