Hallo zusammen,
ich arbeite seit einiger Zeit an einem Neuaufbau meiner Website und komme derzeit leider nicht weiter.
Derzeit beschäftige ich mich mit einem Nachrichtensystem, bei dem Benutzer u.a. persönliche Ordner (ähnlich E-Mail) anlegen können. Diese sollen vom jeweiligen Benutzer eigenhändig erstellt/verschoben/bearbeitet/gelöscht werden können. Abgesehen natürlich von 3 System Ordnern (Posteingang, Postausgang, Papierkorb).
Mein Ziel ist es, dass alle vorhandenen Ordner in einem dynamisch erweiterbaren TreeView dargestellt werden. Allerdings habe ich so meine Probleme damit
Meine Datenbankstruktur sieht folgendermaßen aus:
Zum Auslesen der Datenbank habe ich mir eine kleine Hilfsfunktion geschrieben (dynamic_db_reader):
Meine Aktuelle Klasse sieht so aus:
Kann mir dabei jemand helfen? Bin nicht der beste wenn es um solche Rekursionen geht.. :/
Vielen Dank im Voraus!
Gruß, Cyntho
ich arbeite seit einiger Zeit an einem Neuaufbau meiner Website und komme derzeit leider nicht weiter.
Derzeit beschäftige ich mich mit einem Nachrichtensystem, bei dem Benutzer u.a. persönliche Ordner (ähnlich E-Mail) anlegen können. Diese sollen vom jeweiligen Benutzer eigenhändig erstellt/verschoben/bearbeitet/gelöscht werden können. Abgesehen natürlich von 3 System Ordnern (Posteingang, Postausgang, Papierkorb).
Mein Ziel ist es, dass alle vorhandenen Ordner in einem dynamisch erweiterbaren TreeView dargestellt werden. Allerdings habe ich so meine Probleme damit
Meine Datenbankstruktur sieht folgendermaßen aus:
Code:
CREATE TABLE IF NOT EXISTS `user_messages_folder` ( `id` int(11) NOT NULL, `user` int(11) NOT NULL, `name` varchar(50) NOT NULL, `parent_id` int(11) NOT NULL ) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;
PHP Code:
function dynamic_db_reader($ms, $params, $sqlStmt){
// Initialise some empty arrays
$fields = array();
$results = array();
mysqli_set_charset($ms, 'utf8');
if ($stmt = $ms->prepare($sqlStmt)) {
// Bind params
if (!empty($params)) {
$types = '';
foreach($params as $param) {
// Set param type
if (is_string($param)) {
$types .= 's'; // strings
} else if (is_int($param)) {
$types .= 'i'; // integer
} else if (is_float($param)) {
$types .= 'd'; // double
} else {
$types .= 'b'; // default: blob and unknown types
}
}
$bind_names[] = $types;
for ($i=0; $i<count($params);$i++) {
$bind_name = 'bind' . $i;
$$bind_name = $params[$i];
$bind_names[] = &$$bind_name;
}
call_user_func_array(array($stmt,'bind_param'),$bind_names);
} else {
return NULL;
}
// execute query
$stmt->execute();
// Get metadata for field names
$meta = $stmt->result_metadata();
// Dynamically create an array to bind the results
while ($field = $meta->fetch_field()) {
$var = $field->name;
$$var = null;
$fields[$var] = &$$var;
}
// Bind Results
call_user_func_array(array($stmt,'bind_result'),$fields);
// Fetch Results
$i = 0;
while ($stmt->fetch()) {
$results[$i] = array();
foreach($fields as $k => $v) {
$results[$i][$k] = $v;
}
$i++;
}
// close statement
$stmt->close();
if(sizeof($results) > 0){
return $results;
} else {
return NULL;
}
} else {
return NULL;
}
}
Meine Aktuelle Klasse sieht so aus:
PHP Code:
<?php
class obj_postoffice_navigation {
private $db;
private $usr;
private $rawentries = array();
function __construct($ms, $user){
$this->db = $ms;
$this->usr = $user;
}
function get_children($parent_id) {
return dynamic_db_reader($this->db, array($this->usr->getInfos()['id'], $parent_id), "SELECT * FROM `user_messages_folder` WHERE (`user` = -1 OR `user` = ?) AND `parent_id` = ?");
}
function has_children($node_id){
return (sizeof($this->get_children($node_id)) != 0);
}
function addNode($arr, $node){
if ($this->has_children($node['id'])){
$node['children'] = $this->get_children($node['id']);
array_push($arr, $node);
} else {
array_push($arr, $node);
}
return $arr;
}
function get_menu() {
$all = dynamic_db_reader($this->db, array($this->usr->getInfos()['id']), "SELECT * FROM `user_messages_folder` WHERE `user` = -1 OR `user` = ?");
$temp = array();
for ($i = 0; $i < sizeof($all); $i++){
$entry = $all[$i];
$temp = $this->addNode($temp, $entry);
}
return $all;
}
function build_html(array $menu) {
$str = '';
foreach ($menu as $id => $item) {
if (!isset($item['children'])){
$str .= ("<li>" . $item['name'] . "</li>");
} else {
$str .= $this->build_html($item['children']);
}
}
return ("<ul>" . $str . "</ul>");
}
function build_catalog() {
$menu = $this->get_menu();
echo($this->build_html($menu));
}
}
?>
Kann mir dabei jemand helfen? Bin nicht der beste wenn es um solche Rekursionen geht.. :/
Vielen Dank im Voraus!
Gruß, Cyntho
Comment