WB-Link umwandeln

msfrog

Hallo Manuela,
hm, da die Links von zwei verschiedenen Domains aufgerufen werden sollen, brauch ich einen absoluten Link. Ich hab RelURL mal an und mal abgeschaltet, aber die Domain bleibt immer drin. Ja, ich habs auch bei den Filtern aktiviert ;)

Danke für die lange Erklärung, ist mir bekannt. War nur verwundert, dass mit und ohne RelURL das gleiche rauskommt und dachte deshalb, dass da evtl. was anderes dahintersteckt...

Viele Grüße
Carsten

DarkViper

#7
Kurzfassung:
RelUrl verkürzt die internen Links, indem der Protokoll- und Domainanteil aus dem Link entfernt wird.

Laaange Erklärung:
Wenn man weiß, dass das Internet selbst gar keine Domainnamen zur Adressierung kennt, sondern nur IP-Adressen, wird es interessant.
Was passiert, wenn Du eine normale URL, also ein http://domain...  im Browser eingibst? Das Internet kann damit absolut nichts anfangen, denn es braucht zur Adressierung eine eindeutige IP-Adresse, also eine eine Zahl!
Die IP des WB-Servers ist die 81.169.212.225. Tatsächlich ist das nur eine für Menschen leichter lesbare, erinnerbare optische Darstellung der Zahl 1370084577 (nicht vergessen.. Computer arbeiten nur mit Zahlen, die aus 1 und 0 bestehen!).  Ruft also ein Browser den WB-Server auf, so verlangt er im Netz Daten von dem Gerät mit der Nummer 1370084577. Uh... ich hoffe es wird nicht zu kompliziert... ;)
Woher kennt der Browser jetzt diese Nummer? Er schaut einfach im Adressbuch nach. Das nennt sich "DynamicNameService". Er ruft also einen sogenannten DNS-Server an und fragt diesen nach der Adressnummer des Gerätes mit dem Namen "www.deinedomain.de". Erst wenn er diese Antwort erhalten hat, kann er dieses Gerät auffordern, ihm die gewünschte Datei zu senden. (für Schlaue: klar gibt es dazwischen noch so Dinge wie Caches und Proxies, die das ganze etwas beschleunigen, aber das führt zu weit. Es geht hier nur ums Grundprinzip!).

Zurück zu HTML und dessen Links. Normalerweise werden hier die vollständigen Adressen wie http://www.example.com/pages/start.php  ausgegeben.  Wird jedoch als Link nur /pages/start.php eingetragen, so nimmt der Browser an, dass dieser Link mit dem selben Protokoll zur selben Domain gehen soll, von der die aktuell angezeigte Seite geladen wurde. Schlau wie er ist, hat er sich diese Nummer natürlich gemerkt und braucht sie deshalb auch nicht extra neu von einem DNS-Server abfragen, sondern kann die gewünschte Datei direkt anfordern. Zeit gespart.
RelUrl nutzt genau dieses Verhalten der Browser aus und entfernt von allen Links, die zur eigenen Domain gehen den kompletten Serveranteil.

Vorteile:
  • siehe oben. Überflüssige DNS-Abfragen fallen weg.
  • In der Datenbank sind nur noch 'relative' Links gespeichert. Wird eine Website auf eine andere Domain verschoben, sind keinerlei Änderungen an den gespeicherten Links erforderlich, solange die Verzeichnisstruktur des Webspaces unverändert bleibt.
  • Es spielt keine Rolle, ob eine Seite mit http:// oder mit https:// aufgerufen wird. Links werden automatisch angepasst.
Das Verhalten lässt sich übrigens sehr einfach überprüfen:
A: Eine Seite ohne RelUrl ausgeben und den Quelltext der ausgegebenen Seite im Browser anschauen: Alle Links zur eigenen Seite sind vollständig (z.B. http://www.example.com/pages/start.php ). Auch wenn man auf der Seite mit der Maus auf einen Link geht, wird der vollständige Link angezeigt.
B: Eine Seite mit RelUrl ausgeben und den Quelltext der ausgegebenen Seite im Browser anschauen: Alle Links zur eigenen Seite sind verkürzt (z.B. /pages/start.php ). Wenn man jedoch auf der Seite mit der Maus auf einen Link geht, wird der vollständige Link angezeigt.

Viel Spaß beim testen,
Manuela
[url=http://www.youtube.com/watch?v=tmzDAz6ZvFQ]Der blaue Planet[/url] - er ist nicht unser Eigentum - wir haben ihn nur von unseren Nachkommen geliehen[br]
[i]"You have to take the men as they are... but you can not leave them like that !" :-P [/i]
[i]Das tägliche Stoßgebet: [b]Oh Herr, wirf Hirn vom Himmel ![/b][/i]

msfrog

Hallo Viper,
nochmal ne kurze Rückmeldung: Es funktioniert einwandfrei :) Danke nochmal!

Jetzt muss ich aber nochmal blöd fragen: Was genau macht der RelURL-Filter? Ich seh da jetzt nicht wirklich nen Unterschied ob mit oder ohne.

Viele Grüße
Carsten

msfrog

#5
Hallo Viper,
perfekt, exakt sowas hab ich gesucht. 1000 Dank dafür :)

DarkViper

#4
Sowas geht rein mit Bordmitteln von WB:

<?php
$sContent 
OutputFilterApi('WbLink'$sContent);
// allerdings würde ich evt. zusätzlich den RelUrl Filter benutzen. Damit wird der Link von der Domain unabhängig.
$sContent OutputFilterApi('WbLink|RelUrl'$sContent);

Eventuell einschalten muss man den/die Filter im BE natürlich auch.

( a bisserl was hatte ich mir schon dabei gedacht, als ich damals die Outputfilter umbaute ;) )
[url=http://www.youtube.com/watch?v=tmzDAz6ZvFQ]Der blaue Planet[/url] - er ist nicht unser Eigentum - wir haben ihn nur von unseren Nachkommen geliehen[br]
[i]"You have to take the men as they are... but you can not leave them like that !" :-P [/i]
[i]Das tägliche Stoßgebet: [b]Oh Herr, wirf Hirn vom Himmel ![/b][/i]

msfrog

Hallo Viper,
ja, genau das hab ich vor. Ich wollte vor dem Schreiben in die Datenbank auf [wblinkxx] prüfen und das dann entsprechend ersetzen. Ist eben die Frage, ob WB dazu was bereitstellt (der Code muss ja vorhanden sein, ist nur die Frage, ob ich ihn mir einfach nutzbar machen kann). Ansonsten muss ich mir eben ne Funktion basteln, die mir aus dem WB-Link die Page-ID extrahiert und aus der Datenbank den passenden Pfad holt.

DarkViper

Das ist sogar noch etwas deutlich komplexer, als es auf den ersten Blick aussieht...
Am einfachsten dürfte es noch sein, die Logik des Moduls in bestimmten Bereichen umzuschreiben.
[url=http://www.youtube.com/watch?v=tmzDAz6ZvFQ]Der blaue Planet[/url] - er ist nicht unser Eigentum - wir haben ihn nur von unseren Nachkommen geliehen[br]
[i]"You have to take the men as they are... but you can not leave them like that !" :-P [/i]
[i]Das tägliche Stoßgebet: [b]Oh Herr, wirf Hirn vom Himmel ![/b][/i]

msfrog

Hallo,
ich habe hier mal einen kleinen Sonderfall. Es geht um zwei Seiten mit unterschiedlichen Domains, die beim selben Hoster liegen, in der gleichen Datenbank und dort jeweils über die Table-Prefixes eigene Tabellen haben. Beide haben Procalendar installiert und sollen bei diesem Modul auf die gleichen Tabellen zugreifen, also den gleichen Kalender nutzen. Das hab ich auch schon hinbekommen, indem ich eins der Module umgeschrieben habe und die Page- bzw. Section-IDs für die Kalenderseite angeglichen hab.

Problematisch sind jetzt nur noch Verlinkungen im Kalender. Wird im Kalender ein Text verlinkt, der auf eine WB-Seite zeigt, dann wird das in der DB als WB-Link gespeichert. Das ist natürlich schlecht für mich, weil diese Links dann nur auf der Seite funktionieren, die den Kalendereintrag erstellt hat. Auf der anderen Seite laufen die entweder ins Leere, weils die Page-ID nicht gibt, oder verweisen auf die falsche Seite. Deswegen würde ich die WB-Links gern beim Speichern durch absolute Links ersetzen. Bietet WB dafür ne Funktion an oder muss ich mir da selber was basteln?