[gelöst] Addition von Feldern in einer View und Anzeige im überschriebenen Inhalt eines anderen Feldes.
am 20.01.2014 - 09:14 Uhr in
Hallo Drupal-Community,
Ich würde gern die Summe von 3 Feldern einer View im überschriebenen Text eines anderen Feldes anzeigen.
Angenommen ich habe in einer View die Felder A, B, C und D. Ich habe den Inhalt von Feld D überschrieben und darin die Felder A,
B und C mit in den angezeigten Text integriert (Nach dem Ersetzungsmuster). Dazu habe ich benutzerdefinierten Text und die entsprechenden
Ersetzungs-Tokens eingegeben. Jetzt würde ich gern zusätzlich in dem diesem benutzerdefinierten Text die Summe aus Feld A, B und C als
Ersetzungstoken (oder wie auch immer) mit anzeigen lassen. Zunächst dachte ich, ich würde dazu das Modul View Calc benutzen können, allerdings ist
mir unklar, in welcher Form ich dann die Felder addiere. Wie würdet ihr vorgehen?
- Anmelden oder Registrieren um Kommentare zu schreiben
Ich würde
am 20.01.2014 - 11:49 Uhr
Ich würde https://drupal.org/project/views_php nehmen.
Damit hast du ein Global PHP Feld in dem du die Berechnungen durchführen kannst ... als Ergebniss kannst hast du dann einen Token den du z.B. in Feld D ausgeben kannst.
Drupal rockt!!!
Computed Field
am 21.01.2014 - 08:54 Uhr
Danke für den Tipp. Da es nur eine Developer Distribution von Views php gab, habe ich das Modul Computed Field genommen.
Im Inhaltstyp habe ich das Feld XY als computed Field angelegt und im Computed Code zunächst das Entity-Objekt auf den Feldwert referenziert
und dann die Summe Berechnen lassen.
<?php
$A = $entity->field_A[LANGUAGE_NONE][0]['value'];
$B = $entity->field_B[LANGUAGE_NONE][0]['value'];
$C = $entity->field_C[LANGUAGE_NONE][0]['value'];
$entity_field[0]['value'] = $A + $B + $C
?>
Als Display Code:
<?php
$display_output = $entity_field_item['value'];
?>
Das ganze gespeichert und in der View das Überschriebene Feld angepasst und dort den Token für das Computed Field XY eingesetzt.
Großes Kino war dann, dass ich bei jeder Änderung auch den Inhaltstyp noch einmal speichern musste, weil das Feld nur bei Aktualisierung/Erstellung computed wird.
Zwischendurch hat es dann tatsächlich mal funktioniert.
Jetzt nachdem ich die View und den Inhaltstypen mit allen Feldern fertig habe, habe ich einen neuen Test.Inhalt angelegt und OH WUNDER...er zeigt keinen Wert für Feld XY in der View an. Ideen?
Wie schonmal gesagt nutze ich
am 21.01.2014 - 12:08 Uhr
Wie schonmal gesagt nutze ich "Views PHP" dafür .... obwohl es dev ist , funzt es tadellos.
Wenn du dieses Modul nicht nutzen willst, kann ich nicht weiterhelfen!
Drupal rockt!!!
Da man PHP-Code möglichst
am 21.01.2014 - 13:04 Uhr
Da man PHP-Code möglichst nicht in der Datenbank speichern sollte, wäre ein Views Template bzw. eine Preprocess-Funktion evtl. sauberer. Dann führst du deine Berechungen im Template / in der Preprocess Funktion durch und gibst die Daten auch dort aus.
Läßt sich auch wesentlich besser debuggen.
Wie mach ich das?
am 21.01.2014 - 13:15 Uhr
Ich weiß gerade nicht, wie ich das machen müsste. Kannst du mir das erklären? (Nachsicht, Drupal und ich wurden uns erst vor kurzer Zeit bekannt gemacht...)
Views Template
am 21.01.2014 - 15:34 Uhr
Also die wirklichen Programmierer würden mich schlagen und sagen, ich soll im Views Template die Daten wiederum über eine Preprocess oder sonstige Funktion laden.
Wenn du aber ein finsterer Wochenendprogrammierer bist wie ich, dann kannst du das schon machen.
Du machst also ein Views Field Template für Feld D.
Das dafür passende Template mit Code und Namen findest du hier http://screencast.com/t/0mVwAE9V
Genauer ist das hier erklärt:
http://www.ostraining.com/blog/drupal/views-templates/
In dem Field Template müßtest du die Werte der drei anderen Felder laden. Dazu könntest du dir das $view oder $row-Objekt laden, je nachdem wo die für die entsprechende row (das wären jeweils die zusammenpassenden Felder) drinnestehen.
Das gibst du dir mit dpm() aus (Devel-Modul installieren) http://ratatosk.net/drupal/tutorials/debugging-drupal.html
Krumo gibt dir die ganzen Objekte und Arrays schön geordnet aus, so daß du dir alles passend raussuchen kannst.
Die Werte kannst du dann schön zusammenrechnen und die eigentliche Ausgabe des Feldes mit dem errechneten Wert überschreiben.
Da du dich im Views Template befindetst, ist das einfach. Da steht normalerweise nur die Variable $output, die mußt du vorher überschreiben, bevor sie ausgegeben wird.
Du kannst dir dann noch die gewünschte Formatierung drumbauen, wenn das Standard-HTML nicht reicht.
Auf die Art kannst du mit Views so ziemlich alles in jeder gewünschten Formatierung ausgeben.
Die Lösung gestaltete sich
am 21.01.2014 - 16:21 Uhr
Die Lösung gestaltete sich für mich wesentlich einfacher...vielleicht unschön, das kann ich nicht beurteilen...aber es funktioniert zumindest und bekanntlich führen viele Wege nach Rom:
Ich habe neben dem Computed Field Modul auch die Computed Field Tools installiert und dann einmal alle Computed Fields re-computet und dann...oh Wunder...zeigte meine View im überschriebenen Feld den Wert meines Feldes an. :)
Danke für Eure Hilfe!