| | | | |
| | |
| Benutzer Registriert seit: 21.03.2006
Beiträge: 65
![]() | Hallo zusammen, meine erste Frage im Forum betrifft eine aktuelle Anwendung. Es handelt sich dabei um eine Web-Anwendung, welche aus vielen unterschiedlichen Modulen (news,galerie etc.) besteht und welche wie folgt funktionieren soll. module: - news - galerie - page - etc. Nun möchte ich den Aufruf dieser Module an beliebiger Stelle der Anwendung durch CleanUrls (ausgeschriebene URls ohne Parameter) per .htaccess mit mod_Rewrite lösen. Beispiel: Instanzen des Moduls "Galerie" sollen jeweils wie folgt aufgerufen werden: 1. www.domain.tld/galerie/ 2. www.domain.tld/produkt/galerie/ Dabei handelt es sich jeweils um Galerien mit unterschiedlichem Inhalt. Da die URl sehr unterschiedlich sein kann habe ich einige Schwierigkeiten bie der Festlegung eines Prinzips zu Aufschlüsselung der URl bzw. der Weitergabe der Parameter mit mod_rewrite. Im Grunde müssen folgende Patterns gleichzeitig erfasst, aber dennoch unterschieden werden. www.domain.tld/modul/ www.domain.tld/bereich/modul/ www.domain.tld/bereich/unterbereich/modul/ www.domain.tld/einfacheUrl/nochwas.html -> z.B. für Modul "page" www.domain.tld/einfacheUrl/nochwas/ -> z.B. für Modul "page" usw. Da die Module an beliebiger Stelle einsetzbar sein sollen und mal "bereich" oder "bereich/unterbereich" dem modulnamen vorranstehen bietet es sich an "bereich" oder "bereich/unterbereich" direkt per mod_rewrite als parameter für das Modul zu nutzen. Beispiel: www.domain.tld/kuchen/eistorte/galerie/ per mod_rewrite in http://www.domain.tld/index.php?modu...aram2=eistorte umwandeln. Andererseits kolliediert das mit anderen Modulen und URl-Strukturen für z.B. eine einfache Seite mittles Modul "page" mit der URl: http://www.domain.tld/produkte/kuche.../weichnachten/ Ich kann mir vorstellen die Bereiche der Seite (auch für navi) jetzt in der DB mit einem parameter für das jeweilige Modul zu versehen - bleibt die Frage ob ich nicht generell etwas auf dem Holzweg bin und es für den beliebigen Einsatz von Modulen in Verbindung mit CleanUrls nicht einen wesentlich bessseren Ansatz gibt. Für Tips, Anregungen und Links bin ich sehr dankbar ! ssm |
| |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
| | |
| Benutzer Registriert seit: 21.03.2006
Beiträge: 65
![]() | Hallo Basti und erstmal danke für deine guten Vorschläge. "Beliebig" heist einfach dass es urls wie (für modul "galerie") /galerie/ /unterseite/galerie/ /unterseite1/unterseite2/galerie/ geben soll und jeweils eine andere Galerie abgebildet wird. Dacht mir schon es ist am einfachsten einfach den ganzen query-string erstmal an php zu übergeben. Angenommen man hätte dann für /unterseite/unterseite/galerie/ einen string in der form ?param1=unterseite1¶m2=unterseite2¶m3=gale rie so könnte man ja einfach testen (module liegen einem verzeichnis) ob es für einen der Parameter ein Modul gibt und dies entsprechend aufrufen mit den Parametern: unterseite1 & unterseite2, so dass die richtige Galerie dargestellt wird. Nur bin ich mir noch nicht ganz im Klaren darüber ob ich am besten jedem Eintrag in der Galerie-DB ein Feld zu diesem Zweck zuweise. Man müsste ja theoretisch einen Galerie-Eintrag aus der DB mit den beiden Parametern "unterseite1" und "unterseite2" abgleichen können um die erwünschten Bilder zu erhalten. Und ich weiss noch nicht wie genau ich das anstellen soll, je nachdem wie viele Parameter der URL aufzulösen sind. Geht also vornehmlich ums Auseinandernehmen und Zuweisen der jeweiligen Parameter des query-strings - nur weiss ich noch nicht genau wie im Einzelfall |
| |
| | |
| Erfahrener Benutzer Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse: Fortgeschritten ![]() | Hi. Also, wie das einzelne Modul damit umgeht, kannst du ja von Modul zu Modul entscheiden. Wichtig ist doch, dass dieses mit seinen Parametern aufgurfen wird. Ich kann mir nicht vorstellen, dass hier eine zentrale Lösung Sinn macht. Zentral lösen musst du das nur, wenn eben mit den verschiedenen Parametern auch ausgedrückt wird, auf welchen "Seite" das Modul eingebunden wird - zumindest muss das Modul dann die Info zurückgeben, in welchem Sitemap-Knoten es eingebaut werden soll (wobei die Frage wäre, woher und vr allem warum das Modul die Sitemap und damit die Knoten kennen sollte). Aber es macht keinen Sinn hier zu spekulieren ohne die Anforderungen zu kennen. Basti |
| |
| | |
| Benutzer Registriert seit: 21.03.2006
Beiträge: 65
![]() | Vielleicht nochmal um die "Beliebigkeit" zu verdeutlichen ein Url-Tree: / --> Modul "index" /galerie/ --> Modul "galerie" mit param"" oder ohne (standard-galerie) /produkte/ --> modul "page" mit param "produkte" /produkte/kleidung/ --> modul "page mit param "kleidung" (und param produkte?) /produkte/kleidung/galerie/ --> modul "galerie" mit param "kleidung" /produkte/kleidung/galerie/jeans.html --> modul "galerie" mit param1 "kleidung" & param2 "jeans" /news/ --> modul news mit param "" (standard-news) /news/archive/ --> modul "news" mit param1 "" und param2 "archive" /textilindustrie/ --> modul "page" mit param "produkte" /textilindustrie/glossar/ --> modul "glossar" mit param "textilindustrie" /textilindustrie/glossar/formschnitt.html --> modul "glossar" mit param1 "textilindustrie" und param2 "formschnitt" In der DB werden neue Sektionen (z.B. "/neu/galerie/") bereits zwecks navigation abgelegt. Sinn machen könnte vielleicht ein weiteres DB-Feld mit der Modulart dieses neuen Bereichs........ |
| |
| | |
| Benutzer Registriert seit: 21.03.2006
Beiträge: 65
![]() | Vielleicht sowas wie ein table: Code: sections-table: id | name | url | module | parent_id | ---+------------+--------------------------------------+---------+-----------+ 15 | kleidung |/produkte/kleidung/galerie/ | galerie | 6 | |
| |
| | |
| Erfahrener Benutzer Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse: Fortgeschritten ![]() | Ich denke, das Problem ist dein Mix aus Seiten, Modulen und Parametern. Wenn deine Site auf Seiten aufgebaut ist, dann sollte die unterste Schicht sozusagen die Page darstellen. Die Frage ist jetzt, ob anhand des Request allein entscheiden werden kann, welche Page anzegezigt werden soll. Gibt es ein Modul, dessen Ausgabe in Abhängigkeit von den Benutzereingaben und dem Status der Anwendung mal an diesem Punkt in der Sitemap und mal an jenem erscheinen muss und, wenn ja, lässt sich das über Location-Header-Redirects lösen? Wenn nicht, dann macht es keinen Sinn die Info über die Seite in den Request zu packen, sondern diese müssen anhand der Rückgabewerte der Module dann definiert werden. Wenn du die Seite unabhängig vom Ausgang der Modul-Operationen definieren kannst, dann können sie direkt oder indirekt in den Request mit rein. Hier ist dann die Frage, ob du die Verortung der anzuzeigenden Seite in der Sitemap auch in der URL abbilden willst. Das bietet den Vorteil, dass du qausi nur eine Ebene eben der Sitemap hast und nicht nochmal abstrahieren musst, aber den Nachteil, dass sich die URLs ändern, wen du was in der Sitemap rumschiebst! Außerdem hast du vielleicht z.B. die Homepage als Root-Knoten in der Sitemap und müsstest hierfür eine Sonderregel einführen, um nicht bei jedem Request /home/products/cakes eben dieses /home mitschleifen zu müssen. Das ist in meinen Augen ziemlich unschön. Einmal natürlich, weil du für zerbrochene Links vor der Wahl stehst den Benutzer veralteter Links ins Leere laufen zu lassen oder für ihn (ggf. automatisiert) Redirects einzubauen. Aber auch für die interne Verlinkung macht das wenig Spaß, es sei denn, du arbeitst hier mit IDs, die die Ziele eindeutig referenzieren. Damit hast du aber schon die Abstraktionsschicht und kannst die Links glech von der Sitemap entkoppeln. Aber das hängt eben von den konkreten Anforderungen ab, was hier Sinn macht. Vermutlich reicht folgendes: Irgendeine beliebige Zeichenkette (/products/cake oder /kuchen oder php-news oder /news/php) ist in der Datenbank mit einem Platz in der Sitemap, einem aufzurufenden Modul und diesem zu übergebenden Parametern verknüpft. Der Front-Controller (oder was auch immer) kann nun im URL diese Request-ID von weiteren Parametern unterscheiden, liest das Modul und die "statischen" Parameter aus der DB, packt die übergebenen Parameter mit dran und übergibt an das Modul. Die Ausgaben packt es dann eben in den in der DB definierten Kontext. Da bliebe dann die Frage, woran die Request-ID von den Parametern unterschieden werden kann. Und da hast du egentlich nur die Möglichkeiten, dass sich die beiden Parts entweder äußerlich unterscheiden (Request-IDs beginnen immer mit enem Slash gefolgt von einem Großbuchstaben, Parameter beginnen immer mit einem Slash gefolgt von einem Zeichen != Großbuchstabe) oder du ein bestimmtes Trennzeichen definieren kannst (der erste Slash oder der zweite, oder zwei Unterstriche oder ein /_/, ...). Der Andere Weg, wäre den ganzen Pfad mit der Datenbank zu vergleichen und solange Stück für Stück von hinten abzuschneiden, bis du einen Treffer landest: SELECT module, method, args FROM actionmap WHERE id='/news/php/3' OR id='/news/php' OR id='/news' LIMIT 1 ORDER BY LENGTH(id) DESC Aber das ist vermutlich schwer, das konfliktfrei zu halten..! Basti |
| |
| | |||
| Benutzer Registriert seit: 21.03.2006
Beiträge: 65
![]() | Erneut vielen Dank Basti, habe eben nochmal weiter oben in deinem Posting gelesen und denke dass für meine URl-Konstellation die Erzeuging von Alias-Namen der beste Weg ist. Zitat:
Weiterhin bietet diese Herangehensweise die einfachste Strukturierung für Nutzer und Sumas. Anders wird eine beliebige Struktur wie: http://www.domain.com/werbetechnik/f...raun-gmbh.html modul=directories, category=folienhersteller, item=braun-gmbh wohl nicht einheitlich aufzulösen sein. Wie du bereits erwähnt hast mach folgendes in der Tat bei mir Sinn: Zitat:
Code: www.domain.com/werbetechnik/folien/hersteller/braun-gmbh.html Code: modul=directories, category=folienhersteller, item=braun-gmbh Code: Request-ID = "/werbetechnik/folien/hersteller/" und Parameter = braun-gmbh (Parameter für den letztendlichen Eintrag kommen immer nach / und enden mit ".html") Code: | id | name | parent_id | module | category | alias | +--------+------------------+-------------+-------------+-------------------+-----------------------------------+ | 5 | Folienhersteller | 3 | directory | folienhersteller | /werbetechnik/folien/hersteller/ | Dann kann ich ja in Ruhe den Parameter "braun-gmbh" an das Modul übergeben. Weiss noch nicht ganz genau ob das jetzt optimal ist - aber zumindest kann ichs mir theoretisch so vorstellen. Zumindes würde das auf die meisten meiner Module so anwendbar sein. | ||
| |
| | |
| Erfahrener Benutzer Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse: Fortgeschritten ![]() | Da seh ich spontan zwei Schwachstellen: Erstens kannst du so nur einen Parameter per URL übergeben, oder? Und damit würdest du wohl kaum hinkommen. Zweitens müsstest du für alle "statischen" Parameter ein DB-Feld einfügen. Ich würde hier eher ein Parameter-Array oder -Objekt serialisiert ablegen. Muss ja eh nicht durchsuchbar sein. Alternativ eine zweite Tabelle mit id, request_alias, key und value, wobei du hier value auch wieder auf den größten gemeinsamen Nenner bringen müsstest - also wohl auch nicht wirklich besser... Basti |
| |
| Themen-Optionen | |
| Thema bewerten | |
|
|
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Kleine Änderungen in meiner Website | ValusheII | Beitragsarchiv | 3 | 28.04.2008 08:32 |
| Captcha in Website einbauen | Dartgott | PHP Tipps 2008 | 9 | 23.04.2008 15:53 |
| Telefonschnittstelle für eine Website | madhatter | PHP-Fortgeschrittene | 5 | 28.03.2008 17:35 |
| Idee: Website mit uncrackbarem Serial | Broadcast | PHP Tipps 2007 | 13 | 23.02.2007 22:59 |
| komplette Website als Grafik speichern | PHP-Fortgeschrittene | 68 | 08.03.2006 21:29 | |
| [Erledigt] Mit Yahoo Mess. mit Usern auf Website ohne account chatten | PHP-Fortgeschrittene | 10 | 18.09.2005 22:02 | |
| eigene Fonts in Website einbinden? | ThaRider | HTML, Usability und Barrierefreiheit | 2 | 16.07.2005 16:16 |
| website macht auf localhost probleme | PHP Tipps 2005 | 8 | 14.04.2005 10:25 | |
| website lässt sich nicht öffnen | PHP Tipps 2005 | 2 | 18.02.2005 19:38 | |
| [Erledigt] spezielle schrift in der website | HTML, Usability und Barrierefreiheit | 23 | 12.12.2004 12:02 | |
| [Erledigt] schriften für website | HTML, Usability und Barrierefreiheit | 2 | 15.10.2004 09:57 | |
| Daten aus einer externen Website lesen via PHP | Locutus007 | PHP Tipps 2004 | 4 | 29.09.2004 17:20 |
| Browser und MSG Box | HTML, Usability und Barrierefreiheit | 4 | 17.08.2004 18:40 | |
| Begrüssung auf website | PHP Tipps 2004 | 2 | 25.07.2004 00:36 | |
| [Erledigt] Fehlermeldung auf der Website nach dem Veröffentlichen | PHP Tipps 2004 | 6 | 10.07.2004 15:03 | |
| Besucher kamen über folgende Suchanfragen bei Google auf diese Seite |
| wird mit der index.php verknüpft und übergibt dabei einen query-string mit dem parameter id, clean urls ohne mod_rewrite |

Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.