CMS und Mod-Rewrite

Wie wir alle wissen (sollten) ändert mod_rewrite keine Links im Script. Damit auch die Links auf Deiner Page auf die neuen "Rewrited URLs" zeigen bedarf es der Anpassung im Code. Fragen und Probleme rund um's Coding werden hier diskutiert.

Moderator: Super-Mod

CMS und Mod-Rewrite

Beitragvon morsche » 28.02.2006 12:59

morsche,

ich bin mir nicht ganz sicher, ob das jetzt die richtige Kategorie ist, also möge ein Admin meinen Thread ggf. verschieben.
Ich programmiere gerade ein CMS mit suchmaschinenfreundlichen URLs. Klappt alles soweit. Alle Seiten liegen in der Datenbank und werden mittels ID und Titel in der URL übergeben. Es gibt also keine HTML Dateien, die auf dem Server liegen, sondern es wird alles aus der DB gezogen. In einer ersten Tabelle habe ich sozusagen die Menüstruktur gespeichert. Jeder Menüpunkt ist entweder ein Modul oder ein Textelement. Textelemente sowie Module liegen wiederum in gesonderten Tabellen, wobei die Modultabelle nur den Namen, Beschreibung die statische URL des Modulscriptes auf dem Server beinhaltet. So können dann auch die Module mittels einer schönen, suchmaschinenfreundlichen URL aufgerufen werden. Jetzt stehe ich nur vor der Frage, wie ich es mache, wenn man von so einem Modul, z.B. eine Produktübersicht zu einem nächsten Modul, z.B. einer Produktdetailseite, wechseln will. Es ist nicht zwangsläufig der Fall, dass das zweite Modul auch in der Datenbank gespeichert ist, da ich z.B. nicht will, dass man es über das CMS-Admin-Tool anderswo noch verwenden kann, sondern es nur von Scripten aufrufbar sein soll. Es wäre jedoch auch kein Problem alle möglichen Modul-Scripte in die DB einzutragen. Nur dann hat ja jedes Modul eine eindeutige URL, die von der ID in der Datenbanktabelle abhängig ist und diese muss ich ja in meinem Modulscript verwenden, wenn ich z.B. von der Produktübersicht zur Produktdetailseite gelangen will.
Meine Frage ist nun, wie mache ich das. Wie verlinke ich z.B. von einer Produktübersichtsseite auf die Detailsseite? Sollte die Detailseite in die DB eingetragen werden und über die ihr zugewiesene ID angesprochen werden? Oder sollte ich das Script direkt aufrufen?
Ich möchte nämlich die Module in anderen CMS wiederverwenden und dann ich dann in den Modulscripten Links verwende, die von der aktuellen DB-Stuktur abhängig sind, müsste ich diese jedes Mal ändern und das kann es ja nicht sein...

Wenn ihr mir ein paar Tipps oder Anregungen geben könntet, wäre ich sehr verbunden. Es ist mein erstes CMS mit mod-rewrite und ich möchte es gleich richtig machen.

Danke und Grüße!
morsche
.
.
 
Beiträge: 8
Registriert: 28.02.2006 12:46

Beitragvon Bob » 28.02.2006 16:22

Wie verlinke ich z.B. von einer Produktübersichtsseite auf die Detailsseite?
z.B. /produkt-detail-123456.html

Sollte die Detailseite in die DB eingetragen werden und über die ihr zugewiesene ID angesprochen werden?
Alles andere, was die Datensätze nicht anhand einer ID identifizert (sondern z.B. Überschrift, Titel etc.) wäre nicht nur teils fehleranfällig, sondern mitunter auch komplizierter (-> /produkt-detail-cd-rohlinge-tdk-50er-spindel.html).


wie ich es mache, wenn man von so einem Modul, z.B. eine Produktübersicht zu einem nächsten Modul, z.B. einer Produktdetailseite, wechseln will. Es ist nicht zwangsläufig der Fall, dass das zweite Modul auch in der Datenbank gespeichert ist, da ich z.B. nicht will, dass man es über das CMS-Admin-Tool anderswo noch verwenden kann, sondern es nur von Scripten aufrufbar sein soll.
Ich würde den Aufruf an eine zentrale Handlingdatei übergeben (index.php), die dann anhand der übergebenen Parameter (produkt-detail) die entspr. andere PHP-Datei includiert bzw. das weitere PHP-Processing veranlasst. So wird das wohl bei den meisten Content Management Systemen gehandhabt.

Natürlich kannst du auch gleich eine Moduldatei direkt (statt der index.php) ansteuern, jedoch müsstest du dort dann wohl immer Funktionen wiederholen/includen, die sonst die index.php zentral steuern würde. Das ist aber natürlich alles davon abhängig, wie du das ganze programmiert hast (z.B. objektorientiert oder nicht).

Grüße
Robert
Bob
Moderator
Moderator
 
Beiträge: 5044
Registriert: 01.10.2004 13:10

Beitragvon morsche » 28.02.2006 18:08

Eine zentrale index.php habe ich sowieso schon. Diese enthält das Grundgerüst vom Layout und includiert alle notwendigen Seitenelemente, wie auch den Contentbereich, wo ich meine Module anzeigen möchte. Mir stellt sich nun eben die Frage, ob ich die Module mittels der URL direkt includiere oder den Umweg über eine DB-Tabelle gehe. Denn ich möchte im Verwaltungsbereich auch die Möglichkeit bieten, einzelne Module manuell an freiwählbaren Stellen in der Navigation zu implementieren (man kann für jeden Menü- bzw. Untermenüeintrag ein Text- bzw. Modulelement auswählen. Jedes Textelment und jedes Modul hat jeweils eine ID, die in der Datenbank für den jeweiligen Menüeintrag gespeichert wird. ) Wenn ich nun irgendwo einen Link setze, verwende ich die ID um die entsprechende Seite anzuzeigen - egal ob Modul oder Text. In der Datenbank steht ja, was sich hinter der ID verbirgt. Und wenn im Backend neue Seiten erstellt werden, wird für diese Seiten der Link ausgegeben, der zu dieser Seite verweist, damit dieser an anderer Stelle eingesetzt und verwendet werden kann. Nur möchte ich das bei den Modulen natürlich nicht so machen. Da möchte ich flexibel bleiben. Da kann ich nicht die ID eintragen, hinter der das aufzurufende Modul in diesem CMS gespeichert ist. Denn in einem anderen CMS hat das gleiche Modul wieder eine ganz andere ID.
Ich habe es mir jetzt so überlegt, in dem Modul eine Funktion vorzuschalten, die alle notwendigen Links bereitstellt. Und zwar werden dafür alle Module, die in der Modultabelle eingetragen sind ausgelesen und Ihr Dateiname mit der ID assoziert. Im Modul selbst verwende ich dann in der vorgeschalteten Funktion den Dateinamen und erhalte die ID vom aktuellen CMS. Mir ist nämlich wichtig, dass die ich nicht z.B. in der Navigation einen Link habe, der den Warenkorb öffnet und das über einen Link, der aus dem Backend herrührt und CMS-spezifisch ist und dann einen weiteren Link, der aus einen Modul kommt (z.B. der Produktübersicht) und auch in den Warenkorb verweist (also auf exakt die gleiche Seite), jedoch der Link einen anderen Namen hat. So hätte ich (Warenkorb mag ein schelchtes Beispiel sein) nämlich zweimal exakt die gleiche Seite, die jedoch über unterschiedliche Links (einmal den Link vom CMS mit der ID der Seite bzw. der Kategorie und einmal den Link aus dem Modul heraus) erreichbar ist -> und das hat zur Folge, dass Google keine der beiden Seiten wg. duplicate content indexiert.
Mit dieser Methode müssen nur die Dateinamen bei jedem CMS gleich bleiben...

Was hälst du / halt ihr von dieser Variante?

Gruß und Danke!
morsche
.
.
 
Beiträge: 8
Registriert: 28.02.2006 12:46

Beitragvon Bob » 28.02.2006 18:39

ob ich die Module mittels der URL direkt includiere
Nein, ehr nicht. Du müsstest dann die eingehenden Daten wieder auf Plausibilität prüfen, damit da keine Sicherheitslücken entstehen etc., wenn du den Dateinamen in die URL packst.

Denn in einem anderen CMS hat das gleiche Modul wieder eine ganz andere ID.
Warum verwendest du keine eindeutigen module identifier? Sei es nun als Text detailmodule oder eine nummerische ID 1030, die dann fest dem Modul zugewiesen wird 8und sich nicht von CMS zu CMS ändert.

jedoch der Link einen anderen Namen hat.
Genau das darf/sollte nicht passieren: eine Seite - zwei unterschiedliche Links.

und das hat zur Folge, dass Google keine der beiden Seiten wg. duplicate content indexiert.
i.d.R. sollte eine der beiden im Filter landen, also im Hauptindex nicht auftauchen.
Bob
Moderator
Moderator
 
Beiträge: 5044
Registriert: 01.10.2004 13:10

Beitragvon morsche » 28.02.2006 19:07

Eindeutige IDs für die Module sind auch denkbar, aber ich glaube auf jeden Fall einen Umweg über die Haupttabelle machen zu müssen, in der die IDs aus der Navigation mit den Text- oder Modulinhalten verknüpft sind, um zum einen ein einheitliches Erscheinungsbild in der URL als auch keine unterschiedlichen URLs für die gleiche Seite zu bekommen, oder was meinst du?

Zur Zeit habe ich es so (nochmal etwas anschaulicher):

Tabelle content:
- ID
- Name
- modulID (=> Tabelle contentModule)
- textID (=> Tabelle contentText)
- contentType (text, modul oder mixed)
- ... (hier kommen dann noch Angaben für die Navigationsstruktur etc.)

Tabelle contentModule
- ID
- Name
- Beschreibung
- URL (Pfad zur Moduldatei)
- ...

Tabelle contentText
- ID
- Titel (h1)
- Untertitel (h2)
- Text
- ...

Und ich möchte alle Seiten nur über die ID aus der content-Tabelle aufrufen. Auch aus den Module heraus. Möchte aber im Backend auch die Möglichkeit geben Module auszuwählen für bestimmte Navi-Elemente. Wenn z.B. in einer Rubrik als neuen Unterpunkt noch "Warenkorb" haben möchte, kann man das entsprechende Modul aus der contentModule-Tabelle auswählen.

In der URL tauchen immer die ID und der Name aus der content Tabelle auf. Falls einzelne Module weitere, kurze Paramter verlangen kommen die noch in die .html (mod-rewrite) URL mit rein. Z.B. die News haben als weiteren Parameter noch die Artikel-ID. Aber bei Kontaktformular o.ä. hänge ich die Paramter hinten mit POST oder ggf. GET an. Eine Artikeldetailseite könnte dann einen Link wie folgt haben: Artikel-Details.11.23456.html (wobei 23456 die Artikelnummer und 11 die ID der Kategorie Artikel-Details ist, der wiederum ein entsprechendes Modul hinterlegt ist).

Ist das so gängig oder können sich daraus auch wieder Probleme ergeben?
morsche
.
.
 
Beiträge: 8
Registriert: 28.02.2006 12:46

Beitragvon morsche » 02.03.2006 12:36

vielleicht nochmal ein kurzes Statement? Das wäre sehr freundlich.

Danke!
morsche
.
.
 
Beiträge: 8
Registriert: 28.02.2006 12:46

Beitragvon Bob » 03.03.2006 23:54

Haupttabelle machen zu müssen, in der die IDs aus der Navigation mit den Text- oder Modulinhalten verknüpft sind,
Wenn der Aufbau so ist, ja. Irgendwie musst du ja verknüpfen. Du hast jetzt noch eine Navigationstabelle?

Ich kann bei Gelegenheit noch mal eine alte Tabellenstruktur hervorkramen, nur ist so etwas immer nur schwer vergleichbar.

Artikel-Details.11.23456.html (wobei 23456 die Artikelnummer und 11 die ID der Kategorie Artikel-Details ist, der wiederum ein entsprechendes Modul hinterlegt ist).
Ja, genau, siehe z.B. vom Konzept her bei Vignette (wird u.a. von Spiegel online eingesetzt).

Und ich möchte alle Seiten nur über die ID aus der content-Tabelle aufrufen
Das ist die Seite, genau. Die hatt dann wiederrum Unterelemente? Normal müsste im URL-Aufruf aber aich die Content-ID enthalten sein, oder nicht?
Bob
Moderator
Moderator
 
Beiträge: 5044
Registriert: 01.10.2004 13:10


Zurück zu Programmierung & Scriptanpassung für mod_rewrite

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste

cron