Hallo zusammen,
ich habe hier eine etwas komplizierte Angelegenheit…
Es geht um die Erweiterung einer Website Navigation.
Momentan kann man die Navigation nur auf einen bestehenden Inhalt verlinken. Sprich man hat die Auswahl aus einem bestehenden Content einen Link zu bilden.
Dazu werden Infos aus zwei Tabellen geholt…
Einmal für die Anzeige des Namens, also das was der User als Link zu sehen bekommt, bestehend auf der Content Tabelle und den URL kommend aus der Navigationstabelle…
Die Erweiterung soll so aussehen, das man auch eigene Links dieser Navigation hinzufügen kann…
Der größte Teil der Umsetzung ist schon passiert, da gibt es keine besonderen Probleme.
Aber ich stoße trotzdem auf eins… Ich kann an der Stelle die Namensinfo nicht aus der Content Tabelle holen, weil es für diesen „extra“ Link keinen Content gibt. Ich habe jetzt also eine weitere Tabelle, welche eben diese Namen erfasst… Der URL dazu wird aber weiterhin in der Navigationtabelle eingetragen.
Mein Problem ist zur Zeit folgendes:
Die Namen für die Links kämen jetzt aus zwei Tabellen, einmal der Content und einmal der Extra Link Tabelle…
Die Schleife bzw. der SQL String, welcher läuft um im Administrationsbereich die verfügbaren Navigatiosnpunkte anzuzeigen müsste also seine Infos aus beiden Tabellen holen…
Zur Zeit sieht es so aus, der String aus der Contenttabelle den Namen holt.
Wenn jetzt aber ein Extralink existiert, muss er sich den Namen eben aus der Extralink Tabelle holen…
Die Frage ist, wie baue ich das auf…
Eventuell ist meine Denke aber hier auch falsch. Dann korrigiert mich bitte.
Das Problem ist, ich kann den Namen nicht in die Contenttabelle eintragen, weil sonst in der Bearbeitungsview für den Benutzer, welcher den Content bearbeitet eben ein leerer Inhalt wäre, welcher nur den Link zeigt…
Das würde Verwirrung stiften
Der SQL String sieht so aus:
SELECT
navigation.anzeige,
navigation.url,
content.contentname,
nav_extralnk.extralnk_name
FROM
navigation
INNER JOIN nav_content ON (navigation.id_navigation=nav_content.navigation_id)
INNER JOIN nav_content AS cnt ON (content.id_content=cnt.content_id)
INNER JOIN content ON (content.id_content=cnt.content_id)
LEFT JOIN nav_extralnk ON (nav_extralnk.id_extralnk=nav_content.extralnk_id)
WHERE
content.id_content=nav_content.content_id
OR
nav_extralnk.id_extralnk=nav_content.extralnk_id
AND
navigation.id_navigation=nav_content.navigation_id
AND
nav_content.bereich_id=".(int)$_GET[„bereich“]." ORDER BY navigation.anzeige
Das Ergebnis daraus ist folgendes:
+------------+---------------------------------+--------------+---------------+
| anzeige | url | contentname | extralnk\_name |
+------------+---------------------------------+--------------+---------------+
| 1 | content.php?bereich=1&content=1 | Infos | NULL |
| 2 | content.php?bereich=1&content=2 | Dies und Das | NULL |
| 3 | content.php?bereich=1&content=3 | Test | NULL |
| 4 | http://www.google.de | Infos | Test Eintrag |
| 4 | http://www.google.de | Dies und Das | Test Eintrag |
| 4 | http://www.google.de | Test | Test Eintrag |
+------------+---------------------------------+--------------+---------------+
Wie man sieht, von Anzeige 1 - 3 stimmt alles…
Aber ab 4 stimmts nicht mehr… Zum einen dürfte das Ergebnis mit Anzeige 4 nur einmal auftauchen und das Feld contentname müsste an der Stelle leer bzw. NULL sein. Er müsste hier den extralnk_name Name verwenden.
Die Tabelle nav_content, welche m:n Beziehungen auflöst, ist diese:
+---------------+------------+------------+-------------+
| navigation\_id | bereich\_id | content\_id | extralnk\_id |
+---------------+------------+------------+-------------+
| 128 | 1 | 1 | NULL |
| 127 | 1 | 2 | NULL |
| 132 | 1 | 3 | NULL |
| 135 | 1 | NULL | 3 |
+---------------+------------+------------+-------------+
Was mache ich hier falsch?
Danke für Rückantworten…