Seite 1 von 1

Sortierung von Kategorien

Verfasst: 06.04.2006 13:18
von mgutt
Wenn ich etwas sortiert haben möchte (Artikel, Beiträge, Bilder etc.), dann kann ich sie Kategorien zuweisen.

Nun habe ich mir schon was geschrieben womit ich Kategorien anlegen kann.

Weiterhin habe ich ein Feld angelegt, damit ich die Kategorie einer "Hauptkategorie" zuweisen kann. Aber wie bekomme ich da eine Reihenfolge rein? Ich könnte zwar bei der Ausgabe alphabetisch sortieren, aber das will ich nicht unbedingt.

Wie kann ich das mit der Sortierung hinkriegen? In phpBB werden anscheinend zufällige Zahlen für die Reihenfolge der Foren generiert... :-?

Die Kategoriestruktur habe ich so gewählt:

Code: Alles auswählen

Id   Name                    Reihenfolge Hauptkategorie
8  Würstchen                      0              7 
7   Fleisch                       0              0
Bei der Ausgabe werde ich dann als Hauptkategorie alle die erkennen, wenn Sie im Feld eine 0 haben.

Eine Unterkategorie wird dann entsprechend der Hautpkategorie ID zugewiesen (so die Planung ;) )

Verfasst: 06.04.2006 15:25
von Spezial
Das würde mich auch mal interessieren wie man Inhalte einer MySQL-Tabelle sortieren kann, oder wie phpBB das macht... ^^

Verfasst: 06.04.2006 16:05
von mgutt
Spezial hat geschrieben:Das würde mich auch mal interessieren wie man Inhalte einer MySQL-Tabelle sortieren kann, oder wie phpBB das macht... ^^
naja sortieren kannst du ja mit "ORDER BY id ASC" z.b. um nach id absteigend zu sortieren. mir geht es aber um eine eigene sortierungsmöglichkeit.

gruß

Verfasst: 06.04.2006 18:26
von S2B
Lass doch einfach mal von MySQL nach dem Reihenfolge-Feld sortieren und pack beim Auslesen die entsprechenden "Subkategorien" in die Kategorien:

Code: Alles auswählen

$kategorien = array();
while ($row = mysql_fetch_assoc($result))
{
  if ($row['Hauptkategorie'] == 0)
  {
    $kategorien[$row['Id']] = $row;
    $kategorien[$row['Id']]['sub'] = array();
  }
  else
  {
    $kategorien[$row['Hauptkategorie']]['sub'][] = $row;
  }
}

Verfasst: 06.04.2006 19:54
von Dennis63
Das kommende phpBB3 sortiert so:

Es gibt in der Datenbank dafür drei Spalten:

- "Parent_ID" - für die Übergeordnete Kategorie
- "left_id" - Bestimmt die vorherige Kategorie
- "right_id" - Nur Platzhalter, wichtig im ACP.

Das ist dann so aufgebaut, daß jede Zeile mit der "Parent_id" ihrer Übergeordneten Kategorie zugeordnet ist. Also ein Forum hat in Parent_id immer die ID der jeweiligen Kategorie.

Und jetzt wirds Kompliziert mit left_id und right_id...

Nehmen wir an, wir haben eine Kategorie mit zwei Foren da drinne:

- Die erste Kategorie bekommt bei Left_ID eine 1 - Weils halt die erste ist.
- Sollte ein Unterforum existieren, wird mit diesem Weitergemacht.
- Das 1. Forum bekommt die Left_id eine 2.
- Da kein weiteres Unterforum existiert, kommt die 3 bei "right-id" rein.
- Das nächte Forum bekommt jetzt die 4 auf left-ID
- Da kein weiteres Unterforum existiert, kommt die 5 bei "right-id" rein.
- Jetzt existiert auch kein weiteres Unterforum mehr für die Kategorie. Also bekommt die bei right_id eine 6.

Die Zahl muss immer fortlaufend sein, es darf nichts doppelt vorkommen und keine Zahl ausgelassen werden.

Das ganze kann so weitergeführt werden. Nachher muss man das ganze nur mit ORDER BY left_id sortieren und hat die Reihenfolge. Und dann stimmt auch das parent_Id automatsich.

Die right_id ist nur im Admin-Panel interessant. Möchte ich nämlich ein neues Forum zur Kategorie 1 anlegen, sehe ich in right_id die 6. Also erhöhe ich erst mal alles, was in Left_Id 7 oder größer ist um zwei. (7 und 8 sind somit frei).
Dann bekommt das neue Forum die Left_id 6, right_id 7 und die right_id der Kategorie wird auf 8 gesetzt.

Auch wenn ich die Reihenfolge ändern möchte ist die Right-ID gut. Möchte ich die Kategorie mit der ID1 mit dit der Kategorie mit der ID 7 vertauschen, sehe ich über die left_id und right_id welche Unterforen ich gleich mit ändern muss. Für die Kategorie 1 wären das jetzt 1 bis 8.

Das ganze war jetzt sehr trocken, aber ich denke wer DB-Zugriff zu einem phpBB3 hat, wird es nachvollziehen können.


Grüße
Dennis

Verfasst: 06.04.2006 20:02
von chriss713

Verfasst: 06.04.2006 20:08
von Spezial
mgutt hat geschrieben:naja sortieren kannst du ja mit "ORDER BY id ASC" z.b. um nach id absteigend zu sortieren. mir geht es aber um eine eigene sortierungsmöglichkeit.
das mein ich nicht. ich meine das, wo du z.B. auch im acp, die kategorien nach oben und unten verschieben kannst ;)

Verfasst: 06.04.2006 20:11
von Dennis63
Ich hatte das "Abbildung 7.3: Baumdarstellung im Nested Set Modell" in Chriss' Modell hatte ich beschrieben... ;)

Grüße
Dennis

Verfasst: 07.04.2006 00:36
von mgutt
Dennis Böge hat geschrieben:Ich hatte das "Abbildung 7.3: Baumdarstellung im Nested Set Modell" in Chriss' Modell hatte ich beschrieben... ;)

Grüße
Dennis
Das ist nicht ohne. Werde mir das mal in der Alpha/Beta von Olympus anschauen.

Verfasst: 07.04.2006 10:53
von Leuchte
Spezial hat geschrieben:Das würde mich auch mal interessieren wie man Inhalte einer MySQL-Tabelle sortieren kann, oder wie phpBB das macht... ^^
phpBB vergibt beispielsweise bei Foren eine Zahl, angefangen bei 10 und immer + 10 bei weiteren Foren.

Code: Alles auswählen

forum_id | forum_order
1 | 10
2 | 20
3 | 30
Wird Forum Nr. 2 nach oben geschoben, passiert über einen Link (admin_forums.php; Zeile ~864 ) folgendes:
Bei forum_order werden 15 subtrahiert (bei "nach unten" 15 addiert). Damit sieht die Tabelle nun so aus:

Code: Alles auswählen

forum_id | forum_order
1 | 10
2 | 5
3 | 30
Anschliessend werden die Foren über die Funktion renumber_order neu angeordnet.
Dort werden alle Foren, absteigend nach forum_order (und somit Forum Nr. 2 in unserem Fall als erstes) ausgelesen.
In dieser Reihenfolge wird forum_order aktualisiert, angefangen mit 10 und + 10 bei jedem weiterem Forum

Code: Alles auswählen

forum_id | forum_order
2 | 10
1 | 20
3 | 30
Genauso läuft es mit der Anordnung der Kategorien ab