automatisch einen Parameter an jeden Link anhängen
Andreas
- programmiertechnik
Hallo!
Ich überlege gerade, wie man über eine ganze Webseite an jeden Link automatisch einen Parameter, z.B. sprache=DE anhängen kann? Es gibt ja viele größere Seiten, die sowas machen, und ich kann mir nicht vorstellen, das sowas schon beim Schreiben der Seite manuell gemacht wird.
Also im Prinzip genau sowas, was PHP mit PHPSESSID macht, wenn TRANS-SID eingeschaltet ist, und keine Cookies verwendet werden.
Hab nur keien Ahnung, wo ich überhaupt danach suchen soll, PHP, was mir da am besten geeignet für vorkommt, da die Seiten eh geparst werden, da kenn ich keine Möglichkeit für sowas(außer das in die Session zu screiben, aber das will ich bewußt nicht).
Irgendein Apache Modul? Aber die verändern ja nicht die Ausgabe des Dokumentes selbst, oder? Meißt doch nur den Header, nur das reicht ja nicht!
Außerdem weiß ich nicht, wie man das dann auf eine andere Sprache umschalten kann, also den Parameter über-/um-schreiben.
Und ist ja immer ein Unterschied ob erster oder zweiter Parameter, wegen '?' bzw. '&'!
Jemand ne Idee?
Viele Grüße
Andreas
Halihallo Andreas ;)
Ich überlege gerade, wie man über eine ganze Webseite an jeden Link automatisch einen Parameter, z.B. sprache=DE anhängen kann? Es gibt ja viele größere Seiten, die sowas machen, und ich kann mir nicht vorstellen, das sowas schon beim Schreiben der Seite manuell gemacht wird.
Für dieses Problem ist mir keine Automatisierung bekannt (leider).
Ich hab nur folgenden Vorschlag:
Die Generierung von URL einer Funktion zu überlassen (dann musst du lieder _jeden_ Link durch diese Funktion ersetzen). Diese Funktion macht dann nix anderes, als der übergebenen URL die Daten anzuhängen. Die Daten übergiebst du mit einem assoziativen Array (Hash). Da du sprache => 'DE' nicht jedesmal übergeben willst, kannst du diese in einem "Default-Hash" einmal pro Programmaufruf setzen und die Funktion wird dir diese dann jedesmal automatisch an die URL hängen.
zur Funktionsweise:
set_default( 'sprache' => 'DE' );
generate_url( '/cgi-bin/hello.pl', 'hello'=>'world', 'text'=>'msg' );
generiert dir dann folgende URL:
/cgi-bin/hello.pl?hello=world&text=msg&sprache=DE
Viele Grüsse
Philipp
Hi Philipp!
Das das ganze so geht ist mir klar, aber gerade das wollte ich verhindern. Da greife ich lieber auf ne Session-Lösung zurück, auchg wenn ich das sonst nicht brauche. Interessiert mich nur, ob das bei dynamischen Seiten da nicht doch eine andere Möglichkeit gibt.
Für Michael scheint das ganze ein "Klacks" zu sein, bin schon ganz gespannt wie man das "ganz einfach" macht:
http://forum.de.selfhtml.org/?m=83789&t=14809
Grüße
Andreas
Moin!
Das das ganze so geht ist mir klar, aber gerade das wollte ich verhindern. Da greife ich lieber auf ne Session-Lösung zurück, auchg wenn ich das sonst nicht brauche. Interessiert mich nur, ob das bei dynamischen Seiten da nicht doch eine andere Möglichkeit gibt.
mod_rewrite könnte helfen.
Wenn du die Sprache in den Dateipfad verfrachtest (üblicherweise ja eigentlich kein Problem, Links auf einer deutschen Seite gehen üblicherweise auf deutsche Seiten - und nur die Links zur Sprachumschaltung gehen auf fremdsprachige Seiten), dann kannst du den Pfad zur Ressource auseinanderpflücken und vollkommen neu zusammensetzen.
Beispielsweise:
http://www.server.tld/de/der_echte/pfad_zur/seite.php
wird umgesetzt zu
http://www.server.tld/der_echte/pfad_zur/seite.php?sprache=de
Und dein PHP-Skript wertet entsprechend aus und setzt möglicherweise entsprechende Links. Relative Links sind natürlich am günstigsten, und der Sprung zu einer anderssprachigen Seite dürfte auch kein Thema sein.
Ich finde übrigens mod_rewrite eine sehr elegante Lösung für dein Problem - das ist genau dafür da, einer URL, also im Prinzip einer sehr virtuellen Ressource, eine reale Herkunft auf dem Server zuzuordnen. Das kann es durchaus auch verschleiernd wirken, du könntest also beispielsweise .html-Dateien verlinken, aber in Wirklichkeit eben PHP-Skripte einsetzen, ohne daß irgendwer das sieht oder sehen kann.
- Sven Rautenberg
Hallo!
mod_rewrite könnte helfen.
Der Gendanke war mir auch schon gekommen, aber das hat ja nix mit dynamischen Seiten zu tun, womit Michael seine Lösung verknüpft hatte, oder? Außerdem wird hier ja kein Paramterer angehängt, wie gesagt, sowas wie die PHPSESSID. Gibt es dafür gar keine Möglichkeit?
Wenn du die Sprache in den Dateipfad verfrachtest (üblicherweise ja eigentlich kein Problem, Links auf einer deutschen Seite gehen üblicherweise auf deutsche Seiten - und nur die Links zur Sprachumschaltung gehen auf fremdsprachige Seiten), dann kannst du den Pfad zur Ressource auseinanderpflücken und vollkommen neu zusammensetzen.
Beispielsweise:
http://www.server.tld/de/der_echte/pfad_zur/seite.php
wird umgesetzt zu
http://www.server.tld/der_echte/pfad_zur/seite.php?sprache=de
Problem hierbei: Wenn ich jetzt in der Datei
http://www.server.tld/der_echte/pfad_zur/seite.php
ein Bild verlinke, relativ zu
http://www.server.tld/images/hallo.gif, dann wäre das wohl: ../../images/hallo.gif.
Das ist ja schön, aber die Datei wird nicht gefunden, wenn ein /de/ dazwischensteht. Dagegen könnte ich ja nur absolute Links nehmen, was auch Nachteile hat. Wie würde man das denn am elegantesten umgehen? Oder ich mache ein Verzeichnis auch auf der richtigen Seite mit
http://www.server.tld/SPRACHE/der_echte/pfad_zur/seite.php
^^^^^^^^
und das kann ich dann auch umschreiben in /de/, doof ist nur, das das ja in jedem Link berücksichtigt werden muß! Dann müßte ich tatsächlich alle Links umschreiben, damit die auf das Verzeichnis /de/ verweisen, oder auf /en/... aber irgendwie ist das nicht optimal.
Und dein PHP-Skript wertet entsprechend aus und setzt möglicherweise entsprechende Links. Relative Links sind natürlich am günstigsten, und der Sprung zu einer anderssprachigen Seite dürfte auch kein Thema sein.
Wie gesagt ist das mit den relativen Links auch so eine Sache, Sprache müßte ja in jedem Link stehen, sonst funktioniert es nicht, absolut ist dasselbe Problem!
Ich finde übrigens mod_rewrite eine sehr elegante Lösung für dein Problem - das ist genau dafür da, einer URL, also im Prinzip einer sehr virtuellen Ressource, eine reale Herkunft auf dem Server zuzuordnen. Das kann es durchaus auch verschleiernd wirken, du könntest also beispielsweise .html-Dateien verlinken, aber in Wirklichkeit eben PHP-Skripte einsetzen, ohne daß irgendwer das sieht oder sehen kann.
Ja, da gibt es viele interessante Sachen, kenne mich leider noch nicht wirklich damit aus. Aber gibt es kein Apache-Modul, womit Seiten (vor allem die Links darin) verändert werden können?
Grüße
Andreas
- Sven Rautenberg
Hi,
mod_rewrite könnte helfen.
Der Gendanke war mir auch schon gekommen, aber das hat ja nix mit
dynamischen Seiten zu tun, womit Michael seine Lösung verknüpft
hatte, oder?
es gibt nicht immer nur eine Lösung. mod_rewrite dürfte genau das
sein, was für die vorliegende Problemstellung geeignet ist.
Problem hierbei: Wenn ich jetzt in der Datei
http://www.server.tld/der_echte/pfad_zur/seite.php
ein Bild verlinke, relativ zu
http://www.server.tld/images/hallo.gif, dann wäre das wohl:
../../images/hallo.gif.
Das ist ja schön, aber die Datei wird nicht gefunden, wenn ein /de/
dazwischensteht. Dagegen könnte ich ja nur absolute Links nehmen,
was auch Nachteile hat. Wie würde man das denn am elegantesten
umgehen?
So, daß es funktioniert. ;-)
Im Ernst: Dein Beispiel ist ein Fall, wo Du mit relativen Links
_immer_ Probleme bekommen wirst.
Wer sagt Dir denn, daß Dein bisher in Ebene 2 liegendes Verzeichnis
nicht pltzlich nach Ebene 3 verschoben wird?
Relative Links sind nur innerhalb von inhaltlich zusammengehörigen
Bäumen sinnvoll, die (ziemlich sicher) nicht auseinander gerissen
werden.
Oder ich mache ein Verzeichnis auch auf der richtigen Seite mit
http://www.server.tld/SPRACHE/der_echte/pfad_zur/seite.php
^^^^^^^^
und das kann ich dann auch umschreiben in /de/, doof ist nur, das
das ja in jedem Link berücksichtigt werden muß!
Nicht, wenn alle Links, die umgeschrieben werden _sollen_, relative
Links sind. Dann mußt Du einfach gar nichts tun - nachdem der erste
Link erfolgreich umgeschrieben wurde, passen alle folgenden von allein.
Wie gesagt ist das mit den relativen Links auch so eine Sache,
Sprache müßte ja in jedem Link stehen,
Nein - in keinem.
Das ist ja genau der Trick: Die Sprache ist eine Verzeichnisebene
_außerhalb_ dessen, wo Du relative Links verwenden darfst.
Ja, da gibt es viele interessante Sachen, kenne mich leider noch
nicht wirklich damit aus. Aber gibt es kein Apache-Modul, womit
Seiten (vor allem die Links darin) verändert werden können?
Sicher - mod_includes ist ein solches. Du meintest aber "wo ich
bestimmen kann, wie der Inhalt verändert wird" - und die Antwort
darauf würde wahrscheinlich "schreib Dir selbst eines" lauten.
Weil Du aber keine Module auf normalen Webspace-Angeboten instal-
lieren darfst, hatte ich die Einbindung eines Handlers, der Deine
Aufgabe auch lösen würde, erwähnt und gzip_cnc als Beispiel dafür
genannt.
Viele Grüße
<img src="http://www.schroepl.net/projekte/gzip_cnc/gzip_cnc.gif" border=0 alt=""> Michael
Hallo!
es gibt nicht immer nur eine Lösung. mod_rewrite dürfte genau das
sein, was für die vorliegende Problemstellung geeignet ist.
Ja das stimmt wohl!
Nicht, wenn alle Links, die umgeschrieben werden _sollen_, relative
Links sind. Dann mußt Du einfach gar nichts tun - nachdem der erste
Link erfolgreich umgeschrieben wurde, passen alle folgenden von allein.
Ja, so sollte man das machen. Habe etwas falsch gedacht. Werde das mal probieren. Danke Dir. Vielleicht dann doch lieber die Links dynamisch erstellen, mal schaun.
Grüße
Andreas