Views: Feldwerte RAW / Divs entfernen
am 15.12.2009 - 03:46 Uhr in
Ich möchte gerne in einem Views nur auf die Werte von Feldern zugreifen können, um diese ganz nach meinen eigenen Bedürfnissen Formatieren zu können.
Habe mir ein Views erstellt, Darstellung: Unformatiert, Zeilendesign: Felder, und für dieses auch gleich ein Views Template erstellt (views-view-fields.tpl.php), dort allen überflüssigen Code rausgelöscht und erhalte nun auch jede Zeile einzelnd und die jeweiligen Werte schön ordentlich hintereinander geschrieben...
<?php foreach ($fields as $id => $field): ?>
<?php print $fields['title']->content; ?>
<?php endforeach; ?>
NUR: Drum herum um jede Zeile ist ein DIV-Tag.
==
Also das ganze noch mal mit views-view-unformatted.tpl.php
<?php foreach ($rows as $id => $row): ?>
<?php print $row; ?>
<?php endforeach; ?>
Jetzt wird alles schon hintereinander geschrieben, keine Divs, kein garnichts.
NUR: Jetzt kann mann die einzelnden Felder nicht mehr seperat ansprechen
<?php print $row['title']; ?>
funktioniert nicht, weder
<?php print $row->{$field->title}; ?>
noch
<?php print $row->title; ?>
:(
Hat jemand einen Tip für mich?
- Anmelden oder Registrieren um Kommentare zu schreiben
Felder
am 15.12.2009 - 08:40 Uhr
Hat jemand einen Tip für mich?
Schau Dir mal an, welche Daten in
$row
enthalten sind.<?php
drupal_set_message('<pre>' . var_export(array_keys((array)$row), 1) . '</pre>');
?>
und dann
<?php
drupal_set_message('<pre>' . var_export($row, 1) . '</pre>');
?>
Auf die einzelnen Felder greifst Du idealerweise immer in der views-view-fields.tpl.php (oder einem Ableger davon) zu.
Dann jedoch ohne
foreach
, sondern direkt jedes Feld einzeln.Beispiel:
<div class="slideshow-image">
<?php print $fields['field_slides_fid']->content; ?>
</div>
<?php
if ($fields['field_slides_data']->content && $fields['field_slides_data_1']->content) {
?>
<div class="slideshow-info">
<div class="info-header"><?php print $fields['field_slides_data']->content; ?></div>
<div class="info-content"><?php print $fields['field_slides_data_1']->content; ?></div>
</div>
<?php }?>
hth,
Stefan
--
Sei nett zu Deinem Themer!
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Klappt noch nicht so ganz...
am 15.12.2009 - 11:55 Uhr
Also, Es geht um die Ausgabe eines Titels, einer Bild Datei und den Angaben latitude und Longitude, View hat die Einstellungen "Darstellung: Unformatiert", "Zeilendesign: Felder", die Felder die ausgegeben werden sind "title" "field_bild_fid" "Field_lat_value" und "field_long_value", in meiner views-view-unformatted.tpl.php steht folgendes:
<?php foreach ($rows as $id => $row): ?>
<?php
print($row);
?>
<?php endforeach; ?>
als Ausgabe erhalte ich sehr schön ohne jegliches HTML:
Stop! sites/default/files/stop.jpg 52.9792 8.6685 Biene Maja sites/default/files/bienemaja.jpg 52.5231 8.4815 Hasy Wasch sites/default/files/HasyWash.jpg 52.4973 8.4503
Füge ich jetzt
<?php
drupal_set_message('<pre>' . var_export(array_keys((array)$row), 1) . '</pre>');
?>
ein erhalte ich zusätzlich folgende Ausgabe:
array (
0 => 0,
)
Bei
<?php
drupal_set_message('<pre>' . var_export($row, 1) . '</pre>');
?>
außerdem noch den Inhalt des letzten Beitrages:
'
Hasy Wasch
sites/default/files/HasyWash.jpg
52.4973
8.4503
'
row
am 15.12.2009 - 12:03 Uhr
Wie schon gesagt: die Feldausgaben machst Du in der views-view-fields.tpl.php.
$row
enthält die bereits fertig gerenderte Zeile (wird also nach views-view-fields.tpl.php aufgerufen).Stefan
--
Sei nett zu Deinem Themer!
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Gelöst!
am 15.12.2009 - 12:35 Uhr
Thnx Stefan für deine Mühe!
Mit der views-view-fields.tpl.php hatte ich schon gearbeitet, bin aber nicht zu dem gewünschten Ergebniss gekommen.
Grund: In der views-view-fields.tpl.php kann ich zwar die einzelnden felder ansprechen, die Ausgabe der Reihe erfolgt aber danach durch das views-view-list.tpl.php, dort wurde dann auch der unerwünschte CSS Code hinzugefügt.
Ich muss also beide views Themen, eines für die Anordnung der einzelnden Felder und eines für die Ausgabe der Reihe als solches.
###
ACHTUNG! Im Views Theme Ordner (z.B. /site/all/modules/view/theme/) befindet sich auch eine views-view-list.tpl.php, evtl muss diese durch eine views-view-list--MEIN-VIEW.tpl.php Datei die sich im Theme Ordner des jeweiligen Themes befindet überschrieben werden.
###
Meine views-view-fields.tpl.php
<?php
// $Id: views-view-fields.tpl.php,v 1.6 2008/09/24 22:48:21 merlinofchaos Exp $
/**
* @file views-view-fields.tpl.php
* Default simple view template to all the fields as a row.
*
* - $view: The view in use.
* - $fields: an array of $field objects. Each one contains:
* - $field->content: The output of the field.
* - $field->raw: The raw data for the field, if it exists. This is NOT output safe.
* - $field->class: The safe class id to use.
* - $field->handler: The Views field handler object controlling this field. Do not use
* var_export to dump this object, as it can't handle the recursion.
* - $field->inline: Whether or not the field should be inline.
* - $field->inline_html: either div or span based on the above flag.
* - $field->separator: an optional separator that may appear before a field.
* - $row: The raw result object from the query, with all data it fetched.
*
* @ingroup views_templates
*/
?>
Titel: <?php print $fields['title']->content; ?>
Bild: <?php print $fields['field_bild_fid']->content; ?>
Latitude: <?php print $fields['field_lat_value']->content; ?>
Longitude: <?php print $fields['field_long_value']->content; ?>
<br>
Meine views-view-list--MEIN-VIEW.tpl.php
<?php
// $Id: views-view-list.tpl.php,v 1.3 2008/09/30 19:47:11 merlinofchaos Exp $
/**
* @file views-view-list.tpl.php
* Default simple view template to display a list of rows.
*
* - $title : The title of this group of rows. May be empty.
* - $options['type'] will either be ul or ol.
* @ingroup views_templates
*/
?>
<?php foreach ($rows as $id => $row): ?>
<?php print $row; ?>
<?php endforeach; ?>
Ausgabe:
Titel: Stop! Bild: sites/default/files/stop.jpg Latitude: 52.9792 Longitude: 8.6685
Titel: Biene Maja Bild: sites/default/files/bienemaja.jpg Latitude: 52.5231 Longitude: 8.4815
Titel: Hasy Wasch Bild: sites/default/files/HasyWash.jpg Latitude: 52.4973 Longitude: 8.4503
Alles super, alles happy, hoffe das andere die das gleiche Problem haben durch diesen Beitrag schneller ans Ziel kommen! ;)
THNX noch mal an Stefan!
Feldnamen in $fields?
am 07.02.2010 - 11:28 Uhr
Moin,
möchte mich hier mal einklinken, weil ich vor einem ähnlichen Problem stehe.
Ich habe einen Inhaltstyp 'News' mit Titel, Bild und Kurzbeschreibung. In der views-view-fields.tpl.php wollte ich nun wie oben beschrieben, den content der einzelnen Felder direkt ansprechen.
print $fields['title']->content;
...ist kein Problem. Aber wie weiss ich, wie die anderen Felder in dem Array heissen? Also habe ich ein print_r von $fields in eine Datei umgeleitet, um mir den Inhalt anzuschauen. Dort finde ich aber nur 2 Felder: created und title.
Obwohl created vorhanden ist, kann ich den Inhalt nicht ausgeben???
print $fields['created']->content;
...keine Ausgabe, obwohl das Array $fields, so beginnt:
Array
(
[created] => stdClass Object
(
[content] => 21.01.2010 - 22:44
[raw] => 1264110273
...
Und jetzt wird's echt merkwürdig. Wenn ich $fields über eine Schleife ausgebe, werden alle Inhalte (Titel, Bild und Kurzbeschreibung) ausgegeben.
foreach ( $fields as $f ) {
print $f->content . "<br />\n";
}
Das ist aber nicht das, was ich will. Ich möchte die Inhalte ja in meinem eigenen (unaufgeblähten) Markup platzieren.
Was mache ich falsch?
PS: ich habe auch mal
drupal_set_message('<pre>' . var_export(array_keys((array)$fields), 1) . '</pre>');
ins View geschrieben, aber da passiert überhaupt nichts.
Ich kann nicht sehen,
am 07.02.2010 - 11:47 Uhr
Ich kann nicht sehen, welches Array Du hier zeigst. Die Namen in $fields sind die internen Namen der CCK-Felder, die Du ausgibst. Du gibst ja bei der Erstellung immer den lesbaren und den internen Namen pro Feld an. Daneben hast Du die Felder die $node von Hause aus mitbringt (z.B. $title), aber nur, wenn Du sie im View auch als Feld ausgibst.
Beste Grüße
Werner
.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *
Denkfehler
am 07.02.2010 - 11:57 Uhr
Ich hatte in die views-view-fields.tpl.php folgenden code platziert:
file_put_contents('fields.txt', print_r($fields, true));
So wurde die Datei natürlich in jedem Durchlauf überschrieben. Irgendwie war ich gedanklich nicht dabei, dass es sich hier immer um einen Eintrag handelt.
file_put_contents('fields.txt', print_r($fields, true), FILE_APPEND);
...brachte Licht ins Dunkel.