cck + link + Zeilenumbruch
Eingetragen von Tiburon (17)
am 31.08.2008 - 17:38 Uhr in
am 31.08.2008 - 17:38 Uhr in
Hallo Leute,
ich bin ein absoluter php-neuling und ich habe ein Problem mit der Ausgabe mehrerer Links die ich mit dem cck + link erstellt habe. Ich habe für einen Inhaltstypen über cck + link ein Feld angelegt mit dem ich mehrere Links jeweils mit einem Zeilenumbruch ausgeben möchte.
Standardmäßig gibt mir drupal die links direkt hinterneinander aus. Gibt es eine Möglichkeit in der page.tpl.php zu definieren dass die einzelnen links jeweils in einer neuen Zeile erscheinen sollen?
In meiner page.tpl sieht das bisher so aus:
<?php
foreach ((array)$node->field_recommendations as $item) {
?>
<?php
print $item['view']
?>
<?php
}
?>
Freue mich über jede Hilfe, danke !!
- Anmelden oder Registrieren um Kommentare zu schreiben
Fuer das was Du willst ist
am 31.08.2008 - 19:32 Uhr
Fuer das was Du willst ist NICHT die page.tpl.php zustaendig.
Da Du in einem Nodetype das Linkfeld verwendest ist das Template fuer diesen Nodetype der Ansatzpunkt um die Ausgabe der Links zu themen.
Im Template dieses Nodetype machst Du mit PHP das Nodeobjekt sichtbar. Damit kannst Du sehen wie Du das Linkfeld ansprechen kannst.
<?php
print '<pre>';
print_r($node);
print '<pre>';
?>
Nehmen wir an das Linkfeld hat die Bezeichnung field_my_links. In der CCK Administration ist der Name des Feldes zu sehen.
Dann wird das Feld beispielsweise so angesprochen:
<?php
if ( $node->field_my_links[0]['url'] != '' ) {
print $node->field_my_links[0]['url'];
}
?>
Welche Werte angesprochen werden koennen zeigt Dir obiges
print_r($node);
an.Um einen Link als HTML auszugeben kann man Drupal l() Funktion verwenden. Diese Funktion kannst Du Dir auf api.drupal.org ansehen um zu erfahren wie Du sie verwenden kannst.
<?php
if ( $node->field_my_links[0]['url'] != '' ) {
print l($node->field_my_links[0]['url'], $node->field_my_links[0]['display_title'], array('class' => 'my_link', 'target' => '_blank'));
}
?>
Mehrfachwerte fuer das Linkfeld
Wenn Du fuer das Linkfeld Mehrfachwerte erlaubst dann kommst Du mit einem PHP foreach an die einzelnen Links heran.
<?php
if ( $node->field_my_links[1]['url'] == '' ) {
print l($node->field_my_links[0]['url'], $node->field_my_links[0]['display_title'], array('class' => 'my_link', 'target' => '_blank'));
}
else {
foreach ( $node->field_my_links as $key => $value ) {
print l($node->field_my_links[$key]['url'], $node->field_my_links[$key]['display_title'], array('class' => 'my_link', 'target' => '_blank'));
}
}
?>
Nur wenn (bei Mehrfachfeldern) mindestens ein 2. Linkfeld existiert wird die Ausgabe aller Linkfelder durch die foreach Schleife realisiert.
Erinnere Dich bitte das in PHp Arrays mit 0 angefangen werden zu zaehlen. Daraus ergibt sich das mit
<?php
$node->field_my_links[0]['url'];
?>
das erste Linkfeld gemeint ist und mit
<?php
$node->field_my_links[1]['url'];
?>
das zweite Linkfeld gemeint ist usw.
Alle Codes ungetestet und auf die Schnelle fuer diesen Post formuliert.
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.
Danke :-)
am 01.09.2008 - 06:39 Uhr
Wow, erst einmal vielen Dank für die großartige Antwort. Ich habe den Code bisher über das Modul Content-Templates erstellt und bin fälschlicherweise davon ausgegangen dass dieser dann normalerweise in der page.tpl landen müsste.
Verstehe ich das also richtig wenn man davon ausgehen kann dass die page.tpl.php sozusagen die allgmeingültigen Werte aufweisen sollte während nodes wie z.B. node-mycontent.tpl.php dazu da sind Änderungen oder Spezifikationen die sich z.b. auf bestimmte Inhaltstypen beziehen einbauen kann ??
So, nun werde ich mich mal an den Code machen und sehen ob ich das hinbekomme. Nochmals vielen Dank !!!!
Puuuuhhhhhh
am 01.09.2008 - 13:57 Uhr
Für einen php-noob ist das harter Tobak.
Ich verstehe es so: Wenn ich ein mit cck und dem link modul erzeugtes Linkefeld einfüge welches mehrere Link enthält kann ich die Darstellung erst einmal grundsätzlich definieren (d.h. für alle gleich).
Um jedoch eine Formatierung zu erzeugen die z.B. dafür sorgt dass jeder Link in einer neuen Reihe steht müsste ich erst die generelle Formatierung für den ersten Link darstellen und dann mit "if" - "else" arbeiten um zu zeigen was ab dem nächsten Link passiert ??
Nun ja, ich überlege nun ernsthaft ob ich nicht lieber mehrere Linkfelder untereinander anlegen sollte und die auf "optional" stelle - das wäre natürlich mehr Code aber irgendwo ist das mit den Schleifen usw. für einen Anfänger doch reichlich verwirrend *fg
div's als Blockelemente erzeugen einen Zeilenumbruch
am 01.09.2008 - 14:14 Uhr
Um jedoch eine Formatierung zu erzeugen die z.B. dafür sorgt dass jeder Link in einer neuen Reihe steht müsste ich erst die generelle Formatierung für den ersten Link darstellen und dann mit "if" - "else" arbeiten um zu zeigen was ab dem nächsten Link passiert ??
Nein.
Die erste Frage ermittelt lediglich ob es mehr als ein Linkfeld gibt. Wenn nicht ist es nur 1 Feld und es wird ausgegeben.
Gibt es mehr als ein Linkfeld (mit Inhalt) dann tritt else ein und die Schleife wird ausgefuehrt um alle Felder (incl. dem 1. Feld) auszugeben.
Mein Szenario mit dem Beispielcode geht davon aus das das Linkfeld kein Pflichtfeld ist. Was wohl bei Feldern eine moegliche Option ist. Oder?
Um nun Fehler abzufangen wenn es gar keinen Linkeintrag gibt, weil optionales Feld, prueft man auf das erste Feld.
Um zu ermitteln ob es mehr als einen Link gibt prueft man auf das Minimum - 2 Links, also auf das 2. Feld. Dabei ist es dann egal ob es nach dem 2. Feld weitere Felder mit Inhalt gibt. Die Schleife arbeitet sie ab unabhaengig von ihrer Anzahl.
Natuerlich ist mein Code nur prinzipiell.
Mann kann um mehrere Links hintereinander zeilenweise auszugeben die Links mit einem div umgeben. Dadurch werden sie dann schon mal zeilenweise ausgegeben weil standardmaessig ein div als ein Blockelement dargestellt werden - d. h. ein div erzeugt einen Zeilenumbruch.
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.
Wow
am 01.09.2008 - 14:59 Uhr
Nun habe ich es kapiert - ich bin nicht von einem optionalen, sondern einem erforderlichen Link ausgegangen. Daher verstehe ich das jetzt auch :-).
Den Zeilenumbruch habe ich jetzt tatsächlich mit einem div lösen können. Sieht gut ein wenn man es entpsprechend mit css darstellt. Ich danke Dir vielmals für die Mühe die Du Dir gemacht hast !!!!