Modul programmieren, das ähnl. wie ein View Werte ausgibt
am 30.09.2010 - 09:23 Uhr in
hallo,
ich versuche jetzt schon seit 3-4 Tagen, einen View zu bauen, der mir einige Werte aus der DB ausließt, umrechnet und ausgibt.
Es handelt sich um 5-7 Felder aus der DB aus 2 verschiedenen Tabellen (2 Inhalttyps).
Es wird genau ein ROW ausgegeben mit berechneter Felder
1x Durchschnittswert aller Zeilen
1x MAX Wert aller Zeilen...
1x Zeile A + Zeile B
1x Durchschnitt A wenn im Zeile A ein Wert zwischen 1 bis 10
1x Durchschnitt A wenn im Zeile A ein Wert zwischen 10 bis 20 ....
und so weiter.
Also, Durchschnittswerte einer Spalte oder MAX- oder SUM-Werte könnte ich ganz einfach mit Views Calc berechnen und ausgeben.
Problematisch wird wenn ich zwischen Spalten und ausgegebenen Werten kombinieren und rechnen muss. Das lässt sich vielleicht auch mit Views Calc lösen, aber nicht direkt im View Ansicht, sondern erst in Modul-Einstellungen von Views Calc ... dies scheint mir nicht so komfortabel
Deswegen habe ich mich entschieden, für diesen Fall einen Mini-Modul zu programmieren, das mir genau diese Werte aus der DB ausließt, berechnet und ausgibt. SO,
das Modul habe ich angelegt, SQL-Abfrage findet statt, aber ich weiß jetzt leider nicht, wie könnte ich diesen neue berechnete Werte bei jedem Node von z.B. Inhalttyps "Auto" hinzufügen?? Welche Hook-Funktion erledigt dies und wie muss sie aussehen?
Danke
- Anmelden oder Registrieren um Kommentare zu schreiben

Mit $node = node_load($nid);
am 30.09.2010 - 09:37 Uhr
Mit
$node = node_load($nid);kannst Du Dir einen Node laden und mitnode_save($node);auch wieder speichern. Wenn die NodeStruktur bereits das zu füllende Feld hat, ist das mit einer simplen Zuweisung dazwischen zu erledigen. Falls nicht empfehle ich, erst mit CCK das Feld für den entsprechenden Datentyp anzulegen.Beste Grüße
Werner
Um das als Wert dem Node
am 30.09.2010 - 09:49 Uhr
Um das als Wert dem Node Objekt zuzuordnen benötigst Du den hook_nodeapi(). mit dem switch "load"
Also z.B. so:
<?php/**
* Implementation of hook_menu().
*/
function mymodule_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
if($node->type == 'my_content_type') {
switch($op) {
case 'load':
$node->irgendwas = 'irgendwas';
break;
}
}
}
?>
ja, genau so habe ich das
am 30.09.2010 - 10:45 Uhr
ja, genau so habe ich das jetzt vor,
was meinst Du konkret unter "irgendwas" hier:
$node->irgendwas
muss nicht hier "$node->content" stehen?
Wie kann ich diese zusätzliche Felder dann noch richtig platzieren in meinem NODE?
wla schrieb Mit $node =
am 30.09.2010 - 10:49 Uhr
Mit
$node = node_load($nid);kannst Du Dir einen Node laden und mitnode_save($node);auch wieder speichern. Wenn die NodeStruktur bereits das zu füllende Feld hat, ist das mit einer simplen Zuweisung dazwischen zu erledigen. Falls nicht empfehle ich, erst mit CCK das Feld für den entsprechenden Datentyp anzulegen.Werner
hallo Werner,
das könnte ich dann eigenltich direkt in meiner template.php machen, ohne ein Zusatzmodul dafür zu programmieren, oder?
Weil, wenn ich es in ein Modul packe, dann brauche ich auch passenden Hook() der mir das in einem geöffneten NODE ausgibt, oder?
verstehe ich das richtig??
Du kannst es natürlich auch
am 30.09.2010 - 10:53 Uhr
Du kannst es natürlich auch in $node->content packen.
Wenn Du es aber in einer eigenen Variable im Template zur Verfügung haben willst, musst Du es als eigene Variable anlegen.
Die Zuweisung erfolgt dann über das Node Objekt.
Soll die Variable $myparam heissen muss Du im hook_load(). $node->myparam einen Wert zuweisen.
wenn ich dann mit $myparam
am 30.09.2010 - 11:26 Uhr
wenn ich dann mit
$myparam heissen muss Du im hook_load(). $node->myparamarbeite, dann muss ich diese Variable NICHT zwingend als neues Feld in CCK anlegen,
und wenn ich mich entscheide, für meine Variable $myparam ein neues Feld in CCK anzulgen, dann könnte ich
dieses Feld so ändern:
$node['field_myparamfieldp_value']->content ="etwas" ?>oder?
verstehe ich das richtig?
Du Zuweisung müsste dann
am 30.09.2010 - 11:33 Uhr
Du Zuweisung müsste dann $node->field_myparam heissen, also der Feldname, den Du definiert hast.
Also Du mußt den Node schon
am 30.09.2010 - 11:45 Uhr
Also Du mußt den Node schon um das Feld erweitern, sonst speichert Drupal Deine Information nicht. Also mußt Du mit CCK ein zusätzliches Feld anlegen, in dem der Wert von Drupal gespeichert werden kann.
Beste Grüße
Werner
wla schrieb Also Du mußt den
am 30.09.2010 - 11:59 Uhr
Also Du mußt den Node schon um das Feld erweitern, sonst speichert Drupal Deine Information nicht. Also mußt Du mit CCK ein zusätzliches Feld anlegen, in dem der Wert von Drupal gespeichert werden kann.
Werner
diese Werte werden nicht gespeichert, bzw. ich muss sie nicht speichern. Es sollte eigentlich nur ein "custom" View sein, dass sich einem Node "anhängt"
Dann kannst Du die Berechnung
am 30.09.2010 - 12:06 Uhr
Dann kannst Du die Berechnung im template.php in der preprocess_node-Funktion erledigen und das Ergebnis in eine Variable packen. Die wird dann im node-tpl.php, abhängig von Existens und Nodetyp, bei Bedarf ausgegeben.
Beste Grüße
Werner
wla schrieb Dann kannst Du
am 30.09.2010 - 12:34 Uhr
Dann kannst Du die Berechnung im template.php in der preprocess_node-Funktion erledigen und das Ergebnis in eine Variable packen. Die wird dann im node-tpl.php, abhängig von Existens und Nodetyp, bei Bedarf ausgegeben.
Werner
wie würde die Ausgabe in node-tpl.php aussehen?
Hi, für eine gescheite Views
am 30.09.2010 - 13:56 Uhr
Hi,
für eine gescheite Views Integration musst
Du den views_data hook implementieren.
Dann kannst Du die benötigten Felder die Du ausliest und berechnest
einfach in dern Einstellungen der Ansicht auswählen.
LG