[gelöst] View Felder mit einem div umschließen
am 22.04.2011 - 20:30 Uhr in
Wie der Titel schon sagt möchte ich gern einen Dic-Container um zwei View Felder haben, diese beiden Felder sind schon als "inline"-Felder gruppiert.
Hatte/Habe es über die Rewrite Möglichkeit probiert und halt in dem ersten Feld den ersten Teil und in dem zweiten Feld den schließenden Teil des div's ....
leider ist das nicht grade valide da er ja den Inhalt der Felder in Span's packt und so ein div in einem span sich öffnet ... :(
Hatte dann versucht es über das Global-Feld "Custom Text" ... doch da entsteht das gleiche Problem :(
Hatte schon überlegt das ganz über einen float (beide Felder nicht als inline) im css zu machen jedoch wollte ich gern dies umschließende div mit einem border-radius belegen ... mit ein float würde es dann gehen wenn ich den border-radius jeweils links und rechts nur habe ...
Hat jemand eine schönere Idee wie ich einen div container um meine beiden inline Elemente bekomme?
Vielen Danke im Voraus :D
- Anmelden oder Registrieren um Kommentare zu schreiben
Klick in Deinem View unter
am 22.04.2011 - 21:20 Uhr
Klick in Deinem View unter "Basiseinstellungen" auf "Theme: Information" ... dort kannst Du für jedes Feld ein eigenes tpl-File anlegen (welches Du mit dem Beispiel-Code in Dein Theme-Ordner speicherst). Als Namen wählst Du einen aus der dortigen Liste aus, am besten den letzten.
z.B. views-view-field--User-Map-und-Umkreissuche--attachment-1--street.tpl.php (bei Dir heißt das natürlich anders) ;-)
Du legst also 2 tpl-Dateien an - im ersten kommt das öffnende div-tag rein (vor "output") und im zweiten das schließende (nach "output"). Danach "Vorlagedateien neu einlesen".
So müsste das eigentlich klappen.
Edit:
Hab den Code einfach mal kopiert.
<?php
// $Id: views-view-field.tpl.php,v 1.1 2008/05/16 22:22:32 merlinofchaos Exp $
/**
* This template is used to print a single field in a view. It is not
* actually used in default Views, as this is registered as a theme
* function which has better performance. For single overrides, the
* template is perfectly okay.
*
* Variables available:
* - $view: The view object
* - $field: The field handler object that can process the input
* - $row: The raw SQL result that can be used
* - $output: The processed output that will normally be used.
*
* When fetching output from the $row, this construct should be used:
* $data = $row->{$field->field_alias}
*
* The above will guarantee that you'll always get the correct data,
* regardless of any changes in the aliasing that might happen if
* the view is modified.
*/
?>
<div id="meinegruppe">
<?php
print $output;
?>
Und im 2ten tpl-File nimmst Du dann
<?php
print $output;
?>
</div>
Drupal rockt!!!
Nachtrag: Bei der obigen
am 22.04.2011 - 21:32 Uhr
Nachtrag:
Bei der obigen Variante ist es aber für die Zukunft wichtig, dass Du die Reihenfolge der beiden Felder im View niemals änderst. Änderst Du diese kann es passieren, dass das div-End-tag "oben" steht und das öffnende div-tag darunter. Dann zerreißt es Dir natürlich das gesamte Design.
Um dieses Problem zu umschiffen, legst Du Dir am besten ein tpl-File für das "Zeilendesign" an. Dort gibst Du dann per PHP jedes einzelne Feld aus und umschließt die beiden Felder mit dem Div. Dabei muss man aber beachten, wenn man zu einem späteren Zeitpunkt weitere/neue View-Felder anlegt, müssen diese auch immer in dieses "Zeilendesign-Template" einzeln aufgeführt werden da sie ansonsten nicht angezeigt werden.
Drupal rockt!!!
Danke
am 22.04.2011 - 23:27 Uhr
Um dieses Problem zu umschiffen, legst Du Dir am besten ein tpl-File für das "Zeilendesign" an. Dort gibst Du dann per PHP jedes einzelne Feld aus und umschließt die beiden Felder mit dem Div. Dabei muss man aber beachten, wenn man zu einem späteren Zeitpunkt weitere/neue View-Felder anlegt, müssen diese auch immer in dieses "Zeilendesign-Template" einzeln aufgeführt werden da sie ansonsten nicht angezeigt werden.
Vielen Dank ... das war die Lösung ;)
Habe es jedoch mittels abfrage gelöst, sodass nun der startende div tag vor den Feld eingefügt wird und der endende nach dem zweiten Feld.
Hier mal der Code:
<?php foreach ($fields as $id => $field): ?>
<?php if (!empty($field->separator)): ?>
<?php print $field->separator; ?>
<?php endif; ?>
<?php if($field->class == "feld1"): ?>
<div class="meinCSS">
<?php endif; ?>
<<?php print $field->inline_html;?> class="views-field-<?php print $field->class; ?>">
<?php if ($field->label): ?>
<label class="views-label-<?php print $field->class; ?>">
<?php print $field->label; ?>:
</label>
<?php endif; ?>
<?php
// $field->element_type is either SPAN or DIV depending upon whether or not
// the field is a 'block' element type or 'inline' element type.
?>
<<?php print $field->element_type; ?> class="field-content"><?php print $field->content; ?></<?php print $field->element_type; ?>>
</<?php print $field->inline_html;?>>
<?php if($field->class == "feld2"): ?>
</div>
<?php endif; ?>
<?php endforeach; ?>
Damit sollten auch neu hinzukommende Felder etc kein Problem sein, entweder kommen die in den div Container oder halt an ihrer Stelle ... wenn man sie nicht verschiebt dürften sie nun nach dem div kommen ;)
Nochmals vielen Dank :)
Gern geschehen;-) Wenn das
am 23.04.2011 - 00:30 Uhr
Gern geschehen;-)
Wenn das Thema erledigt ist, setze bitte den Titel Deines Eingansgposting auf [gelöst]
Viele Grüße
Matthias
Drupal rockt!!!
Semantic views
am 23.04.2011 - 10:19 Uhr
Hallo.
Noch ein kleiner Nachtrag: verwende einfach das Modul [do:semanticviews Semantic views]. Damit kannst Du das HTML der Elemente leicht anpassen und auch noch "Wrapper"-Elemente um Felder hinzufügen.
Bei Views 3.x ist die Funktionalität bereits enthalten.
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Hallo, jetzt habe ich das
am 09.06.2011 - 11:34 Uhr
Hallo,
jetzt habe ich das nach obiger Anleitung eingerichtet und habe die Vorlagen neu eingelesen.
Die Vorlagen sind auch aktiv, weil hervorgehoben, aber die Änderung (der neue DIV-Bereich) wird nicht angezeigt - auch nicht nach dem Löschen des Cache.
Wahrscheinlich ein einfacher Fehler, aber ich komme nicht drauf...
Achso, fast vergessen - ist D7
Grüße