(edit)
Hide minor edits - Show changes to markup
(:redirect 'http://docs.studip.de/develop/Entwickler/URLHelper':)
@]
Unabhängig hiervon gibt es auch einen URLHelper für Javascript, der eine ähnliche API aufweist und auch ähnliches tut. Jedoch sind diese beiden URLHelper nicht aufeinander abgestimmt und völlig unabhängig voneinander.
<a href="?page=25&view=edit">.
<a href="?page=25&view=edit">
(:source lang=php:)<a href="?page=25&view=edit">
<a href="?page=25&view=edit">
Im Falle von gleichnamigen Parametern gilt: Einträge im $params-Array haben Vorrang vor Parametern in der $url. Parameter aus der übergebenen $url haben Vorrang vor registrierten Parametern. Möchte man einen registrierten Parameter komplett aus der URL ausblenden, so muß man diesem im $params-Array einen Wert von NULL geben.
$params
$url
NULL
Alle anderen Links müssen so umgestellt werden, daß sie die Klasse URLHelper zur Erzeugung der URL verwenden.
URLHelper
Alle anderen Links - insbesondere auch Links aus Plugins auf Seiten im Stud.IP-Kernsystem - müssen so umgestellt werden, daß sie die Klasse URLHelper zur Erzeugung der URL verwenden.
Der aktuelle Inhalt der Variablen $view wird dann automatisch zu dem so erzeugten Link hinzugefügt. Natürlich kann jeder Link auch eigene Parameter enthalten, die spezifisch für diesen Link sind. Diese würden dann direkt im Aufruf von getLink() angegeben und nicht global als Parameter registriert. Lokal im Aufruf angegebene Parameter haben dabei Vorrang vor den global registrierten, d.h. man kann bei bei Bedarf auch für einzelne Links registrierte Parameter mit anderen Werten versehen oder ganz weglassen (Parameter beim Aufruf auf NULL setzen).
$view
getLink()
Der aktuelle Inhalt der Variablen $view wird dann automatisch zu dem so erzeugten Link hinzugefügt und man erhält so etwas wie:
Natürlich kann jeder Link auch eigene Parameter enthalten, die spezifisch für diesen Link sind. Diese würden dann direkt im Aufruf von getLink() angegeben und nicht global als Parameter registriert. Lokal im Aufruf angegebene Parameter haben dabei Vorrang vor den global registrierten, d.h. man kann bei bei Bedarf auch für einzelne Links registrierte Parameter mit anderen Werten versehen oder ganz ausblenden (Parameter beim Aufruf auf NULL setzen).
An dieser Stelle sind die wichtigsten Operation der Klasse URLHelper gesammelt und dokumentiert. Es handelt sich dabei jeweils um Klassenmethoden, d.h. der Aufruf erfolgt über URLHelper::Name.
URLHelper::
bindLinkParam()
addLinkParam()
getURL()
Durch die Verwendung des URLHelper können auch neue Proleme auftreten, die bei der Nutzung von Session-Variablen nicht oder nicht im dem Maße bestehen. Es eignen sich auch nicht alle Arten von Session-Daten zur Übergabe über die URL, so daß man im Einzelfall abwägen muß, ob eine Umstellung sinnvoll ist. Dabei sollten die folgenden Punkte berücksichtigt werden:
Man sollte sich grundsätzlich der Tatsache bewußt sein, daß URL-Parameter - im Gegensatz zu Session-Daten - vom Nutzer nach belieben Verändert werden können, man darf also niemals darauf vertrauen, daß diese vom Nutzer nicht manipuliert werden. Würde man also bisher in der Session gespeicherte Berechtigungen eines Nutzers in die URL verschieben, so müßte man diese bei jedem Seitenaufruf immer neu prüfen.
Der URLHelper unterscheidet beim Erzeugen der URLs nicht, auf welche Seite ein Link verweist. Es ist auch nicht möglich, Parameter nur für bestimmte Ziele zu registrieren (da in Stud.IP in zunehmendem Maße Dispatcher eingesetzt werden, würde das auch nicht viel bringen). Daher sollte man darauf achten, Namenskollisionen bei über den URLHelper verwalteten Parametern verschiedener Seiten zu vermeiden, entweder durch Verwendung eindeutiger Präfixe (wiki_search) oder durch Abgleich mit der Liste bereits verwendeter Namen.
Hier sollten einige kleine Bespiele für die Verwendung des URLHelper aus dem praktischen Einsatz in Stud.IP gesammelt werden. Leider gibt es hier noch nicht viel…
(:toc:)
(:source lang=php:)[@
(:source lang=php linenum:)[@
Entfernt einen Link-Parameter wieder.
$link = URLHelper::getLink('wiki.php', array('keyword' => $keyword)); echo '<a href="'.$link.'">'.htmlReady($keyword).'</a>';
Zur Vereinfachung der Umstellung von vorhandenem PHP-Code auf Tabbed-Browsing und um allgemein die Verwendung von Session-Variablen auf ein sinnvolles Maß zurückzuführen, wurde mit dem Lifter001 die Klasse URLHelper eingeführt. Neuer Code muß diese Klasse verwenden, um Verweise auf andere Seiten (oder die gleiche Seite) in Stud.IP zu erzeugen. Externe Links und Bereiche von Stud.IP, die bereits eigene Funktionen zur Link-Erzeugung verwenden, sind von der Verwendung des URLHelper ausgenommen. Das sind im einzelnen:
PluginEngine::getLink()
GetDownloadLink()
Trails_Controller::url_for()
Hauptzweck dieser Klasse ist es, alle Links auf einer Seite nach Bedarf um zusätzliche URL-Parameter erweitern zu können, ohne immer wieder alle Links anpassen zu müssen. Insbesondere bei durch Hilfsfunktionen oder -klassen erzeugten Links wäre so ein Anpassen teilweise auch überhaupt nicht (sinnvoll) möglich.
Die Grundidee dabei ist relativ simpel: Es gibt eine globale Liste von "automatischen" - d.h. bei der URLHelper-Klasse registrierten - Link-Parametern sowie eine Hilfsfunktion getLink(), die eine übergebene URL mit diesen registrierten Parametern versieht. Der Aufrufer von getLink() muß sich also nicht darum kümmern, welche zusätzlichen Parameter gerade eingebaut werden sollen. In Stud.IP wird dieser Mechanismus zum Beispiel dafür verwendet, um die aktuell gewählte Veranstaltung oder die auf einer Seite eingestellten Ansichtsoptionen bei jedem Klick weiterzureichen, ohne diese serverseitig in der Session speichern zu müssen (was bei Tabbed-Browsing unweigerlich zu Problemen führen würde).
Ein einfaches Beispiel könnte so aussehen:
// $view enthält die gewählte Ansicht URLHelper::addLinkParam('view', $view) [...] switch ($view) { case 'show': // normale Ansicht der Seite [...] case 'search': // Suchergebnisse anzeigen [...] case 'edit': // Seite bearbeiten [...] } [...] // Ausgabe erzeugen (kann auch im Template sein) echo '<a href="'.URLHelper::getLink('', array('page' => 25)).'">...</a>';
Source: Basis-Wiki-Hilfe | Last change: April 01, 2011, at 11:51 PM, tthelen | Local view: Basis-Hilfe