mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Sa 25.02.2017 22:04 Benutzername: Passwort: Auto-Login

Thema: [PHP] Multilevel-Menü aus der Datenbank kreieren vom 30.03.2005


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> [PHP] Multilevel-Menü aus der Datenbank kreieren
Seite: Zurück  1, 2, 3, 4, 5, 6, 7, 8  Weiter
Autor Nachricht
Waschbequen
Account gelöscht


Ort: -

Verfasst Mi 30.03.2005 10:28
Titel

Antworten mit Zitat Zum Seitenanfang

Also für die Nicht-Rekursive-Lösung ist der Schinkenspicker verantwortlich, das ist nicht mein Bier. Meine ist es dann nämlich zumindest zum Teil, denn die Child-Parent-Beziehung würde ich von unten nach oben auflösen - rekursiv.
 
gtz

Dabei seit: 15.04.2002
Ort: -
Alter: 41
Geschlecht: Männlich
Verfasst Mi 30.03.2005 10:28
Titel

Antworten mit Zitat Zum Seitenanfang

bitte spezifizieren. grobe skizze reicht mir.
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Anzeige
Anzeige
Account gelöscht


Ort: -
Alter: -
Verfasst Mi 30.03.2005 10:33
Titel

Antworten mit Zitat Zum Seitenanfang

Zitat:
Also für die Nicht-Rekursive-Lösung ist der Schinkenspicker verantwortlich, das ist nicht mein Bier. Meine ist es dann nämlich zumindest zum Teil, denn die Child-Parent-Beziehung würde ich von unten nach oben auflösen - rekursiv.



lol *balla balla*

macht selbst das ist nicht gerade unkompliziert, ich beiß mir immer noch die zähne dran aus Grins mach ich wenn ich echt mal ne woche zeit hab... bäume lesen ist kein problem, aber die manipulation - teilbäume verschieben, löschen, einfügen, das ist find ich harter tobak...

http://www.klempert.de/php/nested_sets/demo/


Zuletzt bearbeitet von am Mi 30.03.2005 10:34, insgesamt 1-mal bearbeitet
 
Eistee
Administrator

Dabei seit: 31.10.2001
Ort: Grimma
Alter: 38
Geschlecht: Männlich
Verfasst Mi 30.03.2005 10:35
Titel

Antworten mit Zitat Zum Seitenanfang

Hm, wieso keine parent_id für jeden Eintrag nehmen, und die Ausgabelogik den Rest machen lassen? z.b. wenn parent_id = vorangegangene id -> einrücken, wenn id = active_id -> highlighten etc.

Mit ner guten tpl Engine müsste das recht einfach sein?
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Account gelöscht


Ort: -
Alter: -
Verfasst Mi 30.03.2005 10:39
Titel

Antworten mit Zitat Zum Seitenanfang

Dann brauchst du aber doch für einen Aufbau mehrere Queries... ODER du ließt den GANZEN Baum aus und generierst daraus. Geht auch. Kannste ja auch dann ein Javascript-Klappmenu draus machen oder so... so meinst du das?

Zuletzt bearbeitet von am Mi 30.03.2005 10:39, insgesamt 1-mal bearbeitet
 
Waschbequen
Account gelöscht


Ort: -

Verfasst Mi 30.03.2005 10:42
Titel

Antworten mit Zitat Zum Seitenanfang

Mal ganz extrem verkürzt in (C#):

Code:
public class navigation : System.Web.UI.UserControl
{

   #region Main-Navigation Standard

   private string MainNavi(int rubrikID, OleDbConnection oConn)
   {
   
      // Ältestes Elternteil holen ;-9

      string parent = totalParent(rbId, oConn);

      recIdReturn = "";
      string _childs = recIds(rbId, oConn);

      string [] childs = _childs.Split(new Char [] {','});
      int MaxCount = childs.Length-1;

      for(int i=0; i <= MaxCount; i++)
      {

         if(childs[i] != "")
         {
            sql = "SELECT ... WHERE parent = {" + childs[i] + "} ...";
         }
         else
         {
            sql = "SELECT ... WHERE parent = {" + parent + "} AND ...";
         }
         
         OleDbCommand cmd = new OleDbCommand(sql, oConn);
         OleDbDataReader reader = cmd.ExecuteReader();

         if(reader.HasRows == true)
         {
            while(reader.Read())
            {

               #region Schreibe Navigation
               // ...
               #endregion

               if(i != MaxCount && reader["id"].ToString().ToLower() == childs[i+1].ToString().ToLower())
               {
                  tmp.Append("|#REPLACE#ME#|");
               }

            }

         }

         if(i==0)
         {
            output = tmp.ToString();
         }
         else
         {
            output = output.Replace("|#REPLACE#ME#|",tmp.ToString());
         }

         reader.Close();
         cmd.Dispose();

      }

      return output;

   }

   /// <summary>
   /// String beinhaltet den Rückgabevalue der Methode recIds
   /// </summary>
   private string recIdReturn = "";

   /// <summary>
   /// Rekursive Funktion, die die ID's der Childs kommasepariert zurückliefert
   /// </summary>
   private string recIds(string rubrikID, OleDbConnection oConn)
   {
      string Parent = "";
      string Sql = "";

      try
      {
         Sql = "SELECT parent ... WHERE id = {" + rubrikID + "} ...;";
         OleDbCommand cmd = new OleDbCommand(Sql, oConn);
         Parent = cmd.ExecuteScalar().ToString();
         cmd.Dispose();
         if(Parent.ToLower().Trim() == Session["Language"].ToString().ToLower().Trim())
         {
            Parent = "";
         }
      }
      catch {}
      recIdReturn = Parent + "," + recIdReturn;
      if(Parent!="")
      {
         recIds(Parent, oConn);
      }
      return recIdReturn + rubrikID;      
   }
   
}
 
gtz

Dabei seit: 15.04.2002
Ort: -
Alter: 41
Geschlecht: Männlich
Verfasst Mi 30.03.2005 10:44
Titel

Antworten mit Zitat Zum Seitenanfang

XSchinkenX hat geschrieben:
Dann brauchst du aber doch für einen Aufbau mehrere Queries... ODER du ließt den GANZEN Baum aus und generierst daraus. Geht auch. Kannste ja auch dann ein Javascript-Klappmenu draus machen oder so... so meinst du das?


ja, das meinter. aber der algorithmus wird ja nich effizienter, nur weil der hypertext rpeprocessor ihn ausführt anstelle der datenbank.
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Account gelöscht


Ort: -
Alter: -
Verfasst Mi 30.03.2005 10:49
Titel

Antworten mit Zitat Zum Seitenanfang

weiß net.... waschi hat schon recht weil s auch ne frage der datenmenge ist. ABER: db-server und script können an zwei verschiedenen plätzen stehen, das macht die sache auch nicht schneller. außerdem sind manche datenbankschnittstellen - odbc - auch nicht die schnellsten...nur mal so.
 
 
Ähnliche Themen [PHP/MySQL] Datum aus Datenbank per PHP umwandeln
Bild Datenbank in PHP
PHP - Datenbank auswählen?
[PHP/MySQL] Datenbank auslesen.
[PHP] Verfallsdatum für Datenbank-Eintrag
Script in PHP für Bildupload in Datenbank
Neues Thema eröffnen   Neue Antwort erstellen Seite: Zurück  1, 2, 3, 4, 5, 6, 7, 8  Weiter
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.