Content-Rendering anders realisieren

am 10.03.2015 - 16:39 Uhr in
Hallo zusammen,
ich habe einen Inhalts-Typ erstellt, der oben eine Header-Grafik und unten 2 Spalten hat. Da ich Zurb Foundaction CSS nutze, möchte ich, dass die HTML-Ausgabe etwa so aussieht:
<div class="row">
<div class="small-12 columns">
<img typeof="foaf:Image" src="/rsc/sites/default/files/haefner1030x390.jpg" width="1030" height="390" alt="" />
</div>
</div>
<div class="row">
<div class="small-12 medium-6 columns">
<p>Text in der linken Spalte</p>
</div>
<div class="small-12 medium-6 columns">
<p>Text in der rechten Spalte</p>
</div>
</div>
Ich habe zu node.tpl.php <div class="row">
hinzugefügt und die Function rsc_preprocess_field so überschriben:
<?php
function rsc_preprocess_field(&$variables, $hook) {
$element = $variables['element'];
#krumo($element['#bundle']);
if ($element['#bundle'] == '2_spaltige_seite') {
if ($element['#field_name'] == 'field_header_bild') {
$variables['classes_array'] = array(
'small-12 columns',
);
}
else {
$variables['classes_array'] = array(
'small-12 medium-6 columns',
);
}
}
}
?>
und bekomme die folgende Ausgabe:
<div class="row">
<div class="small-12 columns">
<img typeof="foaf:Image" src="/sites/default/files/haefner1030x390.jpg" width="1030" height="390" alt="" />
</div>
<div class="small-12 medium-6 columns">
<p>Text in der linken Spalte</p>
</div>
<div class="small-12 medium-6 columns">
<p>Text in der rechten Spalte</p>
</div>
</div>
Der macht also <div class="row">
um den ganzen Inhalt herum.
Gibt es eine Möglichkeit, die einzelnen Elemente zu wrappen?
Soll ich die function drupal_render überschreiben?
Vielen Dank?
- Anmelden oder Registrieren um Kommentare zu schreiben
Setz doch bitte überall eine
am 10.03.2015 - 16:47 Uhr
Setz doch bitte überall eine Code-Klammer um alles, was Du in spitzen Klammern hast. Dann kann man Deine Frage auch verstehen.
ok. angepasst
am 10.03.2015 - 16:56 Uhr
ok. angepasst
Mittels <?php print
am 10.03.2015 - 17:13 Uhr
Mittels
<?php print render($content['FELDNAMEl']); ?>
kannst Du einzelne Felder dediziert im node.tpl.php ausgeben lassen. Du brauchst also nicht drupal_render zu überschreiben. Lies einfach die Dokumentation zu render und auch die Kommentare, die man oft auf diesen Seiten findet. Da gibt es oft Beispiele oder Hinweise, was man tun oder lassen sollte.ja, das wollte ich wissen. Da
am 10.03.2015 - 17:32 Uhr
ja, das wollte ich wissen. Da ich ein Drupal-Anfänger bin, wusste ich noch nicht genau, ob ich es darf. Aber es stimmt schon, man kann einfach mit if prüfen, mit welchem Inhalts-Typ grad gearbeitet wird, und dann entweder render() nutzen, oder die Felder einzeln ausgeben.
Danke Dir.
Wenn ich so etwas wirklich
am 10.03.2015 - 17:55 Uhr
Wenn ich so etwas wirklich benötige, was eher selten vorkommt, schreibe ich einen speziellen Template-file für diesen Nodetyp. Der liegt dann neben dem "normalen" node.tpl.php im eigenen Theme. Welche Namen diese Template Dateien haben können findest Du auf "Drupal 7 Template (Theme Hook) Suggestions".
Und gleich habe ich ein
am 10.03.2015 - 18:03 Uhr
Und gleich habe ich ein Problem. Soll ich jetzt das ganze Image-Rendering selbst programmieren? Über $content['field_header_bild']['#object']->field_header_bild[LANGUAGE_NONE][0]['filename'] bekomme ich den Dateinamen. Soll ich jetzt das img-Tag selber bauen oder gibt es interne Drupal-Funktionen?
DisplaySuite
am 10.03.2015 - 19:03 Uhr
Moin.

Lade Dir mal [do:ds Display Suite] herunter und installiere dann "Display Suite Extras" und "Display Suite UI". Dann gehst Du auf Deiner Seite zu admin/structure/ds/list/extras und setzt das Häckchen bei "Enable Field Templates":
Jetzt kannst Du in den Anzeigeeinstellungen Deines Inhaltstypen für jedes Feld festlegen, wie es ausgegeben werden soll; der Mode "Expert" erlaubt es dabei, das komplette HTML für die Feldausgabe umzuschreiben.

Hier ein Beispiel für 3 Felder eines Speiseplans, den wir mal gebaut haben:
Die Ausgabe sieht dann ungefähr so aus:

hth,
Stefan
OMG. old good Drupal. Zu
am 10.03.2015 - 19:57 Uhr
OMG. old good Drupal. Zu jedem Anlass braucht man ein Modul, das noch ein paar Anhängigkeiten hat. Ich probiere das Modul aus, aber ich weiß nicht, ob ich es wirklich für eine kleine Website brauche. Nutzt du es, oder kommt sowas bei dir ehe selten zustande?
DisplaySuite
am 10.03.2015 - 21:28 Uhr
Nutzt du es, oder kommt sowas bei dir ehe selten zustande?
Ich glaube, es gibt keine Webseite bei uns, bei der wir [do:ds Display Suite] nicht einsetzen.
Für mich ist gerade der Fakt, dass es für (nahezu) jede Anforderung (mindestens) ein Modul gibt, eine der Stärken von Drupal ;)