[gelöst] Feld-Werte berechnen und mit View anzeigen

am 27.02.2010 - 16:20 Uhr in
Hallo Leute,
ich bin leider kein php-Programmierer und scheitere deshalb genau an dieser Stelle. Zunächst, was ich überhaupt will:
- ich will ein Block (mit View) erstellen der ein "Endergebnis" anzeigt.
- Endergebnis ist die Summe aller Ereigniswerte, die in den Nodes des Typs "Ereignis" stehen
endergebnis = ereigniswert1 + ereigniswert2 + ...
Im meinem (neuen) Inhaltstyp "Ereignisse" (schauen genauso aus wie die Standardartikel, bis auf einn zusätzliches Feld namens "Ereigniswert", die mit einer Ganzzahl gefüllt werden, z.b. Ereigniswert=20
Ein Beispiel nochmal, dass es nicht verwirrt:
node/3 ist ein Ereigniss mit dem Ereigniswert = 20
node/4 ist ein Ereigniss mit dem Ereigniswert = -30
Jetzt sollte auf der Homepage ein Block zu sehen sein, der nur "Gesamtergebnis = xx" enthält (in dem oben genannten Beispiel als Gesamtergebnis = -10)
Was ich tat:
Ich verwende das Modul "CCK Computed Field" um eine berechnete Variable zu erstellen: "Endergebnis"
(geholfen hat mir diese kurze Anleitung zunächst: http://www.drupalcenter.de/handbuch/12418 Werte eines Node mit Werten von einem anderen Node berechnen):
Mit Computed Fields lassen sich auch Zahlenwerte verschiedener Nodes miteinander berechnen. Z. B. gibt es einen Nodetyp "loehne" in dem die Stundenlöhne verschiedener Mitarbeiter wie Lehrling, Geselle und Meister jeweils als Felder "lohn_lehrling" lohn_geselle" und "lohn_meister" gespeichert sind.
Jetzt kann man einen separaten Node machen, in dem die Lohnsummen berechnet werden. Dazu ist es zuerst mal erforderlich, ein "Node Reference"-Feld anzulegen, das auf den Node "loehne" verweist, guckst Du: http://www.drupalcenter.de/handbuch/5016
Als Node-Typen, zu denen verwiesen werden kann, wählt man natürlich "loehne" aus. Dann kann man mittels folgendem Code z. B. auf das Feld "lohn_meister" zugreifen und den Wert in die Berechnung einbeziehen:
$node_field[0]['value'] = db_result(db_query("SELECT field_lohn_meister_value FROM content_type_loehne WHERE nid=%d",$node->field_node_reference[0][nid])) * $node->field_stundenzahl[0]['value'] ;
Das Feld "$node->field_stundenzahl[0]['value']" ist natürlich in dem Node, in dem auch das Computed Field eingesetzt wird.
Das Feld $node->field_node_reference[0] steht für das Feld Node Reference, also Name halt entsprechend ändern.
Ich habe jetzt die im Beispiel genannten Typen usw. dementsprechend umbenannt, aber ich erhalte die Fehlermeldung:
user warning: Tabelle 'usr_webxxx_1.content_type_ereignisse' existiert nicht query: SELECT field_ereigniswert FROM content_type_ereignisse WHERE nid=33 in /var/www/webxxx/html/sites/all/modules/computed_field/computed_field.module(161) : eval()'d code on line 1.
Deshalb zwei Fragen:
1. Ob mir jemand erklären kann, was man für ein phpCode verwenden sollte, die mein obiges Beispiel realisiert bzw. erklärt, was das im Handbuch aufgeführte Code da eigentlich anstellt ;) ?
2. Ob es nicht eine viel einfache Methode gibt, Werte aus mehreren Nodes zusammenzurechnen und sie dann über ein Computed Field auslesen kann? (ich konnte per Modul View eine Liste mit allen Ereignisnodes und ihren Werten auslesen lassen. Jetzt fehlt quasi nur noch die Summe.)
Ich hoffe man kann mir weiterhelfen,
Fala
- Anmelden oder Registrieren um Kommentare zu schreiben
Hab eine Lösung mit
am 01.03.2010 - 11:08 Uhr
Hab eine Lösung mit db_result(db_query("SELECT SUM(field_ereigniswert_value) FROM `dpxxx_content_type_ereignis`")); gefunden und es werden jetzt erfolgreich die werte addiert, aber...
dies geschieht nur, wenn ich ein weiteren inhaltstyp "ereignis" schreibe, weil die variable gesamtwert mit CCK für genau diesen inhaltstypen definiert wurde. problem:
während
node4 mit ereigniswert 30 und
node5 mit ereigniswert 20 erst mit
node6 addiert wird (also =50), aber node6 enthält dann aber wieder ein ereigniswert 10 z.b. bleibt der gesamtwert weiterhin (=50) erst
nach dem erstellen eines weiteren node wird die 10 dazu addiert usw.
wie kann ich ein block erstellen, der allein durch den aufruf des blocks (der nur den gesamtwert anzeigt) den obengenannten phpcode ausführt, und nicht erst nachdem ich einen weiteren ereignistypen erstelle?
edit: habs dann doch irgendwie hinbekommen
Schön wäre zu wissen wie du
am 27.01.2012 - 15:30 Uhr
Schön wäre zu wissen wie du es hinbekommen hast...