+ Antworten
Seite 8 von 8 ErsteErste ... 5 6 7 8
Ergebnis 106 bis 120 von 120

Thema: [Workshop] Nested Sets

  1. #106
    TP-Junior flames macht alles soweit korrekt
    Registriert seit
    Oct 2008
    Beiträge
    9
    oh man, ich komme einfach nicht weiter.
    wer kennt sich mit ext js aus? versuche eine kombination aus drag&drop tree und tabellenansicht und tabellen editierung zu machen.
    ich werd mir erstmal paar ebooks zu dem thema einverleiben. kann also etwas dauern mit den ergebnissen.

  2. #107
    TP-Junior flames macht alles soweit korrekt
    Registriert seit
    Oct 2008
    Beiträge
    9
    so langsam fange ich an bei extjs durchzublicken, aber ohne hilfe komme ich nie weiter.
    hier http://apfelzeug.ath.cx/extjs/
    extjs columntree, columneditor, drag&drop, erstellen containernodes, erstellen von blattnodes.
    speichern geht noch nicht, da ich keine ajnung habe wie es funktioniert. ich lese mich grade in json ein. und es müssen wohl ein paar mehr parameter übergeben werden. ich glaube in extjs ist für drag&drop des tree zwei helper dabei, für nested sets und ajacency model (oder wie auch immer das heißt).
    wer kennt sich aus? macht mit, wird allen zum vorteil sein sowas mal zu implementieren.

  3. #108
    TP-Junior flames macht alles soweit korrekt
    Registriert seit
    Oct 2008
    Beiträge
    9
    ok, also das jscript bekommt von php nen json string, der nichts anderes ist als ein verschachteltes array (in diesem fall), der mit hilfe von json_encode serialisiert wurde.
    beim speichern wird die geänderte struktur wieder als verschachteltes array aufgebaut, in json string umgewandelt, und kann in php mit hilfe von json_decode in ein php erschachteltes array gewandelt werden.

    soweit sogut, jetzt - oh wie unerwartet, wo ich doch dachte die php seite wäre einfach - bleibt in php die wandlung des nested sets in verschachteltes arra und umgekehrt, abhängig davon ob gespeichert oder gelesen wird.

    mit etwas mühe bekomme ich das hin, und habe mir schon das nächste ziel gesetzt: richtiges ajax! es soll nicht alles am stück gespeichert werden, nach dem man alle änderungen gemacht hat, sondern bei jedem schritt im hintergrund. man verschiebt ein node, oila, ist schon in der datenbank

    edit: wichtiges am rande, jason_decode + json_encode steht erst ab php 5.2 zur verfügung, bei älteren php versionen sollte man auf json classen zurückgreifen (ich glaube ext js liegt nen json helper bei)

  4. #109
    TP-Newbie nestednoob macht alles soweit korrekt
    Registriert seit
    Dec 2008
    Beiträge
    3

    Ratlosigkeit

    Hallo zusammen,

    ich habe ein Problem bei dem ich nicht mehr weiter komme. Ich habe eine nested set Datenbank mit den werten id,name,wert,rtg,ltg .

    Ich habe dank des Tutorials nun verstanden wie ich Daten einfüge, lösche und auch verschieben kann. Was ich nun brauche ist aber leider ganz was anderes.

    Ich will von einer bestimmten Position aus den Baum nach unten durchgehen. Dabei soll jeder ast nacheinander nach unten hin geprüft werden ob ein bestimmter wert erfüllt ist. Jedesmal wenn der Wert erfüllt ist soll es einen db eintrag geben und bei dreimal pro ast aufhören und mit dem nächsten ast weitermachen bis alle äste durchsind.

    Ich kann nur leider keinen weg finden wie das gehen soll. Vielleicht habt Ihr ja einen guten Tipp für mich.

  5. #110
    TP-Junior flames macht alles soweit korrekt
    Registriert seit
    Oct 2008
    Beiträge
    9
    machs net komplizierter als es ist, es reicht wenn du dem db-select die id des knotens von dem aus du listen willst angibst, rest erledigt eigentlich sich von alleine

    ps: zu meinem obigen problem bin ich aus zeitlichen gründen leider noch nicht gekommen. das verschieben von kindern in andere altern, bzw in großeltern und so...

  6. #111
    TP-Newbie nestednoob macht alles soweit korrekt
    Registriert seit
    Dec 2008
    Beiträge
    3
    Ja das ist mir schon klar, aber ich bekomme immer einen Syntax Fehler:

    PHP-Code:
    $blaetter $db->query_array("SELECT group2.*,
                                         COUNT(*) AS level
                                  FROM $ncs_table AS group1,
                                       $ncs_table AS group2
                                  WHERE group2.id = '3' AND group2.lft BETWEEN group1.lft AND group1.rgt 
                                  GROUP BY group2.lft;"
    ); 
    So zeigt er mir jedesmal nur den mit der ID 3 an , aber den rest nicht mehr

    Muss gestehen das ich normal nur standart sql queries mache. Die Abfragen wie Sie hier gemacht sind verstehe ich noch nicht und kann Sie deswegen auch nicht ändern.
    Geändert von nestednoob (12.12.2008 um 02:38 Uhr)

  7. #112
    TP-Newbie nestednoob macht alles soweit korrekt
    Registriert seit
    Dec 2008
    Beiträge
    3
    ok, das Problem mit der ID habe ich gelöst...

    Man hätte einfach mal in php my admin den befehl vorgeben sollen und dann übernehmen

    Aber wo ich wirklich nicht mehr weiterkomme ist folgendes:

    Ich schaffe es jetzt mir von jeder beliebigen stelle aus die äste anzeigen zu lassen. Mit einem if befehl zeigt er mir auch nur alle an die den wert entsprechen. Aber wie bekomme ich es hin das pro Ast maximal 3 mal ausgegeben wird und danach mit dem nächsten weitermacht?

    Beispiel. root Ast ist 1 children sind 2-5 und die haben natürlich auch weitere äste. wenn bei children 2 jetzt 3 mal der wert gefunden wurde soll mit ast 3 weiter gemacht werden usw. Wenn der wert ja weniger als 3 mal vorkommt geht er ja eh weiter.

    Also das habe ich bis jetzt:

    PHP-Code:
    $blaetter $db->query_array("SELECT o . * , COUNT( p.id ) -1 AS
    LEVEL
    FROM $ncs_table AS n, $ncs_table AS p, $ncs_table AS o
    WHERE o.lft
    BETWEEN p.lft
    AND p.rgt
    AND o.lft
    BETWEEN n.lft
    AND n.rgt
    AND n.titel =1001
    GROUP BY o.lft
    ;"
    );
                                  
    if (
    $blaetter) {
        foreach(
    $blaetter as $blatt) {
            
    $space str_repeat ("         "$blatt["LEVEL"]);
            if (
    $blatt[wert] > 4999){
    echo
    "   <tr>
        <td nowrap=\"nowrap\">"
    .$space.$blatt['titel']."</td>
    </tr>"
    ;
    }else{
        continue;


  8. #113
    TP-Supporter Bruecksen hilft, wo's geht Bruecksen hilft, wo's geht Bruecksen hilft, wo's geht Avatar von Bruecksen
    Registriert seit
    Mar 2002
    Ort
    Stuttgart
    Beiträge
    370
    Hallo,
    schau dir mal Limit im zusammenhang mit selects an. Damit könnte es klappen.

    Von den beiden Argumenten gibt das erste den Versatz des ersten zurückzugebenden Datensatzes an, das zweite die maximale Anzahl zurückzugebender Datensätze. Der Versatz des ersten Datensatzes ist 0 (nicht 1):
    PHP-Code:
    SELECT o . * , COUNTp.id ) -AS 
    LEVEL 
    FROM $ncs_table 
    AS n$ncs_table AS p$ncs_table AS 
    WHERE o
    .lft 
    BETWEEN p
    .lft 
    AND p.rgt 
    AND o.lft 
    BETWEEN n
    .lft 
    AND n.rgt 
    AND n.titel =1001 
    GROUP BY o
    .lft
    LIMIT 3

    Hab das ganze nicht getestet. Daher kann sein das es in deinem Fall so nicht klappt. Sonst mach doch einfach einen $counter, den du beim betreten der IF bedingung erhöhst ($counter++) und die IF Bedingung wie folgt erweiterst:
    PHP-Code:
    if ($blatt[wert] > 4999 && $counter <= 3
    Viele Grüße
    Matthias

    Viele Grüße
    Matthias.
    http://www.bruecksen.de


  9. #114
    TP-Newbie Tobi_L macht alles soweit korrekt
    Registriert seit
    Jan 2009
    Beiträge
    1
    Hallo zusammen,

    ich habe diesen Workshop und die folgenden Ergänzungen mit großem Interesse gelesen und konnte soweit alles nachvollziehen. Dank an alle Beteiligten!

    Ich habe die Datenbank aus dem Workshop geladen, kann Blätter einfügen, verschieben und löschen.

    Die Ausgabe liefert mir folgendes Ergebnis:

    Code:
    Wurzel A
     -- Blatt AA
     -- -- Blatt AAA
     -- Blatt AB
     -- -- Blatt ABA
     -- -- Blatt ABB
     -- Blatt AC
     -- Blatt AD
     Wurzel B
     -- Blatt BA
     -- -- Blatt BAA
     -- Blatt BB 
     Wurzel C
    Nun bin ich auf der Suche nach einer SQL-Abfrage die mir die Baumstruktur nur bis zu einem definierten Blatt enfaltet ausgibt. Übergebe ich die ID des Blattes AA sollte die Ausgabe so aussehen:

    Code:
    Wurzel A
     -- Blatt AA
     -- -- Blatt AAA
     -- Blatt AB
     -- Blatt AC
     -- Blatt AD
     Wurzel B
     Wurzel C
    Übergebe ich die ID der Wurzel B sollte die Ausgabe so aussehen:

    Code:
    Wurzel A
     Wurzel B
     -- Blatt BA
     -- Blatt BB 
     Wurzel C
    Ist das allein über eine SQL-Abfrage möglich? Ist das zumindest innerhalb einer Wurzel über eine SQL-Abfrage möglich? Ansonsten gäbe es noch die Möglichkeit die Ausgabe auf PHP-Seite zu filtern. Im Workshop-Beispiel wird diese Aufgabe Client-Seitig von JavaScript gelöst, es sollte doch aber eine SQL- oder PHP-Seitige Lösung geben.

    Ich hoffe ihr habe ein paar Ideen oder Denkansätze für mich!

  10. #115
    TP-Newbie Heinzer macht alles soweit korrekt
    Registriert seit
    Apr 2009
    Beiträge
    1
    Hallo Forum!
    Ein sehr schönes dynamisches Menu, dass hier entstanden ist. Ich habe mich jetzt ein paar Tage damit beschäftigt und habe (wie schon vor mir Boris) gesehen, dass die Verschachtelung des Listen Menüs nicht stimmt. Irgend ein Browser wird da sicher mal Ärger machen. Ich habe etwas gebastelt, was eine saubere Verschachtelung erzeugt. Da ich aber eher der HTML-CSS-Mann bin, sieht meine Lösung auf der PHP-Seite nicht so sauber aus. Aber es funktioniert. Ich habe mir den ELSE-Zweig vorgeknöpft:
    Code:
    	}else{
    		// bei diesem teil darf ich mich fuer die hilfe von jan bedanken
    		$level = 1;
    		$tree.= "\n<ul id=\"NewTree\">\n";
    		while($row = mysql_fetch_array($result)) {
    
    			
    			if ($row['level'] > $level) 		$tree.= "\n<ul>\n";   // neuer level
    			else if ($row['level'] < $level) 	$tree.= str_repeat("\n</li>\n</ul>", $level-$row['level'])."</li>";
    			else if ($level > 1)				$tree.= "</li>\n";
    			
    			if ($row['lft'] == 1 && $row['rgt'] == 2 && $zaehler+1 < $count) $liclose = "</li>\n";
    			else $liclose = "";
    			$tree.= "<li class=\"li_level_".$row['level']."\"><a href=\"\" class=\"a_level_".$row['level']."\">".$row[2]."</a>".$liclose;
    			
    			if ($level < 1 && $row['level'] < 1 && $zaehler+1 < $count) $li = "</li>\n";
    			$tree.= $li;
    			$li = "";
    			if (($row['level'] == 1) && ($row['level'] < $level)&&($row['rgt'] < 2)) 		$tree.= "</li>\n";
    			$level = $row['level'];
    			$zaehler++; 
    		} // end while
    		$tree.= str_repeat("</li>\n</ul>\n", $level);
    	} // end if
    Vielleicht kann ja jemand damit was anfangen.

    Dann habe ich gemerkt, dass das löschen von Knoten ein Fehler in der "root_seq" erzeugt. Das führt dazu, dass die Reihenfolge in der "root_seq" durcheinander kommt und man nicht mehr sauber die Menüpunkte verschieben kann. Ich habe auf brutale Weise die SQL-Anweisung, in den IF- und ELSE-Zweigen, zum updaten der "root_seq" auskommentiert:
    Code:
    	$sql = "UPDATE node 
               SET root_seq = root_seq - 1 
               WHERE root_seq > ".$node[5]; 
          // $result = mysql_query($sql, connectDB());
    Das scheint zu funktionieren, aber testet lieber ich gebe keine 100%ige Garantie.


    Grüße und Danke für das Tutorial
    Heinz
    Geändert von Heinzer (08.04.2009 um 12:42 Uhr)

  11. #116
    TP-Newbie bufffuchs macht alles soweit korrekt
    Registriert seit
    Sep 2011
    Beiträge
    4
    hy, ich bin gerade hierauf gestossen und habe es mit viel interesse gelesen, nur habe ich auch das problem das ich nicht auf/zu klappen kann. ist immer offen. hat jemand ein zip datei da dir er anbieten könnte, weil irgendwie gehen alle download versuche ins lehre

  12. #117
    TP-Newbie bufffuchs macht alles soweit korrekt
    Registriert seit
    Sep 2011
    Beiträge
    4
    also ich habe nochmal geschaut, der ff macht probleme. im ie und safari lässt sich alles ein/ausklappen , nur halt ff macht nichts. und das nächste problem ist, alles ist bei laden der seite ausgeklappt. andersrum währe schöner. hat jemand eine idee BITTE
    Geändert von bufffuchs (17.09.2011 um 02:07 Uhr)

  13. #118
    TP-Newbie bufffuchs macht alles soweit korrekt
    Registriert seit
    Sep 2011
    Beiträge
    4
    ist hier keiner mehr unterwegs in dem forum

  14. #119
    TP-Senior Whiteflash macht alles soweit korrekt Avatar von Whiteflash
    Registriert seit
    May 2008
    Ort
    Wangen
    Beiträge
    122

    Nested Set: MySQL-Statement gesucht... Level

    Hallo!

    ...ist den niemand mehr im Forum...
    Doch, ich! Bin grade heute morgen auf das Tutorial gestoßen - leider etwas spät, habe mir bereits im Netz ein anderes Tut gesucht, und anhand dessen ein nested set für mein Menü gebaut ... Sorry, beim nächsten Mal schau ich natürlich zuerst wieder bei TP rein!

    Nun aber konkret zu meinem Problem: ein Menü gliedert sich ja immer in verschiedenen Ebenen (oder Levels). Was ich damit meine: jedes Element hat doch einen gewissen "Abstand" vom root. Wie kann ich den denn ermitteln? Zunächst für ein Element, eigentlich würde mich aber eher interessieren, alle Elemente eines bestimmten Levels auszulesen. Ich hab da auch schon gegoogelt und dann d'ran gebastelt, ausser Fehlermeldungen und falschen Daten kam bisher nix bei raus. Mein Ansatz ist im Moment - um überhaupt erst mal rauszukriegen, wie viele Levels mein Menü hat:
    PHP-Code:
    $result SQLAbfrageAlsArray('SELECT MAX (COUNT(*)-1) AS level,
            ((MIN(p.rgt)-n.rgt-(n.lft>1))/2) > 0 AS lower,
            (((n.lft-MAX(p.lft)>1))) AS upper
            FROM tb_menue AS n,
            tb_menue AS p
            WHERE n.lft BETWEEN p.lft AND p.rgt '
    ); 
    Das für dann in der mysql_error() zu folgender netten Meldung:
    FUNCTION DB*******.MAX does not exist.
    Ich peil ehrlich gesagt auch noch nicht mal die Arithmethik hinter der Abfrage. Stimmt die überhaupt?

    Ich hoffe auf eine gute Idee von euch... Danke,

    euer Whiteflash
    live long and prosper...

  15. #120
    TP-Newbie bufffuchs macht alles soweit korrekt
    Registriert seit
    Sep 2011
    Beiträge
    4
    da hier keiner mehr unterstützung leistet habe ich es mit nested_set von pear realisiert.

+ Antworten
Seite 8 von 8 ErsteErste ... 5 6 7 8

Ähnliche Themen

  1. [Workshop] Formmailer
    Von mike im Forum Workshops und Tutorials
    Antworten: 93
    Letzter Beitrag: 29.01.2009, 12:34
  2. [Workshop] Objektorientierte Programmierung in PHP
    Von Lars im Forum Workshops und Tutorials
    Antworten: 114
    Letzter Beitrag: 29.05.2007, 17:55
  3. Nested Sets und SQL-Querys
    Von martinR im Forum Traum-Dynamik
    Antworten: 0
    Letzter Beitrag: 17.11.2004, 11:15
  4. Nested Templates bei DW MX
    Von Haretürk im Forum Dreamweaver & andere Webeditoren
    Antworten: 3
    Letzter Beitrag: 19.01.2003, 22:29

Stichworte


Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51