View Helfer
In deinen View Skripten ist es oft notwendig, bestimmte komplexe Funktionen immer wieder
auszuführen, z.B. Datum formatieren, Formularelemente erstellen oder Links für Aktionen
anzuzeigen. Du kannst Helferklassen verwenden, um diese Aufgaben für dich durchführen zu
lassen.
Ein Helfer ist einfach eine Klasse. Nehmen wir an wir wollen einen Helfer der 'fooBar'
heißt. Standardmäßig wird der Klasse 'Zend_View_Helper_' vorangestellt (Es kann ein
eigener Prefix definiert werden wenn ein Pfad für die Helfer definiert wird), und das letzte
Segment des Klassennamens ist der Name des Helfers; Dieses Segment sollte Titel
Großgeschrieben sein; der volle Klassenname ist dann:
Zend_View_Helper_FooBar. Diese Klasse sollte mindestens eine einzelne
Methode enthalten, die nach dem Helfer benannt und camelCased ist:
fooBar().
Note: Betrachte den Fall
Namen von Helfern sind immer camelCased, bzw. beginnen Sie nie mit einem
großgeschriebenen Zeichen. Der Klassenname selbst ist MixedCased, aber die Methode die
aktuell ausgeführt wird ist camelCased.
Note: Standard Helfer Pfad
Der Standard Helfer Pfad zeigt immer zu den View Helfern des Zend Frameworks,
normalerweise 'Zend/View/Helper/'. Selbst wenn setHelperPath()
ausgerufen wird um den existierenden Pfad zu überschreiben, wird dieser Pfad gesetzt um
sicherzustellen das die Standard Helfer arbeiten.
Um einen Helfer in deinem View Skript zu verwenden, rufe ihn mittels
$this->helperName() auf. Im Hintergrund wird
Zend_View die Klasse
Zend_View_Helper_HelperName laden, eine Objektinstanz der
Klasse erstellen und deren Methode helperName() aufrufen. Die
Objektinstanz bleibt innerhalb der Zend_View Instanz bestehen und
wird bei allen weiteren Aufrufen von $this->helperName() wiederverwendet.
Vorhandene Helfer
Zend_View enthält bereits einige vorhandene Helferklassen, die
sich alle auf die Erstellung von Formularelementen beziehen und die notwendige
Maskierung der Ausgaben automatisch vornehmen. Zusätzlich gibt es Helfer zum Erstellen
Routen-basierter URLS and HTML Listen, genauso wie
für das Deklarieren von Variablen. Die aktuell gelieferten Helfer beinhalten:
-
declareVars(): Primär benutzt mit
strictVars(), kann dieser Helfer verwendet werden um
template Variablen zu deklarieren welche bereits, oder noch nicht, im View
Objekt bereits gesetzt sind, sowie auch Standard Werte. Arrays welche als
Argument dieser Methode übergeben werden, werden verwendet um Standard Werte zu
setzen; Andernfalls, wenn die Variable nicht existiert, wird diese mit einem
leeren String gesetzt.
-
fieldset($name, $content, $attribs): Erstellt ein
XHTML Fieldset. Wenn $attribs einen
'legend' Schlüssel enthält, wird der Wert für die Fieldset Beschriftung
verwendet. Das Fieldset wird $content umfassen wie vom Helfer
angeboten.
-
form($name, $attribs, $content): Erzeugt eine
XHTML Form. Alle $attribs werden als
XHTML Attribute des Form Tags escaped und dargestellt. Wenn
$content vorhanden und kein boolsches
FALSE ist, dann wird dieser Inhalt innerhalb der Start und
End Form Tags dargestellt werden; wenn $content ein boolsches
FALSE ist (der Standard), wird nur das beginnende Formtag
erzeugt.
-
formButton($name, $value, $attribs): Erstellt ein
<button /> Element.
-
formCheckbox($name, $value, $attribs, $options):
Erstellt ein <input type="checkbox" /> Element.
Standardmäßig, wenn kein $value angegeben und keine $options vorhanden sind,
wird '0' als ungecheckter Wert, und '1' als gecheckter Wert angenommen. Wenn
ein $value übergeben wird, aber keine $options vorhanden sind, wird der
gecheckte Wert and der übergebene Wert angenommen.
$options sollte ein Array sein. Wenn das Array indiziert ist, ist der erste
Wert der gecheckte Wert, und der zweite der ungecheckte Wert; alle anderen
Werte werden ignoriert. Es kann auch ein assoziatives Array mit den Schlüsseln
'checked' und 'unChecked' übergeben werden.
Wenn $options übergeben wurden und $value mit dem gecheckten Wert
übereinstimmt, dann wird das Element als gecheckt markiert. Das Element kann
auch als gecheckt oder ungecheckt markiert werden indem ein boolscher Wert
für das Attribut 'checked' übergeben wird.
Das obige wird möglicherweise am besten mit einigen Beispielen zusammengefasst:
// '1' und '0' als gecheckte/ungecheckte Optionen; nicht gecheckt
'foo');
// '1' und '0' als gecheckte/ungecheckte Optionen; gecheckt
'foo''checked'// 'bar' und '0' als gecheckte/ungecheckte Optionen; nicht gecheckt
'foo', 'bar');
// 'bar' und '0' als gecheckte/ungecheckte Optionen; gecheckt
'foo', 'bar''checked'// 'bar' und 'baz' als gecheckte/ungecheckte Optionen; nicht gecheckt
'foo''bar', 'baz'));
// 'bar' und 'baz' als gecheckte/ungecheckte Optionen; nicht gecheckt
'foo''checked' => 'bar',
'unChecked' => 'baz'
));
// 'bar' und 'baz' als gecheckte/ungecheckte Optionen; gecheckt
'foo', 'bar''bar', 'baz''foo''checked''bar', 'baz'));
// 'bar' und 'baz' als gecheckte/ungecheckte Optionen; nicht gecheckt
'foo', 'baz''bar', 'baz''foo''checked''bar', 'baz'));
In allen Fällen, wird das Markup einem versteckten Element mit dem
nicht gecheckten Wert vorangestellt; auf diesem Weg erhält man
trotzdem einen gültigen Wert von der Form selbst wenn der Wert nicht
gecheckt wird.
-
formErrors($errors, $options): Erzeugt eine ungeordnete
XHTML Liste und zeigt Fehler an. $errors
sollte ein String oder ein Array von Strings sein; $options
sollte irgendein Attribut sein das im beginnenden List Tag platziert werden
soll.
Es kann alternativer beginnender, schließender und seperierter Inhalt
spezifiziert werden wenn Fehler dargestellt werden durch aufruf von
verschiedenen Methoden auf dem Helfer:
-
setElementStart($string); Standard ist
'<ul class="errors"%s"><li>', wobei %s mit den in
$options spezifizierten Attributen ersetzt wird.
-
setElementSeparator($string); Standard ist
'</li><li>'.
-
setElementEnd($string); Standard ist
'</li></ul>'.
-
formFile($name, $attribs): Erstellt ein
<input type="file" /> Element.
-
formHidden($name, $value, $attribs): Erstellt ein
<input type="hidden" /> Element.
-
formLabel($name, $value, $attribs): Erstellt ein
<label> Element, setzt das for Attribut auf
$name, und den aktuellen Labeltext auf
$value. Wenn disable an
attribs übergeben wird, wird nichts zurückgegeben.
-
formMultiCheckbox($name, $value, $attribs, $options,
$listsep): Erstellt eine Liste von Checkboxen.
$options sollte ein assoziatives Array sein und kann beliebig
tief werden. $value kann ein einzelner Wert oder ein Array
von ausgewählten Werten sein die Schlüsseln im $options Array
entsprechen. $listsep ist standardmäßig ein
HTML Break ("<br />"). Standardmäßig wird dieses
Element als Array behandelt; alle Checkboxen teilen den gleichen Namen, und
werden als Array übertragen.
-
formPassword($name, $value, $attribs): Erstellt ein
<input type="password" /> Element.
-
formRadio($name, $value, $attribs, $options): Erstellt
eine Reihe von <input type="radio" /> Elementen, eine für jeden der
$options Elemente. Im $options Array ist der Elementschlüssel der Wert und der
Elementwert die Bezeichnung des Radio-Buttons. Der $value Radiobutton wird für
dich vorgewählt.
-
formReset($name, $value, $attribs): Erstellt ein
<input type="reset" /> Element.
-
formSelect($name, $value, $attribs, $options): Erstellt
einen <select>...</select> block mit einer <option>one für
jedes $options Element. Im $options Array ist der Elementschlüssel der
Optionswert und der Elementwert die Optionsbezeichnung. Die $value Optionen
werden für dich vorgewählt.
-
formSubmit($name, $value, $attribs): Erstellt ein
<input type="submit" /> Element.
-
formText($name, $value, $attribs): Erstellt ein
<input type="text" /> Element.
-
formTextarea($name, $value, $attribs): Erstellt einen
<textarea>...</textarea> Block.
-
url($urlOptions, $name, $reset): Erstellt einen
URL String basierend auf dem Namen der Route.
$urlOptions sollte ein assoziatives Array von Schlüßel/Werte
Paaren sein, welche bon der speziellen Route verwendet wird.
-
htmlList($items, $ordered, $attribs, $escape): erzeugt
ungeordnete und geordnete Listen welche auf den $items
basieren die übergeben wurden. Wenn $items ein
multidimensionales Array ist, wird eine verschachtelte Liste gebaut. Wenn das
$escape Flag TRUE ist (standard), werden
individuelle Abschnitte escaped durch Verwendung des Escaping Mechanismus der im
View Objekt registriert wurde; ein FALSE Wert wird
übergeben wenn Markups in den Listen gewünscht werden.
Die Verwendung dieser Helfer in deinem View Skript ist sehr einfach, hier ist ein
Beispiel. Beachte, dass du diese Helfer nur aufzurufen brauchst; sie werden automatisch
geladen und instanziiert, sobald sie benötigt werden.
// Innerhalb deines View Skriptes, verweist $this auf die Zend_View
// Instanz.
//
// Sagen wir, dass du bereits eine Serie von Auswahlwerten der Variable
// $countries in Form eines Arrays zugewiesen hast
// ('us' => 'United States', 'il' => 'Israel', 'de' => 'Germany')
"action.php" method="post"'email', 'you@example.com''size''country', 'us''opt_in', 'yes''yes', 'no'
Die Ausgabe des View Skriptes wird in etwa so aussehen:
span style="color: #ff0000;">"action.php" method="post""text" name="email" value="you@example.com" size="32" />
</label></p>
<p><label>Dein Land:
<select name="country">
<option value="us" selected="selected">Amerika</option>
<option value="il">Israel</option>
<option value="de">Deutschland</option>
</select>
</label></p>
<p><label>Möchtest Du hinzugefügt werden?
<input type="hidden" name="opt_in" value="no" />
<input type="checkbox" name="opt_in" value="yes" checked="checked"
Action View Helfer
Der Action View Helfer ermöglicht es View Skripten eine gegebene
Controller Aktion auszuführen; das Ergebnis des Antwortsobjektes das der Ausführung folgt
wird dann zurückgegeben. Dieses kann verwendet werden wenn eine bestimmte Aktion
wiederverwendbare Inhalte oder "helfende" Inhalte erstellt.
Aktionen die zu einem _forward() oder einer Umleitung führen werden
als ungültig angenommen, und als leerer String zurückgegeben.
Die API für den Action View Helfer folgt dem der
meisten MVC Komponenten die Controller Aktionen aufrufen:
action($action, $controller, $module = null, array $params =
array()). $action und $controller
werden benötigt; wenn kein Modul angegeben wird, dann wird das Standardmodul angenommen.
Example #1 Grundsätzliche Verwendung von Action View Helfern
Als Beispiel, könnte man einen CommentController mit einer
listAction() Methode haben die man in Reihenfolge ausführen
will, um eine Liste von Kommentaren für die aktuelle Anfrage herauszuholen:
<div id="sidebar right""item"'list',
'comment''count'
BaseUrl Helper
Wärend die meisten URLs die vom Framework erstellt werden automatisch
die Basis URL vorangestellt haben, müssen Entwickler die Basis
URL Ihren eigenen URLs voranstellen damit die Pfade
zu den Ressourcen korrekt sind.
Die Verwendung des BasisUrl Helfers ist sehr geradlinig:
/*
* Das folgende nimmt an das die Basis URL der Seite/Anwendung "/mypage" ist.
*/
/*
* Ausdruck:
* <base href="/mypage/" />
*/"<?php echo $this->baseUrl(); ?>" />
/*
* Ausdruck:
* <link rel="stylesheet" type="text/css" href="/mypage/css/base.css" />
*/"stylesheet" type="text/css"
href="<?php echo $this->baseUrl('css/base.css'); ?>" />
Note:
Der Einfachheit halber entfernen wir die Eingangs- PHP Datei (z.B.
"index.php") von der Basis URL die in
Zend_Controller enthalten war. Trotzdem kann das in einigen
Situationen Probleme verursachen. Wenn eines Eintritt kann man
$this->getHelper('BaseUrl')->setBaseUrl() verwenden um
seine eigene BasisUrl zu setzen.
Currency Helfer
Das anzeigen von lokalisierten Währungswerten ist eine übliche Aufgabe; der View Helfer
Zend_Currency dient dazu diese Aufgabe zu vereinfachen. Siehe auch
die Dokumentation von Zend_Currency für
Details über dieses Lokalisierungs-Feature. In diesem Abschnitt fokusieren wir uns nur auf
die Verwendung des View Helfers.
Es gibt verschiedene Wege um den Currency View Helfer zu initiieren:
-
Registriert, über eine vorher in Zend_Registry registrierte
Instanz:
-
Im Nachhinein, über das Fluent Interface.
-
Direkt, über Instanzierung der Klasse.
Eine registrierte Instanz von Zend_Currency ist der vorgeschlagene
Weg für diesen Helfer. Wenn man dies macht kann die Währung welche verwendet werden soll
ausgewählt werden bevor der Adapter der Registry hinzugefügt wird.
Es gibt verschiedene Wege die gewünschte Währung auszuwählen. Erstens kann man einfach einen
Währungs-String übergeben; alternativ kann man ein Gebietsschema spezifizieren. Der
vorgeschlagene Weg ist die Verwendung eines Gebietsschemas, da diese Information automatisch
erkannt und über den HTTP Client Header ausgewählt wird wenn ein Benutzer
auf die Anwendung zugreift. Und es stellt sicher das die angebotene Währung mit seinem
Gebietsschema übereinstimmt.
Note:
Wir sprechen von "Gebietsschemas" statt von "Sprachen" weil Sprachen, basierend auf der
geographischen Region in welcher Sie verwendet werden, sehr unterschiedlich sein können.
Zum Beispiel wird Englisch in unterschiedlichen Dialekten gesprochen: Brittisches
Englisch, Amerikanisches Englisch, usw. Da eine Währung immer mit einem Land
korreliert muss ein voll-qualifiziertes Gebietsschema angegeben werden. Dies bedeutet
dass beides, sowohl die Sprache als auch die Region angegeben
werden müssen. Deswegen sagen wir "Gebietsschema" statt "Sprache".
Example #2 Registrierte Instanz
Um eine registrierte Instanz zu verwenden muss einfach eine Instanz von
Zend_Currency erstellt und in
Zend_Registry registriert werden, wobei der Schlüssel
Zend_Currency zu verwenden ist.
// Unsere Beispielwährung
'de_AT''Zend_Currency', $currency);
// In der View
// Gibt '€ 1.234,56' zurück
Wenn man das Fluent Interface verwenden will, kann man auch eine Instanz in der View
erstellen und den Helfer im Nachhinein konfigurieren.
Um das Fluent Interface zu verwenden muss eine Instanz von
Zend_Currency erstellt, der Helfer ohne Parameter aufgerufen, und
dann die Methode setCurrency() aufgerufen werden.
// In der View
'de_AT');
$this->currency()->setCurrency($currency)->currency(1234.56);
// Gibt '€ 1.234,56' zurück
Wenn man den Helfer ohne Zend_View verwenden will kann man Ihn auch
direkt verwenden.
Example #4 Direkte Verwendung
// Unsere Beispielwährung
'de_AT');
// Den Helfer initiieren
// Gibt '€ 1.234,56' zurück
Wie bereits gesehen wird die Methode currency() verwendet um den
Währungs-String zurückzugeben. Sie muss nur mit dem Wert aufgerufen werden den man als
Währung angezeigt haben will. Sie akzeptiert auch einige Optionen welche verwendet werden
können um das Verhalten des Helfers bei der Ausgabe zu ändern.
Example #5 Direkte Verwendung
// Unsere Beispielwährung
'de_AT');
// Den Helfer initiieren
// Gibt '€ 1.234,56' zurück
'precision' => 1));
// Gibt '€ 1.234,6' zurück
Für Details über die vorhandenen Optionen sollte man in
Zend_Currency's toCurrency() Methode
nachsehen.
Cycle Helfer
Der Cycle Helfer wird verwendet um ein Set von Werte zu ändern.
Example #6 Grundsätzliche Verwendung des Cycle Helfers
Um Elemente hinzuzufügen die man durchlaufen will müssen diese im Constructor
spezifiziert oder die assign(array $data) Funktion verwendet
werden.
span style="color: #ff0000;">"background-color:<?php echo $this->cycle(array("#F0F0F0",
"#FFFFFF"">
<td><?php echo $this->escape($book['author']) ?></td>
</tr>
<?php endforeach;?>
// Rückwärts bewegen und die assign Funktion verwenden
$this->cycle()->assign(array("#F0F0F0","#FFFFFF"));
<tr style="background-color:'#F0F0F0'">
<td>Erstes</td>
</tr>
<tr style="background-color:'#FFFFFF'">
<td>Zweites</td>
</tr>
Example #7 Mit einem oder mehreren Zyklen arbeiten
Um zwei Zyklen zu verwenden muß man den Namen des Zyklus verwenden. Einfach zwei
Parameter in der cycle Methode setzen.
$this->cycle(array("#F0F0F0","#FFFFFF"),'cycle2'). Man kann auch die
setName($name) Funktion verwenden.
span style="color: #ff0000;">"background-color:<?php echo $this->cycle(array("#F0F0F0",
"#FFFFFF"">
<td><?php echo $this->cycle(array(1,2,3),'number')->next()?></td>
<td><?php echo $this->escape($book['author'])?></td>
</tr>
<?php endforeach;?>
Partielle Helfer
Der Partial (Partielle) View Helfer wird verwendet um ein spezielles
Template innerhalb seines eigenen variablen Bereichs zu rendern. Primär wird er für
wiederverwendbare Templatefragmente verwendet bei denen man keine Vorsorge wegen variablen
Namenskonflikten aufpassen muß. Zusätzlich erlauben Sie es Teile von View Skripten von
speziellen Modulen zu spezifizieren.
Ein Geschwisterteil zum Partial ist der
PartialLoop View Helfer der es erlaubt Daten zu übergeben die
durchlaufen werden können, und einen Abschnitt für jedes Teil auszugeben.
Note: PartialLoop Zähler
Der PartialLoop View Helfer fügt der View eine Variable hinzu die
partialCounter heißt und welche die aktuelle Position des Arrays
zum View Skript übergibt. Das bietet einen einfachen Weg um alternative Farbgebungen zum
Bespiel bei Tabellenzeilen zu haben.
Example #8 Grundsätzliche Verwendung von Partials
Die grundsätzliche Verwendung von Partials ist die Ausgabe von Templatefragmenten im
eigenen Viewbereich. Es wird das folgende teilweise Skript angenommen:
span style="color: #808080; font-style: italic;">// partial.phtml ?>
Dieses würde dann vom View Skript aufgerufen indem das folgende verwendet wird:
span style="color: #ff0000;">'partial.phtml''from' => 'Team Framework',
'subject' => 'Teil der View'
Was dann das folgende ausgibt:
<ul>
<li>From: Team Framework</li>
<li>Subject: Teil der View</li>
</ul>
Note: Was ist ein Modell?
Ein Modell das mit dem Partial View Helfer verwendet wird kann
eines der folgenden sein:
-
Array. Wenn ein Array übergeben wird, sollte es assoziativ
sein, und seine Schlüssel/Werte Paare werden der View mit dem Schlüssel als View
Variable zugeordnet.
-
Objekt das die toArray() Methode implementiert. Wenn ein
Objekt übergeben wird das eine toArray() Methode
besitzt, wird das Ergebnis von toArray() dem View
Objekt als View Variablen zugeordnet.
-
Standard Objekt. Jedes andere Objekt wird die Ergebnisse
von object_get_vars() (essentiell alle öffentlichen
Eigenschaften des Objektes) dem View Objekt zuordnen.
Wenn das eigene Modell ein Objekt ist, kann es gewünscht sein, es als
Objekt an das Partielle Skript zu übergeben, statt es in ein Array von
Variablen zu serialisieren. Das kann durch das Setzen der 'objectKey' Eigenschaft des
betreffenden Helfers getan werden:
// Dem Partiellen mitteilen das ein Objekt als 'model' Variable übergeben wird
'model');
// Dem Partiellen mitteilen das ein Objekt von partialLoop als 'model'
// Variable im letzten Partiellen View Skript übergeben wird
'model');
Diese Technik ist speziell dann sinnvoll wenn
Zend_Db_Table_Rowsets an partialLoop()
übergeben werden, da man dann kompletten Zugriff auf die Zeilenobjekte im View Skript
hat, was es einem erlaubt Ihre Methoden auszurufen (wie das empfangen von Werten bei
Eltern- oder abhängigen Zeilen).
Example #9 Verwendung von PartialLoop um iterierbare Modelle darzustellen
Typischerweise, wird man Partials in einer Schleife verwenden um das selbe
Inhaltsfragment, viele Male, darzustellen; auf diesem Weg können große Blöcke von
wiederholenden Inhalten oder komplexe Anzeigelogik auf einen einzelnen Platz gegeben
werden. Trotzdem hat das einen Geschwindigkeitsnachteil, da der partielle Helfer einmal
für jede Iteration aufgerufen werden
muß.
Der PartialLoop View Helfer hilft bei der Lösung dieses Problems.
Er erlaubt es einen wiederholenden Teil (Array oder Objekt das einen
Iterator implementiert) als Modell zu übergeben. Er iteriert dann
darüber, und übergibt dessen Teile dem Partial Skript als Modell. Teil in diesem
Iterator kann jedes Modell sein das der Partial View Helfer
erlaubt.
Es wird das folgende teilweise View Skript angenommen:
span style="color: #808080; font-style: italic;">// partialLoop.phtml ?>
Und das folgende "Modell":
span style="color: #ff0000;">'key' => 'Säugetier', 'value' => 'Kamel''key' => 'Vogel', 'value' => 'Pinguin''key' => 'Reptil', 'value' => 'Viper''key' => 'Fisch', 'value' => 'Flunder'),
);
Im View Skript wird dann der PartialLoop Helfer aufgerufen:
span style="color: #ff0000;">'partialLoop.phtml'
<dl>
<dt>Säugetier</dt>
<dd>Kamel</dd>
<dt>Vogel</dt>
<dd>Pinguin</dd>
<dt>Reptil</dt>
<dd>Viper</dd>
<dt>Fisch</dt>
<dd>Flunder</dd>
</dl>
Example #10 Partials in anderen Modulen darstellen
Zeitweise existiert ein Parial in einem anderen Modul. Wenn der Name des Moduls bekannt
ist, kann dieses als zweites Argument entweder partial() oder
partialLoop() übergeben werden, indem das
$model Argument an dritte Stelle verschoben wird.
Wenn zum Beispiel, eine Teilseite existiert im 'list' Modul existiert die verwendet
werden soll, kann diese wie folgt genommen werden:
span style="color: #ff0000;">'pager.phtml', 'list'
Auf diesem Weg, können Teile wiederverwendet werden die speziell für andere Module
erstellt wurden. Deshalb ist es besser, wiederverwendbare Teile in einen Pfad für
geteilt View Skripte zu geben.
Platzhalter (PlaceHolder) Helfer
Der Placeholder View Helfer wird verwendet um Inhalte zwischen View
Skripten und View Instanzen persistent zu machen. Er bietet auch einige nützliche Features
wie Inhalte zu vereinigen, Inhalte von View Skripten zu erfassen und Vor- sowie Nach-Texte
zu Inhalten hinzuzufügen (und eigene Separatoren für vereinigte Inhalte).
Example #11 Grundsätzliche Verwendung von Platzhaltern
Die grundsätzliche Verwendung von Platzhaltern ist die persistenz von View Daten. Jeder
Aufruf des Placeholder Helfers erwartet einen Platzhalter Namen;
der Helfer gibt dann ein Platzhalter Container Objekt zurück das entweder manipuliert
oder einfach ausgegeben werden kann.
span style="color: #ff0000;">'foo')->set("Ein Text für später"'foo');
// Ausgabe "Ein Text für später"
Example #12 Platzhalter verwenden um Inhalt zu vereinigen
Inhalt über Platzhalter zu vereinigen kann zeitweise auch sehr nützlich sein. Zum
Beispiel kann ein View Skript ein variables Array besitzen von dem Nachrichten empfangen
werden sollen um diese später darzustellen; ein späteres View Skript kann diese dann
eruieren wie diese dargestellt werden sollen.
Der Placeholder View Helfer verwendet Container die
ArrayObject erweitern, und ein reichhaltiges Set von Features für
die Manipulation von Arrays bieten. Zusätzlich bietet es eine Anzahl von Methoden für
die Formatierung des Inhalts der im Container gespeichert ist:
-
setPrefix($prefix) setzt Text der dem Inhalt vorgesetzt
wird. getPrefix() kann verwendet werden um jederzeit
festzustellen wie die aktuellen Einstellungen sind.
-
setPostfix($prefix) setzt Text der dem Inhalt angehängt
wird. getPostfix() kann verwendet werden um jederzeit
festzustellen wie die aktuellen Einstellungen sind.
-
setSeparator($prefix) setzt Text mit dem
zusammengefügte Inhalte seperiert werden.
getSeparator() kann verwendet werden um jederzeit
festzustellen wie die aktuellen Einstellungen sind.
-
setIndent($prefix) kann verwendet werden um einen
Markierungswert für den Inhalt zu setzen. Wenn ein Integer übergeben wird, wird
diese Anzahl an Leerzeichen verwendet; wenn ein String übergeben wird, wird
dieser String verwendet. getIndent() kann verwendet
werden um jederzeit festzustellen wie die aktuellen Einstellungen sind.
span style="color: #ff0000;">'foo'
span style="color: #ff0000;">'foo')->setPrefix("<ul>\n <li>")
->setSeparator("</li><li>\n""</li></ul>\n"'foo');
// Ausgabe als unsortierte Liste mit schöner Einrückung
Weil die Placeholder Container Objekte
ArrayObject erweitern, können Inhalte einem speziellen Schlüssel
im Container sehr einfach zugeordnet werden, statt diese einfach an den Container
anzufügen. Auf Schlüssel kann entweder als Objekt Eigenschaften oder als Array Schlüssel
zugegriffen werden.
span style="color: #ff0000;">'foo''foo''foo''bar'
Example #13 Verwenden von Platzhaltern um Inhalt zu erfassen
Gelegentlich will man Inhalte für einen Platzhalter in einem View Skript haben die
einfachst als Vorlage zu verwenden sind; der Placeholder View
Helfer erlaubt es willkürliche Inhalte zu erfassen um diese später durch Verwendung der
folgenden API darstellen zu können.
-
captureStart($type, $key) beginnt die Erfassung der
Inhalte.
$type sollte eine der Placeholder
Konstanten APPEND oder SET sein.
APPEND fügt erfasste Inhalte der Liste der aktuellen
Inhalte im Placeholder an; SET verwendet erfasste Inhalte
als einzigen Wert für den Platzhalter (überschreibt potentiell alle vorherigen
Inhalte). Standardmäßig ist $type
APPEND.
$key kann verwendet werden um einen speziellen Schlüssel im
Placeholder Container zu spezifizieren an dem der Inhalt erfasst werden soll.
captureStart() sperrt die Erfassung bis
captureEnd() aufgerufen wurde; Erfassungen können nicht
mit dem selben Placeholder Container verschachtelt werden. Das führt zu einer
Ausnahme.
-
captureEnd() stoppt die Erfassung von Inhalten, und
platziert Ihn im Container Objekt anhängig davon wie
captureStart() aufgerufen wurde.
span style="color: #ff0000;">'foo'"foo"'foo''foo'
span style="color: #ff0000;">'foo')->captureStart('SET', 'data'"foo"'foo''foo'
Konkrete Platzhalter Implementationen
Zend Framework kommt mit einer Anzahl an "konkreten" Platzhalter Implementationen. Diese
sind für üblich verwendete Platzhalter: Doctype, Seitentitel, und verschiedene
<head> Elemente. In allen Fällen gibt der Aufruf des Platzhalters ohne Argumente
das Element selbst zurück.
Die Dokumentation für jedes Element wird separat behandelt, wie anbei beschrieben:
HeadLink Helfer
Das HTML <link> Element wird immer mehr für
das Verlinken einer Vielzahl von Ressourcen der eigenen Site verwendet: Stylesheets, Feeds,
FavIcons, Trackbacks, und andere. Der HeadLink Helfer bietet ein
einfaches Interface für die Erstellung und das Anhäufen dieser Elemente für das spätere
Empfangen und deren Ausgabe im eigenen Layout Skript.
Der HeadLink Helfer hat spezielle Methode für das hinzufügen von
Stylesheet Links zu seinem Stack:
-
appendStylesheet($href, $media, $conditionalStylesheet, $extras)
-
offsetSetStylesheet($index, $href, $media, $conditionalStylesheet,
$extras)
-
prependStylesheet($href, $media, $conditionalStylesheet, $extras)
-
setStylesheet($href, $media, $conditionalStylesheet, $extras)
Der $media Wert ist standardmäßig 'screen', kann aber jeder gültige Media
Wert sein. $conditionalStylesheet ist ein String oder boolsches
FALSE und wird verwendet um während der Darstellung zu erkennen ob
spezielle Kommentare inkludiert werden sollen um das Laden dieser Stylesheets auf diversen
Plattformen zu verhindern. $extras ist ein Array von extra Werten die man
dem Tag hinzufügen will.
Zusätzlich hat der HeadLink Helfer eine spezielle Methode für das
Hinzufügen von 'alternativen' (alternate) Links zu seinem Stack:
-
appendAlternate($href, $type, $title, $extras)
-
offsetSetAlternate($index, $href, $type, $title, $extras)
-
prependAlternate($href, $type, $title, $extras)
-
setAlternate($href, $type, $title, $extras)
Die headLink() Helfer Methode erlaubt das Spezifizieren aller
Attribute die für ein <link> Element notwendig sind, und erlaubt
auch die Spezifizfikation der Platzierung --- entweder ersetzt das neue Element alle
anderen, wird vorangestellt (an den Beginn des Stacks) , oder angefügt (an das Ende des
Stacks).
Der HeadLink Helfer ist eine konkrete Implementation des
Platzhalter Helfers.
Example #14 Grundsätzliche Verwendung des HeadLink Helfers
headLink kann jederzeit spezifiziert werden. Typischerweise wird
ein globaler Link im eigenen Layout Skript spezifiziert, und anwendungsspezifische Links
in den View Skripten der Anwendung. Im Layoutskript, in der <head> Sektion, muß
das der Helfer ausgegeben werden.
span style="color: #808080; font-style: italic;">// Links in einem View Skript setzen:
'/styles/basic.css''rel' => 'favicon',
'href' => '/img/favicon.ico'),
'PREPEND''/styles/moz.css',
'screen''id' => 'my_stylesheet'// Darstellen der Links: ?>
HeadScript Helfer
Das HTML <script> Element wird verwendet um
entweder Clientseitige Skriptelemente Inline zu ermöglichen oder um eine entfernte Ressource
zu verlinken die Clientseitigen Skriptcode enthält. Der HeadScript
Helfer erlaubt es beides zu Managen.
Der HeadScript Helfer unterstützt die folgenden Methoden für das
Setzen und Hinzufügen von Skripten:
-
appendFile($src, $type = 'text/javascript', $attrs = array())
-
offsetSetFile($index, $src, $type = 'text/javascript', $attrs =
array())
-
prependFile($src, $type = 'text/javascript', $attrs = array())
-
setFile($src, $type = 'text/javascript', $attrs = array())
-
appendScript($script, $type = 'text/javascript', $attrs =
array())
-
offsetSetScript($index, $script, $type = 'text/javascript', $attrs =
array())
-
prependScript($script, $type = 'text/javascript', $attrs =
array())
-
setScript($script, $type = 'text/javascript', $attrs = array())
Im Falle der * File() Methoden ist $src der
entfernte Ort des Skriptes das geladen werden soll; das ist üblicherweise in der Form einer
URL oder eines Pfades. Für die * Script()
Methoden sind $script die clientseitigen Skript Direktiven die in diesem
Element verwendet werden sollen.
Note: Abhängige Kommentare setzen
HeadScript erlaubt es ein Script Tag in abhängige Kommentare zu
setzen, das es erlaubt es vor speziellen Browsern zu verstecken. Um abhängige Tags zu
setzen, muß der abhängige Wert als Teil des $attrs Parameters im
Methodenaufruf übergeben werden.
Example #16 Headscript mit abhängigen Kommentaren
// Scripte hinzufügen
'/js/prototype.js',
'text/javascript''conditional' => 'lt IE 7')
);
HeadScript erlaubt auch das Erfassen von Skripten; das kann nützlich
sein wenn man ein Clientseitiges Skript programmtechnisch erstellen und es dann woanders
platzieren will. Seine Verwendung wird in einem Beispiel anbei gezeigt.
Letztendlich kann die headScript() Methode verwendet werden um
Skript Elemente schnell hinzuzufügen; die Signatur hierfür ist headScript($mode
= 'FILE', $spec, $placement = 'APPEND'). Der $mode ist
entweder 'FILE' oder 'SCRIPT', anhängig davon ob das Skript verlinkt oder definiert wird.
$spec ist entweder die Skriptdatei die verlinkt wird, oder der Skriptcode
selbst. $placement sollte entweder 'APPEND', 'PREPEND' oder 'SET' sein.
HeadScript überschreibt append(),
offsetSet(), prepend(), und
set() um um die Verwendung der speziellen Methoden wie vorher
gezeigt zu erzwingen. Intern wird jedes Element als stdClass Token
gespeichert, welches später mit Hilfe der itemToString() Methode
serialisiert wird. Das erlaubt es Prüfungen an den Elementen im Stack vorzunehmen, und diese
Elemente optional zu ändern, einfach durch das Modifizieren des zurückgegebenen Objektes.
Der HeadScript Helfer ist eine konkrete Implementation des
Platzhalter Helfers.
Note: InlineScript für HTML Body Skripte verwenden
HeadScript's Schwester Helfer,
InlineScript, sollte
verwendet werden wenn man Inline Skripte im HTML
body inkludieren will. Die Platzierung von Skripten am Ende des
Dokuments ist eine gängige Praxis für die schnellere Auslieferung von Seiten, speziell
wenn 3rd Party Analyse Skripte verwendet werden.
Note: Andere Attribute werden stanadrdmäßig ausgeschaltet
Standardmäßig wird HeadScript nur
<script> Attribute darstellen die von W3C abgesegnet sind.
Diese beinhalten 'type', 'charset', 'defer', 'language', und 'src'. Trotzdem, verwenden
einige Javascript Frameworks, vorallem » Dojo, eigene Attribute um Verhalten
zu ändern. Um solche Attribute zu erlauben, können diese über die
setAllowArbitraryAttributes() Methode eingeschaltet werden:
Example #17 Grundsätzliche Verwendung des HeadScript Helfers
Neue Skript Tags können jederzeit spezifiziert werden. Wie vorher beschrieben können
diese Links auf externe Ressourcen Dateien oder Skripte sein.
// Skripte hinzufügen
'/js/prototype.js'
Die Reihenfolge ist oft wichtig beim Clientseitigen Skripting; es kann notwendig sein
sicherzustellen das Bibliotheken in einer speziellen Reihenfolge geladen werden da Sie
Abhängigkeiten zueinander haben; die verschiedenen append, prepend und offsetSet
Direktiven können hierbei helfen:
// Skripte in eine Reihenfolge bringen
// An einem bestimmten Offset Platzieren um Sicherzustellen
// das es als letztes geladen wird
'/js/myfuncs.js');
// Scriptige Effekte verwenden (append verwendet den nächsten Index, 101)
'/js/scriptaculous.js');
// Aber Basis Prototype Skripte müssen immer als erstes geladen werden
'/js/prototype.js');
Wenn man letztendlich damit fertig ist am alle Skripte im Layoutskript darzustellen, muß
der Helfer einfach ausgegeben werden:
Example #18 Skripte einfachen mit Hilfe des HeadScript Helfers
Manchmal mit ein Clientseitiges Skript programmtechnisch erstellt werden. Wärend man
Strings zusammenhängen, Heredocs und ähnliches verwenden könnte, ist es oft einfacher
nur das Skript zu erstellen und in PHP Tags einzubetten.
HeadScript lässt das zu, und erfasst es in den Stack:
span style="color: #ff0000;">'<?php echo $this->baseUrl ?>';
$('foo_form'
Die folgenden Annahmen werden gemacht:
-
Das Skript wird an den Stack angefügt. Wenn es den Stack ersetzen soll oder an
den Anfang hinzugefügt werden soll, muß 'SET' oder 'PREPEND' als erstes Argument
an captureStart() übergeben werden.
-
Der MIME Typ des Skripts wird mit 'text/javascript'
angenommen; wenn ein anderer Typ spezifiziert werden soll muß dieser als zweites
Argument an captureStart() übergeben werden.
-
Wenn irgendwelche zusätzlichen Attribute für das
<script> Tag spezifiziert werden sollen, müssen diese
in einem Array als drittes Argument an captureStart()
übergeben werden.
HeadStyle Helfer
Das HTML Element <style> wird verwendet um
CSS Stylesheets im HTML Element
<head> zu inkludieren.
Note: HeadLink verwenden um CSS Dateien zu verlinken
HeadLink sollte verwendet
werden um <link> Elemente zu Erstellen die externe
Stylesheets enthalten. HeadStyle wird verwendet wenn man
Stylesheets inline definieren will.
Der HeadStyle Helfer unterstützt die folgenden Methoden für das
Setzen und Hinzufügen von Stylesheet Deklarationen:
-
appendStyle($content, $attributes = array())
-
offsetSetStyle($index, $content, $attributes = array())
-
prependStyle($content, $attributes = array())
-
setStyle($content, $attributes = array())
In allen Fällen ist $content die aktuelle CSS
Deklaration. $attributes sind alle zusätzlichen Attribute die das
style Tag erhalten soll: lang, title, media, oder dir sind alle
möglich.
Note: Abhängige Kommentare setzen
HeadStyle erlaubt es ein Script Tag in abhängige Kommentare zu
setzen, das es erlaubt es vor speziellen Browsern zu verstecken. Um abhängige Tags zu
setzen, muß der abhängige Wert als Teil des $attrs Parameters im
Methodenaufruf übergeben werden.
Example #19 Headstyle mit abhängigen Kommentaren
// Skripte hinzufügen
'conditional' => 'lt IE 7'));
HeadStyle erlaubt auch das Erfassen von Style Deklarationen; das kann
nützlich sein wenn eine Deklaration programmtechnisch erstellt werden soll und Sie dann
woanders platziert wird. Die Verwendung hierfür wird in einem unten angeführten Beispiel
gezeigt.
Letztendlich kann auch die headStyle() Methode verwendet werden um
schnellstens Deklarationselemente hinzuzufügen; die Signatur dafür ist
headStyle($content$placement = 'APPEND', $attributes = array()).
$placement sollte entweder 'APPEND', 'PREPEND', oder 'SET' sein.
HeadStyle überschreibt jedes append(),
offsetSet(), prepend(), und
set() um die Verwendung der oben gelisteten speziellen Methoden zu
forcieren. Intern wird jeder Teil als stdClass Token gespeichert,
welches später serialisiert wird durch Verwendung der
itemToString() Methode. Das erlaubt es die Teile im Stack zu
Prüfen, und optional auch zu Ändern durch einfaches Modifizieren des zurückgegebenen
Objektes.
Der HeadStyle Helfer ist eine konkrete Implementation des
Platzhalter Helfers.
Note: Standardmäßig wird die UTF-8 Kodierung verwendet
Standardmäßig verwendet Zend Framework UTF-8 als seine
Standardkodierung, und speziell in diesem Fall, macht das
Zend_View genauso. Die Zeichenkodierung kann im View Objekt
selbst auf etwas anderes gesetzt werden indem die Methode
setEncoding() verwendet wird (oder der Parameter
encoding bei der Instanzierung angegeben wird). Trotzdem, da
Zend_View_Interface keine Zugriffsmethoden für die Kodierung
anbietet ist es möglich dass, wenn man eine eigene View Implementation verwendet, man
keine getEncoding() Methode hat, welche der View Helfer intern
für die Erkennung des Zeichensets verwendet in das kodiert werden soll.
Wenn man UTF-8 in solch einer Situation nicht verwenden will, muss
man in der eigenen View Implementation eine getEncoding()
Methode implementieren.
Example #20 Grundsätzliche Verwendung des HeadStyle Helfers
Ein neues Style Tag kann jederzeit spezifiziert werden:
Die Reihenfolge ist in CSS sehr wichtig; es könnte sein das man
sichergestellen muß das Deklarationen in einer speziellen Reihenfolge geladen werden
wegen der Reihenfolge der Kaskade; die verschiedenen append, prepend und offsetSet
Direktiven können für diesen Zweck verwendet werden:
// Styles in Reihenfolge bringen
// Ein spezielles Offset platzieren:
$this->headStyle()->offsetSetStyle(100, $customStyles);
// Am Ende platzieren:
// Am Anfang platzieren:
Wenn man damit fertig ist und alle Style Deklarationen im Layout Skript ausgegeben
werden können kann der Helfer einfach wiederholt werden:
Example #21 Den HeadStyle Helfer verwenden um Style Deklarationen zu Erfassen
Hier und da müssen CSS Style Deklarationen programmtechnisch erstellt
werden. Wärend String Kopplungen, HereDocs und ähnliches verwendet werden könnte, ist es
oft einfacher das durch erstellen der Styles und deren Einfügung in
PHP Tags zu machen. HeadStyle lässt das zu
indem es in den Stack erfasst wird:
Die folgenden Annahmen werden gemacht:
-
Die Style Deklarationen werden dem Stack angefügt. Wenn Sie den Stack ersetzen
sollen oder an den Anfang hinzugefügt werden sollten muß 'SET' oder 'PREPEND'
als erstes Argument an captureStart() übergeben werden
-
Wenn zusätzliche Attribute für das <style> Tag
spezifiziert werden sollen, dann müssen diese in einem Array als zweites
Argument an captureStart() übergeben werden.
HeadTitle Helfer
Das HTML <title> Element wird verwendet um
einen Titel für ein HTML Dokument anzubieten. Der
HeadTitle Helfer erlaubt es Titel für späteren Empfang und Ausgabe
programmtechnisch zu Erstellen und zu Speichern.
Der HeadTitle Helfer ist eine konkrete Implementation des
Plaltzhalter Helfer. Er
überschreibt die toString() Methode um die Erstellung des
<title> Elements zu erzwingen, und fügt eine
headTitle() Methode für das schnelle und einfache Einstellen und
Ändern von Titel Elementen hinzu. Die Signatur dieser Methode ist
headTitle($title, $setType = null); standardmäßig, wird der
Wert dem Stack angefügt (Anhäufen von Title Segmenten) wenn er auf null belassen wird, aber
es kann auch 'PREPEND' (Platzierung am Anfang des Stacks) oder 'SET' (Stack überschreiben)
spezifiziert werden.
Da das Setzen der weiteren (angehängten) Reihenfolge bei jedem Aufruf von
headTitle nervend sein kann, kann man eine standardmäßige
weitere Reihenfolge setzen indem setDefaultAttachOrder() aufgerufen
wird, welche bei allen Aufrufen von headTitle() angewendet wird
solange man nicht eine andere Reihenfolge explizit als zweiten Parameter übergibt.
Example #22 Grundsätzliche Verwendung des HeadTitle Helfers
Es kann jederzeit ein Titel Tag spezifiziert werden. Die typische Verwendung besteht
darin das Titel Segment bei jedem Level an Tiefe in der Anwendung: Site, Controller,
Aktion und potentiell Ressourcen.
// Setzen des Controller und Aktion Namens als Titel Segment:
// Setzen der Site im Titel; möglicherweise das Layout Skript:
$this->headTitle('Zend Framework');
// Setzen eines Separator Strings für Segmente:
$this->headTitle()->setSeparator(' / ');
Wenn man letztendlich damit fertig ist den Titel im Layoutskript darzustellen, muß
dieser einfach ausgegeben werden:
HTML Objekt Helfer
Das HTML <object> Element wird für das
Einbetten von Medien wie Flash oder Quicktime in Webseiten verwendet. Der Object View Helfer
übernimmt die Einbettung von Medien mit einem minimalen Aufwand.
Es gibt initial view Objekt Helfer:
-
htmlFlash() Erzeugt Markup für die Einbettung von Flash
Dateien.
-
htmlObject() Erzeugt Markup für die Einbettung von eigenen
Objekten.
-
htmlPage() Erzeugt Markup für die Einbettung anderer
(X)HTML Seiten.
-
htmlQuicktime() Erzeugt Markup für die Einbettung von
QuickTime Dateien.
Alle diese Helfer teilen sich das gleiche Interface. Aus diesem Grund enthält diese
Dokumentation nur Beispiele für zwei dieser Helfer.
Die Einbettung von Flash in die eigene Seite mit Hilfe des Helfers ist recht direkt. Das
einzige benötigte Argument ist die Ressource URI.
span style="color: #ff0000;">'/path/to/flash.swf'
Das gibt das folgende HTML aus:
<object data="/path/to/flash.swf"
type="application/x-shockwave-flash"
classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab">
</object>
Zusätzlich können Attribute, Parameter und Inhalte definiert werden die mit dem
<object> dargestellt werden. Das wird durch Verwendung des
htmlObject() Helfers demonstriert.
Example #24 Anpassen des Objekts durch die Übergabe von zusätzlichen Argumenten
Das erste Argument des Objekt Helfers wird immer benötigt. Es ist die
URI zu der Ressource die man einbetten will. Das zweite Argument wird
nur im htmlObject() Helfer benötigt. Die anderen Helfer
enthalten bereits den wichtigen Wert für dieses Argument. Der dritte Parameter wird für
die Übergabe von Argumenten an das Objekt Element verwendet. Es akzeptiert nur ein Array
mit Schlüssel-Wert Paaren. Die classid und
codebase sind Beispiel für solche Attribute. Das vierte Argument
nimmt auch Schlüssel-Wert Paare und verwendet diese für die Erstellung von
<param> Elementen. Sie sehen in Kürze ein Beispiel
hierfür. Letztendlich, gibt es eine Option für das zur Verfügungstellen von zusätzlichen
Inhalten beim Objekt. Jetzt folgt ein Beispiel welches alle Argumente verwendet.
span style="color: #ff0000;">'/path/to/file.ext',
'mime/type''attr1' => 'aval1',
'attr2' => 'aval2''param1' => 'pval1',
'param2' => 'pval2'
),
'some content'
);
/*
Das würde folgendes ausgeben:
<object data="/path/to/file.ext" type="mime/type"
attr1="aval1" attr2="aval2">
<param name="param1" value="pval1" />
<param name="param2" value="pval2" />
some content
</object>
*/
InlineScript Helfer
Das HTML <script> Element wird verwendet um
entweder Clientseitige Skriptelemente Inline zu ermöglichen oder um eine entfernte Ressource
zu verlinken die Clientseitigen Skriptcode enthält. Der InlineScript
Helfer erlaubt es beides zu managen. Er ist von HeadScript abgeleitet und jede
Methode dieses Helfers ist vorhanden; trotzdem, sollte die
inlineScript() Methode statt headScript()
verwendet werden.
Note: InlineScript für HTML Body Skripte verwenden
InlineScript, sollte verwendet werden wenn man Skripte im
HTML body inkludieren will. Skripte am Ende des
Dokuments zu platzieren ist eine gute Praxis um das Versenden von Seiten schneller zu
machen, speziell wen 3rd Party Analyse Skripte verwendet werden.
Einige JS Bibliotheken müssen im HTML head; für
diese Skripte sollte HeadScript verwendet werden.
JSON Helfer
Wenn Views erstellt werden die JSON zurückgeben ist es wichtig auch den
entsprechenden Antwort-Header zu setzen. Der JSON View Helfer macht exakt
das. Zusätzlich schaltet er, standardmäßig, Layouts aus (wenn diese aktuell eingeschaltet
sind), weil Layouts generell nicht mit JSON Antworten verwendet werden.
Der JSON Helfer setzt die folgenden Header:
Content-Type: application/json
Die meisten AJAX Bibliotheken sehen nach diesem Header wenn die Antworten
geparst werden um festzustellen wie der Inhalt handzuhaben ist.
Die Verwendung des JSON Helfers ist sehr geradlienig:
Note: Layouts behalten und Encoding einschalten durch Verwendung von Zend_Json_Expr
Jede Methode im JSON Helfer akzwptiert ein zweites, optionales,
Argument. Dieses zweite Argument kan ein boolsches Flag sein um Layouts ein- oder
auszuschalten, oder ein Array von Optionen die an
Zend_Json::encode() übergeben und intern verwendet werden um
Daten zu kodieren.
Um Layouts zu behalten muß der zweite Parameter ein boolsches TRUE
sein. Wenn der zweite Parameter ein Array ist, können Layouts behalten werden indem ein
keepLayouts Schlüssel mit dem boolschen Wert
TRUE eingefügt wird.
// Ein boolsches true als zweites Argument aktiviert Layouts:
// Oder ein boolsches true als "keepLayouts" Schlüssel:
'keepLayouts'
Zend_Json::encode erlaubt es native JSON
Ausdrücke zu kodieren indem Zend_Json_Expr Objekte verwendet
werden. Diese Option ist standardmäßig deaktiviert. Um diese Option zu aktivieren, muß
ein boolsches TRUE an den enableJsonExprFinder
Schlüssel des Options Arrays übergeben werden:
span style="color: #ff0000;">'enableJsonExprFinder''keepLayouts'
Navigations Helfer
Die Navigations Helfer werden von
Zend_Navigation_Container für die
Darstellung von Navigations Elementen verwendet.
Es gibt 2 eingebaute Helfer:
-
Breadcrumbs,
wird für die Darstellung des Pfades der aktuell aktiven Seite verwendet.
-
Links,
wird für die Darstellung von Navigations Header Links (z.B.
<link rel="next" href="..." />) verwendet.
-
Menu,
wird für die Darstellung von Menüs verwendet.
-
Sitemap,
wird für die Darstellung von Sitemaps verwendet die dem
» Sitemaps XML
Format entsprechen.
-
Navigation,
wird für die Weiterleitung von Aufrufen zu anderen Navigations Helfern
verwendet.
Alle eingebauten Helfer erweitern
Zend_View_Helper_Navigation_HelperAbstract, welches die Integration
von ACL und Übersetzung hinzufügt. Die abstrakte Klasse
implementiert das Interface Zend_View_Helper_Navigation_Helper
welches die folgenden Methoden definiert:
-
getContainer() und setContainer()
empfängt/setzt den Navigations Container mit dem der Helfer standardmäßig arbeiten
soll, und hasContainer() prüft ob der Helfer Container
registriert hat.
-
getTranslator() und
setTranslator() empfängt und setzt den Übersetzer der für
die Übersetzung von Überschriften und Titelm verwendet wird, und
getUseTranslator() sowie
setUseTranslator() kontrollieren ob der Übersetzer
aktiviert werden soll. Die Methode hasTranslator() prüft ob
der Helfer einen Übersetzer registriert hat.
-
getAcl(), setAcl(),
getRole() und setRole()
empfangen und setzen ACL (Zend_Acl)
Instanzen und Rollen ( String oder
Zend_Acl_Role_Interface) die bei der Darstellung für das
Filtern von Seiten verwendet werden. getUseAcl() und
setUseAcl() kontrolliert ob ACL
aktiviert werden soll. Die Methoden hasAcl() und
hasRole() prüfen ob der Helfer eine ACL
Instanz oder Rolle registriert hat.
-
__toString(), die magische Methode stellt sicher das
der Helfer, durch die direkte Ausgabe an der Instanz des Helfers, dargestellt
werden kann.
-
render(), muß von konkreten Helfern implementiert
werden um die Darstellung durchzuführen.
Zusätzlich zu den Methoden die vom Interface kommen, implementiert die abstrakte Klasse
die folgenden Methoden:
-
getIndent() und setIndent()
empfängt und setzt die Einrückung. Der Setzer akzeptiert einen String
oder ein Integer . Im Fall eines Integer 's verwendet der
Helfer die angegebene Zahl als Leerzeichen für die Einrückung. Z.B. bedeutet
setIndent(4) eine Einrückung von initial 4 Leerzeichen.
Die Einrückung kann für alle Helfer außer dem Sitemap Helfer spezifiziert
werden.
-
getMinDepth() und setMinDepth()
empfängt und setzt die minimale Tiefe die eine Seite haben muß um vom Helfer
eingefügt zu werden. Das Setzen von NULL bedeutet keine
minimale Tiefe.
-
getMaxDepth() und setMaxDepth()
empfängt und setzt die maximale Tiefe die eine Seite haben muß um vom Helfer
eingefügt zu werden. Das Setzen von NULL bedeutet keine
maximale Tiefe.
-
getRenderInvisible() und
setRenderInvisible() empfängt und setzt ob Elemente die
als unsichtbar markiert sind, dargestellt werden oder nicht.
-
__call() wird verwendet um Aufrufe zum Container, der
im Helfer registriert ist, weiterzuleiten, was bedeutet das man Methoden in
einem Helfer aufrufen kann wie wenn Sie im Container wären. Siehe das folgende
Beispiel.
-
findActive($container, $minDepth, $maxDepth) wird
verwendet um die tiefste aktive Seite im angegebenen Container zu finden. Wenn
keine Tiefe angegeben wird, verwendet diese Methode die Werte die sie von
getMinDepth() und
getMaxDepth() erhält. Die tiefste aktive Seite muß
zwischen $minDepth und $maxDepth inklusive
liegen. Gibt ein Array zurück das Referenzen zu der gefundenen Instanz der Seite
enthält, und die Tiefe bei der die Seite gefunden wurde.
-
htmlify() stellt ein 'a'
HTML Element von einer
Zend_Navigation_Page Instanz dar.
-
accept() wird verwendet um zu erkennen ub eine Seite
akzeptiert werden soll wenn durch Container iteriert wird. Diese Methode prüft
die Sichtbarkeit der Seite und verifiziert das die Rolle des Helfers auf die
Ressourcen und Privilegien der Seite zugreifen darf.
-
Die statische Methode setDefaultAcl() wird für das Setzen
des standardmäßigen ACL Objekts verwendet, das dann von Helfern
verwendet wird.
-
Die statische Methode setDefaultRole() wird für das Setzen
der standardmäßigen ACL verwendet, die dann von Helfern verwendet
wird.
Wenn ein Navigations Container nicht explizit in einem Helfer durch Verwendung von
$helper->setContainer($nav) gesetzt ist, schaut der Helfer in
der Registry nach einer Container Instanz mit dem
Schlüssel Zend_Navigation. Wenn ein Container nicht explizit gesetzt
wurde, oder nicht in der Registry gefunden wird, erstellt der Helfer einen leeren
Zend_Navigation Container wenn
$helper->getContainer() aufgerufen wird.
Example #25 Aufrufe an den Navigations Container weiterleiten
Navigations View Helfer verwenden die magisch __call() Methode
um Methodenaufrufe an den Navigationscontainer weiterzuleiten der im View Helfer
registriert ist.
span style="color: #ff0000;">'type' => 'uri',
'label' => 'New page'));
Der obige Aufruf fügt eine Seite zum Container im Navigation
Helfer hinzu.
Übersetzung von Labels und Titeln
Der Navigations Helfer unterstützt die Übersetzung von SeitenLabels und Überschriften.
Man kann einen Übersetzer vom Typ Zend_Translate oder
Zend_Translate_Adapter im Helfer setzen indem
$helper->setTranslator($translator) verwendet wird, oder wie in allen
anderen I18n-fähigen Komponenten; durch das Hinzufügen des Übersetzers in
die Registry indem der Schlüssel
Zend_Translate verwendet wird.
Wenn man die Übersetzung ausschalten will, sollte man
$helper->setUseTranslator(false) verwenden.
Der Proxy Helfer
injiziert seinen eigenen Übersetzer in den Helfer auf den er weiterleitet wenn der
weitergeleitete Helfer nicht bereits einen Übersetzer hat.
Note:
Es gibt keinen Übersetzer im Sitemap Helfer, da keine SeitenLabels oder
Überschriften in einer XML Sitemap enthalten sind.
Integration mit ACL
Alle navigatorischen View Helfer unterstützen ACL abgeleitet von der
Zend_View_Helper_Navigation_HelperAbstract Klasse. Ein
Zend_Acl Objekt kann einer Instanz eines Helfers mit
$helper->setAcl($acl) hinzugefügt werden, und eine Rolle mit
$helper->setRole('member') oder
$helper->setRole(new Zend_Acl_Role('member')) . Wenn ACL
im Helfer verwendet wird, muß es der Rolle im Helfer vom ACL erlaubt
sein auf die Ressourcen zuzugreifen und/oder das die
Privilegien für diese Seite bei der Darstellung eingefügt werden dürfen.
Wenn eine Seite vom ACL nicht akzeptiert ist, wird auch jede
untergeordnete Seite von der Darstellung ausgenommen sein.
Der Proxy Helfer
injiziert seine eigene ACL und Rolle in den Helfer zu dem er
weiterleitet wenn der weitergeleitete Helfer nicht bereits einen hat.
Das Beispiel von unten zeigt wie ACL die Darstellung beeinflusst.
Setup der Navigation das in Beispielen verwendet wird
Dieses Beispiel zeigt das Setup eines Navigations Container für eine fiktive Software
Firma.
Notizen zum Setup:
-
Die Domain der Site ist www.example.com .
-
Interessante Eigenschaften der Seite sind mit einem Kommentar markiert.
-
Solange im Beispiel nicht anders erwähnt, fragt der Benutzer nach der
URL http://www.example.com/products/server/faq/ ,
welche auf die Seite mit dem Label FAQ unter
Foo Server übersetzt wird.
-
Das angenommene ACL und Route Setup wird unter dem Container
Setup gezeigt.
/*
* Navigations Container (config/array)
* Jedes Element im Array wird an Zend_Navigation_Page::factory()
* übergeben wenn der unten angezeigt Navigations Container
* erstellt wird.
*/'label' => 'Home',
'title' => 'Geh zu Home',
'module' => 'default',
'controller' => 'index',
'action' => 'index',
'order' => -100 // Sicherstellen das Home die erste Seite ist
'label' => 'Spezielles Angebot nur diese Woche!',
'module' => 'store',
'controller' => 'offer',
'action' => 'amazing',
'visible'// nicht sichtbar
'label' => 'Produkte',
'module' => 'products',
'controller' => 'index',
'action' => 'index',
'pages''label' => 'Foo Server',
'module' => 'products',
'controller' => 'server',
'action' => 'index',
'pages''label' => 'FAQ',
'module' => 'products',
'controller' => 'server',
'action' => 'faq',
'rel''canonical' => 'http://www.example.com/?page=faq',
'alternate''module' => 'products',
'controller' => 'server',
'action' => 'faq',
'params''format' => 'xml''label' => 'Editionen',
'module' => 'products',
'controller' => 'server',
'action' => 'editions''label' => 'System Anforderungen',
'module' => 'products',
'controller' => 'server',
'action' => 'requirements''label' => 'Foo Studio',
'module' => 'products',
'controller' => 'studio',
'action' => 'index',
'pages''label' => 'Kunden Stories',
'module' => 'products',
'controller' => 'studio',
'action' => 'customers''label' => 'Support',
'module' => 'prodcts',
'controller' => 'studio',
'action' => 'support''label' => 'Firma',
'title' => 'Über uns',
'module' => 'company',
'controller' => 'about',
'action' => 'index',
'pages''label' => 'Investor Relations',
'module' => 'company',
'controller' => 'about',
'action' => 'investors''label' => 'News',
'class' => 'rss', // Klasse
'module' => 'company',
'controller' => 'news',
'action' => 'index',
'pages''label' => 'Für die Presse',
'module' => 'company',
'controller' => 'news',
'action' => 'press''label' => 'Archiv',
'route' => 'archive', // Route
'module' => 'company',
'controller' => 'news',
'action' => 'archive''label' => 'Community',
'module' => 'community',
'controller' => 'index',
'action' => 'index',
'pages''label' => 'Mein Account',
'module' => 'community',
'controller' => 'account',
'action' => 'index',
'resource' => 'mvc:community.account' // Ressource
'label' => 'Forum',
'uri' => 'http://forums.example.com/',
'class' => 'external' // Klasse
'label' => 'Administration',
'module' => 'admin',
'controller' => 'index',
'action' => 'index',
'resource' => 'mvc:admin', // Ressource
'pages''label' => 'Neuen Artikel schreiben',
'module' => 'admin',
'controller' => 'post',
'aciton' => 'write'
)
)
)
);
// Container von einem Array erstellen
// Den Container im Proxy Helfer speichern
$view->getHelper('navigation')->setContainer($container);
// ...oder einfach:
$view->navigation($container);
// ...oder ihn einfach in der Registry speichern:
'Zend_Navigation', $container);
Zusätzlich zum obigen Container, wird das folgende Setup angenommen:
// Router Setup (Standardrouten und 'archive' Route):
'archive''/archive/:year''module' => 'company',
'controller' => 'news',
'action' => 'archive',
'year''Y''year' => '\d+')
)
);
// ACL Setup:
'member''admin''mvc:admin''mvc:community.account'));
$acl->allow('member', 'mvc:community.account');
$acl->allow('admin'// ACL und Rolle im Proxy Helfer speichern:
$view->navigation()->setAcl($acl)->setRole('member');
// ...oder ein standard ACL und Rolle statisch setzen:
'member');
Breadcrumbs Helfer
Breadcrumbs werden verwendet um anzuzeigen wo in einer Sitemap ein Benutzer aktuell
browst, und werden typischerweise wie folgt angezeigt: "Du bist hier: Home > Produkte
> FantastischesProdukt 1.0". Der BreakCrumbs Helfer folgt den Richtlinien von » Breadcrumbs
Pattern - Yahoo! Design Pattern Library, und erlaubt eine einfache Anpassung
(Minimale/Maximale Tiefe, Einrückung, Trennzeichen, und ob das letzte Element verlinkt
sein soll), oder die Darstellung durch Verwendung eines partiellen View Skripts.
Der Breabcrumbs Helfer funktioniert wie folgt; er findet die tiefste aktive Seite in
einem Navigations Container, und stellt den aufwärtsgerichteten Pfad zum Root dar.
Für MVC Seiten wird die "Aktivität" einer Seite erkannt indem das
Anfrage Objekt angeschaut wird, wie im Kapitel
Zend_Navigation_Page_Mvc beschrieben.
Der Helfer setzt die Eigenschaft minDepth standardmäßig auf 1, was
bedeutet das Breadcrumbs nicht dargestellt werden wenn die tiefste aktive Seite eine
Root Seite ist. Wenn maxDepth spezifiziert ist, beendet der Helfer die
Darstellung bei der spezifizierten Tiefe (z.B. stopp bei Level 2 selbst wenn die
tiefste aktive Seite auf Level 3 ist).
Methoden im Breakcrumbs Helfer sind:
-
{get|set}Separator() empfängt/setzt das Trennzeichen das zwischen
Breakcrumbs verwendet wird. Der Standardwert ist ' > ' .
-
{get|set}LinkLast() empfängt/setzt ob der letzte Breabcrumb
als Anker dargestellt werden soll oder nicht. Der Standardwert ist
FALSE.
-
{get|set}Partial() empfängt/setzt ein partielles View Skript das
für die Darstellung von Breadcrumbs verwendet werden soll. Wenn ein partielles
View Skript gesetzt ist, verwendet die render() Methode
des Helfers die renderPartial() Methode. Wenn kein
partielles gesetzt ist, wird die renderStraight()
Methode verwendet. Der Helfer erwartet das der partielle ein String
oder ein Array mit zwei Elementen ist. Wen der Partielle ein
String ist, benennt er den Namen des partiellen Skripts das zu
verwenden ist. Wenn er ein Array ist, wird das erste Element als
Name des partiellen View Skripts verwendet, und das zweite Element ist das Modul
in dem das Skript zu finden ist.
-
renderStraight() ist die standardmäßige render Methode.
-
renderPartial() wird für die Darstellung verwendet wenn
ein partielles View Skript verwendet wird.
Example #26 Darstellung von Breadcrumbs
Dieses Beispiel zeigt wie Breadcrumbs mit Standardsettings dargestellt werden.
span style="color: #ff0000;">"/products">Produkte</a> > <a href="/products/server">Foo Server</a> > FAQ
Example #27 Einrückung spezifizieren
Dieses Beispiel zeigt wie Breadcrumbs mit anfänglicher Einrückung dargestellt
werden können.
span style="color: #ff0000;">"/products">Products</a> > <a href="/products/server">Foo Server</a> > FAQ
Example #28 Eigene Ausgabe für Breakcrumbs
Dieses Beispiel zeigt wie man eine eigene Breadcrumbs Ausgabe durch die
Spezifizierung diverser Optionen erstellt.
span style="color: #808080; font-style: italic;">// Letzte Seite verlinken
// Bei Level 1 stoppen
->setSeparator(' ▶'// Cooler Seperator mit Umbruch
"/products">Produkte</a> ▶
<a href="/products/server">Foo Server</a>
/////////////////////////////////////////////////////
Example #29 Darstellung von Breadcrumbs mit Verwendung eines partiellen View Skripts
Dieses Beispiel zeigt wir eigene Breakcrumbs durch Verwendung eines partiellen
View Skripts dargestellt werden können. Durch den Aufruf von
setPartial() kann man ein partielles View Skript
spezifizieren das verwendet wird wenn die render()
Methode aufgerufen wird. Wenn ein partielles spezifiziert ist wird die Methode
renderPartial() aufgerufen. Diese Methode findest die
tiefste aktive Seite und übergibt ein Array von Seiten die zur aktiven Seite des
partiellen View Skripts weiterleitet.
span style="color: #ff0000;">'breadcrumbs.phtml', 'default'));
Inhalt von
application/modules/default/views/breadcrumbs.phtml :
span style="color: #ff0000;">', ''$a', 'return $a->getLabel();'),
$this->pages));
Produkte, Foo Server, FAQ
Link Helfer
Der Link Helfer wird für die Darstellung von HTML
LINK Elementen verwendet. Links werden für die Beschreibung von
Dokument-Beziehungen der aktuell aktiven Seite verwendet. Mehr über Links und Linktypen
kann unter » Dokument-Beziehung: Das
LINK Element (HTML4 W3C Rec.) und » Link Typen (HTML4 W3C
Rec.) in der HTML4 W3C Empfehlung nachgelesen werden.
Es gibt zwei Typen von Beziehungen; vorwärts und rückwärts, angezeigt durch die
Schlüsselwörter 'rel' und 'rev' . Die meisten Methoden im
Helfer nehmen einen $rel Parameter entgegen, welcher entweder
'rel' oder 'rev' sein muß. Die meisten Methoden nehmen auch
einen $type Parameter entgegen welcher für die Spezifikation des
Linktyps (z.B. alternate, start, next, prev, chapter, usw.) verwendet wird.
Beziehungen können dem Seitenobjekt manuell hinzugefügt werden, oder werden durch
das Durchlaufen des Containers, der im Helfer registriert ist, gefunden. Die Methode
findRelation($page, $rel, $type) versucht zuerst den gegebenen
$rel von $type von der $page
durch den Aufruf von $page->findRel($type) oder
$page->findRel($type) zu finden. Wenn $page eine
Beziehung hat die zu der Instanz einer Seite konvertiert werden kann, wird diese
Beziehung verwendet. Wenn die Instanz von $page keinen
$type spezifiziert hat, schaut der Helfer nach einer Methode im
Helfer die search$rel$type heißt (z.B.
searchRelNext() oder
searchRevAlternate()). Wenn so eine Methode existiert, wird Sie
für die Erkennung der Beziehung der $page verwendet indem der
Container durchlaufen wird.
Nicht alle Beziehungen können durch das Durchlaufen des Containers erkannt werden.
Das sind die Beziehungen die durch eine Suche gefunden werden können:
-
searchRelStart(), Vorwärts Beziehung 'start': Die
erste Seite im Container.
-
searchRelNext(), Vorwärts Beziehung 'next'; findet
die nächste Seite im Container, z.B. die Seite nach der aktiven Seite.
-
searchRelPrev(), Vorwärts Beziehung 'prev'; findet
die vorhergehende Seite, z.B. die Seite vor der aktiven Seite.
-
searchRelChapter(), Vorwärts Beziehung 'chapter';
findet alle Seiten auf Level 0 ausser der 'start' Beziehung oder der aktiven
Seite wenn diese auf Level 0 ist.
-
searchRelSection(), Vorwärts Beziehung 'section';
findet alle Kind-Seiten der aktiven Seite wenn die aktive Seite auf Level 0
ist (ein 'chapter').
-
searchRelSubsection(), Vorwärts Beziehung
'subsection'; findet alle Kind-Seiten der aktiven Seite wenn die aktive
Seite auf Level 1 sind (ein 'section').
-
searchRevSection(), Rückwärts Beziehung 'section';
findet den Elternteil der aktiven Seite wenn die aktive Seite auf Level 1
ist (ein 'section').
-
searchRevSubsection(), Rückwärts Beziehung
'subsection'; findet den Elternteil der aktiven Seite wenn die aktive Seite
auf Level 2 ist (ein 'subsection').
Note:
Wenn in der Instanz der Seite nach Beziehungen gesehen wird (
($page->getRel($type) oder $page->getRev($type) ),
akzeptiert der Helfer Wert vom Typ String , Array ,
Zend_Config, oder
Zend_Navigation_Page. Wenn ein String gefunden wird, wird
dieser zu einer Zend_Navigation_Page_Uri konvertiert. Wenn
ein Array oder eine Config gefunden wird, wird diese in ein oder mehrere
Seiteninstanzen konvertiert, und jedes Element wird an die
Seiten Factory übergeben.
Wenn der erste Schlüssel nicht nummerische ist, wird das Array/Config direkt an die
Seiten Factory übergeben, und eine einzelne Seite wird retourniert.
Der Helfer unterstützt auch magische Methoden für das Finden von Beziehungen. Um z.B.
alternative vorwärts Beziehungen zu finden muß
$helper->findRelAlternate($page) aufgerufen werden, und um rückwärts
gerichtete Kapitel Beziehungen zu finden $helper->findRevSection($page) .
Diese Aufrufe korrespondieren mit $helper->findRelation($page, 'rel',
'alternate'); und $helper->findRelation($page, 'rev', 'section'); .
Um zu Steuern welche Beziehung dargestellt werden soll, verwendet der Helfer ein render
Flag. Das render Flag ist ein Integer Wert, und kann in
» binären
und (& ) Operationen mit den render Konstanten des
Helfers verwendet werden um festzustellen ob die Beziehung zu der die render Konstante
gehört, dargestellt werden soll.
Siehe das folgende
Beispiel für weitere Informationen.
-
Zend_View_Helper_Navigation_Links::RENDER_ALTERNATE
-
Zend_View_Helper_Navigation_Links::RENDER_STYLESHEET
-
Zend_View_Helper_Navigation_Links::RENDER_START
-
Zend_View_Helper_Navigation_Links::RENDER_NEXT
-
Zend_View_Helper_Navigation_Links::RENDER_PREV
-
Zend_View_Helper_Navigation_Links::RENDER_CONTENTS
-
Zend_View_Helper_Navigation_Links::RENDER_INDEX
-
Zend_View_Helper_Navigation_Links::RENDER_GLOSSARY
-
Zend_View_Helper_Navigation_Links::RENDER_COPYRIGHT
-
Zend_View_Helper_Navigation_Links::RENDER_CHAPTER
-
Zend_View_Helper_Navigation_Links::RENDER_SECTION
-
Zend_View_Helper_Navigation_Links::RENDER_SUBSECTION
-
Zend_View_Helper_Navigation_Links::RENDER_APPENDIX
-
Zend_View_Helper_Navigation_Links::RENDER_HELP
-
Zend_View_Helper_Navigation_Links::RENDER_BOOKMARK
-
Zend_View_Helper_Navigation_Links::RENDER_CUSTOM
-
Zend_View_Helper_Navigation_Links::RENDER_ALL
Die Konstanten von RENDER_ALTERNATE bis
RENDER_BOOKMARK stellen standardmäßige HTML
Linktypen dar. RENDER_CUSTOM stellt eine nicht-standardmäßige
Beziehung dar die in der Seite spezifiziert ist. RENDER_ALL stellt
standardmäßige und nicht-standardmäßige Beziehungen dar.
Methoden im Link Helfer:
-
{get|set}RenderFlag() empfängt/setzt das render Flag.
Standardwert ist RENDER_ALL. Siehe das folgende Beispiel
dafür wie das render Flag zu setzen ist.
-
findAllRelations() findet alle Beziehungen von allen
Typen einer angegebenen Seite.
-
findRelation() findet alle Beziehungen eines
angegebenen Typs einer angegebenen Seite.
-
searchRel{Start|Next|Prev|Chapter|Section|Subsection}()
durchsucht einen Container um vorwärtsgerichtete Beziehungen zu Startseite,
nächster Seite, voriger Seite, Kapitel, Sektion und Untersektion zu finden.
-
searchRev{Section|Subsection}() durchsucht einen
Container um rückwärtsgerichtete Beziehungen zu Sektionen oder Untersektionen zu
finden.
-
renderLink() stellt ein einzelnes link
Element dar.
Example #30 Beziehungen in Seiten spezifizieren
Dieses Beispiel zeigt wir Beziehungen in Seiten spezifiziert werden können.
span style="color: #ff0000;">'label' => 'Strings für Beziehungen verwenden',
'rel''alternate' => 'http://www.example.org/'
),
'rev''alternate' => 'http://www.example.net/''label' => 'Arrays für Beziehungen verwenden',
'rel''alternate''label' => 'Example.org',
'uri' => 'http://www.example.org/''label' => 'Konfigurationen für Beziehungen verwenden',
'rel''alternate''label' => 'Example.org',
'uri' => 'http://www.example.org/''label' => 'Instanzen von Seiten für Beziehungen verwenden',
'rel''alternate''label' => 'Example.org',
'uri' => 'http://www.example.org/'
))
)
)
));
Example #31 Standardmäßige Darstellung von Links
Dieses Beispiel zeigt wie ein Menü von einem Container dargestellt wird, der im
View Helfer registriert/gefunden wurde.
span style="color: #ff0000;">"alternate" href="/products/server/faq/format/xml""start" href="/" title="Home""next" href="/products/server/editions" title="Editionen""prev" href="/products/server" title="Foo Server""chapter" href="/products" title="Produkte""chapter" href="/company/about" title="Firma""chapter" href="/community" title="Community""canonical" href="http://www.example.com/?page=server-faq""subsection" href="/products/server" title="Foo Server">
Example #32 Spezifizieren welche Beziehungen dargestellt werden sollen
Dieses Beispiel zeigt wie spezifiziert werden kann, welche Beziehungen zu finden
und darzustellen sind.
span style="color: #ff0000;">"start" href="/" title="Home""next" href="/products/server/editions" title="Editionen""prev" href="/products/server" title="Foo Server">
span style="color: #ff0000;">"alternate" href="/products/server/faq/format/xml""start" href="/" title="Home""next" href="/products/server/editions" title="Editionen""prev" href="/products/server" title="Foo Server""chapter" href="/products" title="Produkte""chapter" href="/company/about" title="Firma""chapter" href="/community" title="Community""subsection" href="/products/server" title="Foo Server">
span style="color: #ff0000;">"alternate" href="/products/server/faq/format/xml""start" href="/" title="Home""next" href="/products/server/editions" title="Editionen""prev" href="/products/server" title="Foo Server""canonical" href="http://www.example.com/?page=server-faq""subsection" href="/products/server" title="Foo Server">
|
|