Sie befinden sich hier im Forenarchiv von phpforum.de wenn Sie direkt ins Forum möchten, klicken Sie bitte hier. Zur Startseite kommen Sie hier.

Ich brauche ein php tree view wie in windows explorer

Hallo ihr lieben PHP Codierer
ich habe ein großes Problem, ich brauche ein Script, welches mir einen Verzeichnisbaum erzeugt, welches man ausklappen kann, wie im Windows explorer. Es gibt ja viele Java Lösungen, vielleicht weiß einer von euch eine PHP Lösung:
ich habe folgendes Problem, ich habe 5000 Ordner und möchte sich als Sitemap darstellen. Bis jetzt werden mir aber nur alle angezeigt, quasi alle 5000 auf einen Schlag, da wird die Seite riesig. ich brauche es im Zuge zur Fertigstellung meiner Diplomarbeit.
Folgenden Code habe ich bereits:

Code:                   In Zwischenablage kopieren (nur IE)
1">

Vielen Dank
Hier gehts zum Orginal Eintrag "Ich brauche ein php tree view wie in windows explorer" im Forum

Antworten

Diplomarbeit... Ich auch ;)
Ich wüsste da was für Javascript, heißt omentree.


2.

Moin, brauche sowas auch für meine Diplomarbeit.

Habs aber (zunächst widerwillig) mit Java versucht.

Siehe hier:

http://rheinbreitbach.net/js-menue/

Das läßt sich ganz gut anpassen. Wenn du was mit PHP machst, muss die Seite beim Aufklappen des Baumes AUF JEDEN FALL neu geladen werden. Mit JS ist das nicht mehr nötig.

EDIT: Alles Diplomanden hier, wa? ;-)


3.

wenn die zu zeigende struktur in einer db hinterlegt ist, würde ich euch nested-sets vorschlagen...

guckst du hier

ps : /me ist auch diplomand, aber nur noch ca. 10 tage :D


4.

@progressive: würde ich auch.

tutorial gibts hier

Aber ich denke, dass er das eh nicht braucht für sein Projekt.


5.

Verrückte Aktion ;-) Das könnte mir helfen...nur muss ich ja die Daten aus meiner Datenbank auslesen und so darstellen. Was meint ihr, geht das?


6.

http://www.phpxplorer.de/phpXplorer/webIndex.php <<-- sowas?


7.

@ combie : das beruht aber auch wieder auf javascript für den baum...

@ antonn : wenn du eh schon alles in der db hast, müsste es gehen...voraussetzung ist bei nested sets, dass ein element seinen vorgänger und nachfolger kennt...daraus ergibt sich ja die struktur...


8.

@ combie - genau das wollte ich, wie vom www.phpxplorer.de
das kann auch ruhig java sein, ich hab ja oben den code gepostet, vielleicht könnt ihr mir helfen, wenn ihr das mal überfliegt, welche Lösung java oder nested-sets?

ich führe hier ein intranetbezogenes Dokumentensystem ein, OWL - Knowledgebase , Open-Source. Alles wunderbar...nur die haben ne Sitemap wo alle Ordner auf einmal angezeigt werden, ich will sie aber via splitfunktion, so das der User selber aussuchen kann welchen ordner er aufklappen soll.

Scheiß Thema für ne Diplomarbeit, bin echt am verzweifeln. Ich studiere Technische Dokumentation und habe leider nur wenig Kenntnisse im PHP. Sorry also für meine grünen Ohren.
Vielen Dank.


9.

Zitat:
antonn postete
welche Lösung java oder nested-sets?
hängt davon ab, was du genau anzeigen willst...

anzeige von realen ordnern im dateisystem, dann die java-phpexplorer-methode...ich hab mir das ding net genau angeschaut, aber da wird wohl das wirkliche system dateimässig durchforstet

wenn du inhalte einer db anzeigen lassen willst, dann wäre nested-sets die lösung...dazu muss aber die db eine bestimmte struktur aufweisen...


10.

Ich würds an deiner Stelle dann bei Java belassen. Es ist nicht die Frage: Java ODER Nested Sets, denn das eine hat mit dem anderen nix zu tun. Nested Sets hat nichts mit dem Ausklappen zu tun. Es ist ne Variante, ne Baumstruktur in ner Datenbank abzubilden (in Relationen).

Und die Baumstruktur, sprich die Ordner sind bei dir ja eh schon vorhanden. Ich nehme an, dass du keine Funktionen zum Bearbeiten des Baumes (wie z.B. verschieben von Ordnern, löschen, etc) brauchst. Das hast du bestimmt schon alles da.

Für deine Zwecke solltest du dir das Javaskript anschauen und ggf. anpassen. Die ist nur für das Ausklappen und darstellen des Baumes gedacht - also das was du suchst.


11.

@mat 81Genau, also ich lasse mir von dem System (OWL) eine Ordnerstruktur erstellen, diese werden in eine Datenbank eingetragen (folders) - owl_folders_table. Dort werden diese Verzeichnisse indiziert, das heißt...in der SQL Tabelle stehen
id,name,parent,description,groupid,creatorid etc. Das hat was mit der Rechtevergabe zu tun.
Z.B. Ein Mitarbeiter der Gruppe X ist im System eingeloggt, dann sieht er in der Sitemap auch nur die Ordner, wo er Berechtigung hat...alles klar...nur zeigt er mir alle Ordner auf einmal. Unklar. Müsste das trotzdem mit Java gehen? Weil mit PHP ist undenkbar oder?


12.

Du musst nur die Ordnerstruktur gescheit (also so wie du es schon hast - komplett mit unterordnern) auslesen und diese Daten gescheit in die o.g. Javaklasse einbauen.

Ich hab z.B. meinen Baum als NestedSets (aber mit mehreren Wurzeln ;-) ) in ner DB gespeichert, mit PHP ausgelesen und die o.g. Javaklasse mit diesen Daten gefüllt. Du mußt also "nur" noch letzteres tun. Hört sich aber leichter an, als es ist. Am besten lädtst du dir die o.g. (langsam reichts mir mit o.g. *lol*) Klasse mit runter und guckst dir den Beispielquellcode an.


13.

Hey danke...mit o.g meinst du deinen ersten Post oder was soll ich runterladen? Sorry bin geistig heut nicht mehr so fit.


14.

Zitat:
antonn postete
Hey danke...mit o.g meinst du deinen ersten Post oder was soll ich runterladen? Sorry bin geistig heut nicht mehr so fit.
Jepp ;-)


15.

Kannst du mir erklären wie ich da ran gehen muss???Wo kann ich sagen, wo ich den rootordner eingeben muss, damit er mit das dann darstellt???


16.

Hier mal ein Auszug aus dem Code

Code:                   In Zwischenablage kopieren (nur IE)
2">

Hoffe das hilft. Kann leider auch nicht so detailiert Auskunft geben, da ich selbst den Kopf (ähnlich wie du gerade) voll habe. Viel Glück


17.

Wie tief ist die Bildung in Deutschland gesunken, wenn Kandidaten die Problemstellung für ein Diplom von einem Forum lösen lassen wollen... grausam!


18.

Zitat:
Rana postete
Wie tief ist die Bildung in Deutschland gesunken, wenn Kandidaten die Problemstellung für ein Diplom von einem Forum lösen lassen wollen... grausam!
Wie tief ist die Hilfsbereitschaft in Deutschland gesunken, wenn Kandidaten solch destruktive Beiträge ablassen, die niemanden auch nur ansatzweise was nützen?

Meinste er möchte, dass wir sein ganzes Diplom schreiben? Wenn ich auf ein für mich neues Thema losgelassen werde, such ich mir allen Rat den ich bekommen kann. Schonmal daran gedacht???

Besserwisser wie du können nichts anderes, als mit ihrem Wissen anzugeben. Such dir lieber ne Freundin!


19.

Zitat:
Such dir lieber ne Freundin!
Ich habe gerade meine Frau gefragt - die ist dagegen! Sonst Danke für den Tipp!

P.S.: Hilft Dir das dann beim Diplomschreiben? Verstehe ich ehrlich nicht - meine Frau übrigens auch nicht.


20.

Was meinst du? In Foren nach Tips suchen? Wieso nicht?! Bis jetzt bin ich damit gut gefahren. Für die wissenschaftliche Ausarbeitung kann man ja auch noch andere Quellen abgrasen. Aber für die Arbeit selbst hilft ein Forum schon ungemein.

Deinen Kommentar hättest du dir trotzdem klemmen können. Ein Forum ist da, um sich auszutauschen und Wissen zu teilen. Ein Forum ist nicht dazu da, andere zu denunzieren oder zu beleidigen!

Und jetzt bitte Back2Topic. Auf weitere Kommentare deinerseits, die nichts mit dem Topic zu tun haben, werde ich nicht weiter eingehen.


21.

@Mat81 Vielen Dank für deine Hilfe, ich werde mich gleich daran setzten und es hoffentlich hinbekommen.
P.S. Vielen Dank für die Verteidigung ;-)

@Rana Ich habe bereits erwähnt, das mein Studieninhalt und mein Diplomthema wenig mit Software-Programmierung zu tun haben. Mir liegt es fern, ein PHP, JAVA, PERL, C++ Studium neben meinen eigenen Studieninhalten abzuhalten.
Gerade im Bereichen mit Open-Source Software ist ein Gedankenaustausch in Foren dringend erforderlich. Aus Erfahrungen von anderen Mitstreitern lassen sich die besten Rückschlüsse über gewisse Sachverhalte gewinnen. Die meisten grundlegenden Probleme werden in Fachliteratur nicht erkannt bzw. nicht genannt.

Zitat:
Wie tief ist die Bildung in Deutschland gesunken, wenn Kandidaten die Problemstellung für ein Diplom von einem Forum lösen lassen wollen... grausam!

Wie schlimm ist dann erst die Fachliteratur, die auf komplexe Thematiken keine Antwort weiß? Das Thema und die Problemstellung meiner Diplomarbeit ist ein ganz anderes. Was macht es für einen Unterschied, ob ich mich mit einem Software-Entwickler am Telefon oder im Forum unterhalte???
[color="skyblue"]null[/color] [color="skyblue"]null[/color] [color="skyblue"]null[/color]


22.

Nun, am Telefon wird Dir ein Software-Entwickler sagen, dass er Dir eine Rechnung stellen wird ;)

Ansonsten meine ich: 5000 Einträge sind ja nun nicht wirklich viel, "nested sets" in eine DB zu schreiben ist für den Zweck IMHO viel zu aufwändig. Also wenn das nicht schon jetzt der Fall ist, vielleicht besser die Finger davon lassen, hält nur unnötig auf.

Und: Java ist nicht Javascript. Allerdings bin ich der Meinung, dass das Problem mit einem Java-Applet, das je nach Bedarf Teile des Baums nachladen kann, am besten gelöst werden würde.

Wie ist denn eigentlich das Thema der Diplomarbeit :)?


23.

In dem Buch PHP5/MySql4 Studienausgabe von Matthias Kannengiesser Franzis Verlag ISBN 3-7723-7005-5
ist so ein Script beschrieben kostet 25 Euro


24.

Zitat:
Rana postete
Zitat:
Such dir lieber ne Freundin!
Ich habe gerade meine Frau gefragt - die ist dagegen! Sonst Danke für den Tipp!

P.S.: Hilft Dir das dann beim Diplomschreiben? Verstehe ich ehrlich nicht - meine Frau übrigens auch nicht.
*gröhl*


25.

So ich habe jetzt folgenden Code in Java-Script - da ich mich aber nicht so gut auskenne, kann mir jemand sagen, wie ich das mit den Datenbankeintragen (siehe Script oben) verbinden kann? Oder wo kann ich den Rootordner als Quelle angeben? Vielen Dank für jede Hilfe...mein Diplomthema heißt "Einführung einer intranetbezogenem Dokumentenverwaltung" Bin eigentlich technischer Redaktuer und kein Softwareprogrammierer, wie Ihr. Bitte habt ein wenig Verständnis. Vielen Dank.

// Arrays for nodes and icons
var nodes = new Array();;
var openNodes = new Array();
var icons = new Array(6);

// Loads all icons that are used in the tree
function preloadIcons() {
icons[0] = new Image();
icons[0].src = "img/plus.gif";
icons[1] = new Image();
icons[1].src = "img/plusbottom.gif";
icons[2] = new Image();
icons[2].src = "img/minus.gif";
icons[3] = new Image();
icons[3].src = "img/minusbottom.gif";
icons[4] = new Image();
icons[4].src = "img/folder.gif";
icons[5] = new Image();
icons[5].src = "img/folderopen.gif";
}
// Create the tree
function createTree(arrName, startNode, openNode) {
nodes = arrName;
if (nodes.length > 0) {
preloadIcons();
if (startNode == null) startNode = 0;
if (openNode != 0 || openNode != null) setOpenNodes(openNode);

if (startNode !=0) {
var nodeValues = nodes[getArrayId(startNode)].split("|");
document.write("<a href=\"" + nodeValues[3] + "\" onmouseover=\"window.status='" + nodeValues[2] + "';return true;\" onmouseout=\"window.status=' ';return true;\"><img src=\"img/folderopen.gif\" align=\"absbottom\" alt=\"\" />" + nodeValues[2] + "</a><br />");
} else document.write("<img src=\"img/base.gif\" align=\"absbottom\" alt=\"\" />Website<br />");

var recursedNodes = new Array();
addNode(startNode, recursedNodes);
}
}
// Returns the position of a node in the array
function getArrayId(node) {
for (i=0; i<nodes.length; i++) {
var nodeValues = nodes[i].split("|");
if (nodeValues[0]==node) return i;
}
}
// Puts in array nodes that will be open
function setOpenNodes(openNode) {
for (i=0; i<nodes.length; i++) {
var nodeValues = nodes[i].split("|");
if (nodeValues[0]==openNode) {
openNodes.push(nodeValues[0]);
setOpenNodes(nodeValues[1]);
}
}
}
// Checks if a node is open
function isNodeOpen(node) {
for (i=0; i<openNodes.length; i++)
if (openNodes[i]==node) return true;
return false;
}
// Checks if a node has any children
function hasChildNode(parentNode) {
for (i=0; i< nodes.length; i++) {
var nodeValues = nodes[i].split("|");
if (nodeValues[1] == parentNode) return true;
}
return false;
}
// Checks if a node is the last sibling
function lastSibling (node, parentNode) {
var lastChild = 0;
for (i=0; i< nodes.length; i++) {
var nodeValues = nodes[i].split("|");
if (nodeValues[1] == parentNode)
lastChild = nodeValues[0];
}
if (lastChild==node) return true;
return false;
}
// Adds a new node to the tree
function addNode(parentNode, recursedNodes) {
for (var i = 0; i < nodes.length; i++) {

var nodeValues = nodes[i].split("|");
if (nodeValues[1] == parentNode) {

var ls = lastSibling(nodeValues[0], nodeValues[1]);
var hcn = hasChildNode(nodeValues[0]);
var ino = isNodeOpen(nodeValues[0]);

// Write out line & empty icons
for (g=0; g<recursedNodes.length; g++) {
if (recursedNodes[g] == 1) document.write("<img src=\"img/line.gif\" align=\"absbottom\" alt=\"\" />");
else document.write("<img src=\"img/empty.gif\" align=\"absbottom\" alt=\"\" />");
}

// put in array line & empty icons
if (ls) recursedNodes.push(0);
else recursedNodes.push(1);

// Write out join icons
if (hcn) {
if (ls) {
document.write("<a href=\"javascript: oc(" + nodeValues[0] + ", 1);\"><img id=\"join" + nodeValues[0] + "\" src=\"img/");
if (ino) document.write("minus");
else document.write("plus");
document.write("bottom.gif\" align=\"absbottom\" alt=\"Open/Close node\" /></a>");
} else {
document.write("<a href=\"javascript: oc(" + nodeValues[0] + ", 0);\"><img id=\"join" + nodeValues[0] + "\" src=\"img/");
if (ino) document.write("minus");
else document.write("plus");
document.write(".gif\" align=\"absbottom\" alt=\"Open/Close node\" /></a>");
}
} else {
if (ls) document.write("<img src=\"img/joinbottom.gif\" align=\"absbottom\" alt=\"\" />");
else document.write("<img src=\"img/join.gif\" align=\"absbottom\" alt=\"\" />");
}

// Start link
document.write("<a href=\"" + nodeValues[3] + "\" onmouseover=\"window.status='" + nodeValues[2] + "';return true;\" onmouseout=\"window.status=' ';return true;\">");

// Write out folder & page icons
if (hcn) {
document.write("<img id=\"icon" + nodeValues[0] + "\" src=\"img/folder")
if (ino) document.write("open");
document.write(".gif\" align=\"absbottom\" alt=\"Folder\" />");
} else document.write("<img id=\"icon" + nodeValues[0] + "\" src=\"img/page.gif\" align=\"absbottom\" alt=\"Page\" />");

// Write out node name
document.write(nodeValues[2]);

// End link
document.write("</a><br />");

// If node has children write out divs and go deeper
if (hcn) {
document.write("<div id=\"div" + nodeValues[0] + "\"");
if (!ino) document.write(" style=\"display: none;\"");
document.write(">");
addNode(nodeValues[0], recursedNodes);
document.write("</div>");
}

// remove last line or empty icon
recursedNodes.pop();
}
}
}
// Opens or closes a node
function oc(node, bottom) {
var theDiv = document.getElementById("div" + node);
var theJoin = document.getElementById("join" + node);
var theIcon = document.getElementById("icon" + node);

if (theDiv.style.display == 'none') {
if (bottom==1) theJoin.src = icons[3].src;
else theJoin.src = icons[2].src;
theIcon.src = icons[5].src;
theDiv.style.display = '';
} else {
if (bottom==1) theJoin.src = icons[1].src;
else theJoin.src = icons[0].src;
theIcon.src = icons[4].src;
theDiv.style.display = 'none';
}
}
// Push and pop not implemented in IE
if(!Array.prototype.push) {
function array_push() {
for(var i=0;i<arguments.length;i++)
this[this.length]=arguments[i];
return this.length;
}
Array.prototype.push = array_push;
}
if(!Array.prototype.pop) {
function array_pop(){
lastElement = this[this.length-1];
this.length = Math.max(this.length-1,0);
return lastElement;
}
Array.prototype.pop = array_pop;
}


26.

Ich glaube kaumn, dass jemand Lust hat, sich das anzusehen, das ist ja viel zu lang und unübersichtlich.

Im übrigen solltest Du etwas vorsichtig sein, weil man Diplomarbeiten i.A "selbständig und ohne fremde Hilfe" anfertigen muss, wenn Dir jemand draufkommt, dass Du Dir hier (anscheinend wichtige) Teile machen lässt, könnte das Diplom weg sein.


27.

Hey ich habe es hinbekommen - ich benutze nun das phplayersmenu als script und lasse mir ein treemenu erzeugen.
Nur klappt der Baum sofort aus mit alles Unterverzeichnissen.
Ich mochte aber,dass mur der Root ordner zu sehen ist und die anderen erst wenn ich auf das jeweilige Plus drücke.
Kennt jemand die Problematik und kann mir helfen????

Code:                   In Zwischenablage kopieren (nur IE)
3">




Hier gehts zum Orginal Eintrag "Ich brauche ein php tree view wie in windows explorer" im Forum
 
phpforum.de | Impressum | Handy Bundles