Durchschnitt eines Integer CCK Feldes['gelöst']
am 12.08.2008 - 15:10 Uhr in
Ich habe ein CCK-Feld erstellt:
<?php
print $field_xy['0']['value']
?>
Mit diesem Code kann ich die eingegebene Zahl des Users in dem Node wiedergeben. Die Nodes sind mit verschiedenen Taxonomys verknüpft, also in Kategorien unterteilt.
Jeder einzelne Node hat diese Zahl, nun möchte ich den Durchschnitt dieses Feldes, aller Nodes die mit dem Taxonomy verknüpft sind. Diesen Durchschnitt möchte ich nun in den Nodes selber als auch in den Taxonomy Views anzeigen. Das wäre kein Problem wenn man die geeignete Funktion definiert.
Ich habe mir so etwas vorgestellt:(auch wenn ich weiß dass es so nicht funktioniert, aber deshalb frage ich ja hier...)
<?php
function custom_average_xy($taxonomy['mytaxonomy']) {
$taxonomy = 'mytaxonomy'; // Die Taxonomy die ich auswählen möchte
$nodes = node_load($taxonomy); // Lade alle Nodes die mit dem Taxonomy übereinstimmen
$nodescount = count nodes($taxonomy) // Zähle die Anzahl der Nodes, die diesem Taxonomy zugeordnet sind
if ($taxonomy) { // Nur Nodes die dem Taxonomy zugeordnet sind
foreach ($nodes as $node) {
$output = $node->content['field_xy'] // Gib für jeden Node den Inhalt von field_xy wieder
// An dieser Stelle müsste jede Zahl miteinander addiert werden
}}
$average = $output / $nodescount //Der addierte Wert geteilt durch die Anzahl der Nodes ergibt den Durchschnittswert
}
?>
Ich denke damit konnte ich gut verdeutlichen, was ich haben will, und so in der richtung muss man denken, auch wenn die syntax und so weiter oben komplett falsch sind. Darum ging es mir aber ja auch nicht.
Jetzt bräuchte ich noch jemanden mit Erfahrung der das Durcheinander sozusagen aufräumt und daraus eine gescheite Funktion bastelt. Weil ich weiß dass es ungefähr in die Richtung geht in die ich gedacht habe, nur würde ich es alleine nie hinbekommen, den code zum funktionieren zu bringen...
Wäre über Hilfe sehr dankbar, diese Funktion wäre sicher nicht nur für mich hilfreich. Danke schon mal im Voraus, ich bedanke mich außerdem schon mal für die vielen Antworten in den anderen Threads von mir, ihr habt mir sehr geholfen!
- Anmelden oder Registrieren um Kommentare zu schreiben
mit welcher Drupalversion er es bei Deiner Aufgabe zu tun hat
am 12.08.2008 - 16:07 Uhr
Zu aller Erst.
Egal wer Dir hilft. Er sollte wissen mit welcher Drupalversion er es bei Deiner Aufgabe zu tun hat.
Zu Deinem Code.
Hast Du auf http://api.drupal.org/api/function/node_load/5 mal nachgesehen was node_load() so macht bzw. wie man die Funktion verwenden kann?
$taxonomy = 'mytaxonomy'; // Die Taxonomy die ich auswählen möchte
$nodes = node_load($taxonomy); // Lade alle Nodes die mit dem Taxonomy übereinstimmen
$nodescount = count nodes($taxonomy) // Zähle die Anzahl der Nodes, die diesem Taxonomy zugeordnet sind
Diese Logik kann nicht funktionieren.
Um die zu einem Term gehoerenden Nodes zu zaehlen gibt es eine andere Drupal Funktion.
Du solltest Dich mal auf http://api.drupal.org/api ein wenig umsehen.
Dann wirst Du eventuell diese Funktion entdecken: taxonomy_term_count_nodes()
Description
Count the number of published nodes classified by a term.
Parameters
$tid The term's ID
$type The $node->type. If given, taxonomy_term_count_nodes only counts nodes of $type that are classified with the term $tid.
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.
Hallo drupaler3000, Wenn ich
am 12.08.2008 - 16:57 Uhr
Hallo drupaler3000,
Wenn ich dich richtig verstanden habe, sollte es folgende Funktion tun (nicht getestet):
<?php
function custom_average_xy( $tid) {
$result = db_query( "SELECT AVG(ctype.field_xy) FROM {content_type_namedesctypes} AS ctype, {term_node} AS tn WHERE tn.nid = ctype.nid AND tn.tid = %d", intval( $tid));
$average = db_fetch_object( $result);
return $average->field_xy;
}
?>
$tid = die ID des Taxonomy Terms.
Grüße,
Robin
Grüße,
Robin
Was genau muss ich da jetzt
am 12.08.2008 - 17:31 Uhr
Was genau muss ich da jetzt erstetzen?
field.xy mit dem namen meines feldes.
content_type_namedesctypes = content_type_blog oder nur blog ?
{term_node} so lassen, oder?
Wenn ich das jetzt beispielsweise in node.tpl.php - datei schreiben wollte, müsste es so aussehen oder?:
<?php
print custom_average_xy($tid)
?>
Wo mach ich Tid Nummer jetzt hin, so?:
<?php
print custom_average_xy($262)
?>
<?php
print custom_average_xy($tid['262'])
?>
Folgende Warnung kommt:
user warning: Unknown column 'ctype.field_wertung' in 'field list' query: SELECT AVG(ctype.field_wertung) FROM content_type_blog AS ctype, term_node AS tn WHERE tn.nid = ctype.nid AND tn.tid = 0 in /www/htdocs/w00a0a1e/includes/database.mysql.inc on line 172.
Oder muss ich die Tid in der funktion selber irgendwo einsetzen?
Hallo
am 12.08.2008 - 17:48 Uhr
Hallo drupaler3000,
<?php
print custom_average_xy( 262);
?>
Im Zweifel musst du in der DB nachsehen, in welcher Tabelle das CCK Field abgespeichert wird,
bei Inytegers ist dies idr in der content_type_xxx wobei xxx Name des Contenttypes.
Grüße,
Robin
Grüße,
Robin
so ich hab jetzt mal
am 12.08.2008 - 18:22 Uhr
so ich hab jetzt mal nachgeschaut, bei dem feldnamen muss es anscheinend field_wertung_value heißen. Die Fehlermeldung ist jetzt weg, aber es wird leider auch gar nichts ausgegeben.
Kann man das denn überhaupt in die node.tpl.php datei reinschreiben?
Was willst Du denn reinschreiben?
am 12.08.2008 - 18:36 Uhr
Kann man das denn überhaupt in die node.tpl.php datei reinschreiben?
Was willst Du denn reinschreiben?
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.
<?phpprint
am 12.08.2008 - 18:45 Uhr
<?php
print custom_average_xy( 262);
?>
Hallo drupaler3000, sofern
am 12.08.2008 - 21:52 Uhr
Hallo drupaler3000,
sofern die Funktion in der template.php steht, ja.
Gib den Query bitte mal in phpMyAdmin ein und schau mal
was du dort als Ergebnis bekommst.
Grüße,
Robin
Grüße,
Robin
Da steht ich hätte einen
am 13.08.2008 - 08:21 Uhr
Da steht ich hätte einen Error in der SQl Syntax. Ich benutze Mysql 5 mit Drupal 5.
Fehlermeldung:
SELECT AVG( ctype.field_wertung_value )
FROM {content_type_blog} AS ctype, {term_node} AS tn
WHERE tn.nid = ctype.nid
AND tn.tid = % d
MySQL meldet:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '} AS ctype, {term_node} AS tn WHERE tn.nid = ctype.nid AND tn.tid = %d' at line 1
SQL-Fehler
am 13.08.2008 - 08:35 Uhr
Moin!
Wenn Du das Statement direkt an MySQL sendest, musst Du die geschweiften Klammern weglassen.
Die markieren in drupal Platzhalter für den Tabellennamen, wenn das Statement über drupal_query() ausgeführt wird.
hth,
Stefan
Nachtrag: und das "%d" musst Du natürlich auch noch durch die entsprechende Id des Term ersetzen.
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Danke stefan, jetzt hats
am 13.08.2008 - 09:12 Uhr
Danke stefan,
jetzt hats geklappt!
Folgende Datenbankabfrage direkt in mysql:
SELECT AVG(ctype.field_wertung_value) FROM content_type_blog AS ctype, term_node AS tn WHERE tn.nid = ctype.nid AND tn.tid = 262
Er gibt einen Wert zurück!
Hallo drupaler3000, ist es
am 13.08.2008 - 09:38 Uhr
Hallo drupaler3000,
ist es der gewünschte Wert? Poste doch bitte nochmal die Funktion
wie du sie nun in der template.php stehen hast, wenn das print im
Template nichts ausgibt.
Grüße,
Robin
Grüße,
Robin
Funktion in der template.php
am 13.08.2008 - 10:11 Uhr
Funktion in der template.php - datei:
<?php
function custom_average_xy($tid) {
$result = db_query( "SELECT AVG(ctype.field_wertung_value) FROM {content_type_blog} AS ctype, {term_node} AS tn WHERE tn.nid = ctype.nid AND tn.tid = 262", intval( $tid));
$average = db_fetch_object( $result);
return $average->field_wertung_value;
}
?>
in der node.tpl.php - datei:
<?php
print custom_average_xy(262);
?>
ich habe das %d in 262 geändert, mit und ohne diese änderung, es wird leider nichts ausgegeben...
Ändere deine Funktion mal
am 20.08.2008 - 14:04 Uhr
Ändere deine Funktion mal so ab:
<?php
function custom_average_xy($tid) {
$result = db_query( "SELECT AVG(ctype.field_wertung_value) avgfield FROM {content_type_blog} AS ctype, {term_node} AS tn WHERE tn.nid = ctype.nid AND tn.tid = %d", intval($tid));
$average = db_fetch_object($result);
return $average->avgfield;
}
?>
Juhuuuuuuuuuuuuuuuuuuuuuuuuuu
am 20.08.2008 - 16:44 Uhr
Juhuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu!
Es funktioniert!!!!!!!!!!!!!!!!!!!!!!!!!!!!11
Ich danke dir übwer alles! Das erspart mir viel "Code-Grübeln!!". Ich muss die SQL-Sprache auch mal lernen.
Was ich hier noch nicht angefragt habe, weil es zuerst im Hintergrund stand, ist, den Code des Tokens ['term-id']('Top Taxonomy Term'). Von diesem Top Taxonomy Term möchte ich die Tid, und diese dann dynamisch in die Klammern des Codes setzen, dann wäre es perfekt!
Ansonsten würde ich das noch selber versuchen, aber ich habe halt in jedem Node den Top Taxonomy Term, und den Durchschnitt dieser TID brauche ich, wenn das jemand versteht...
Hallo, wie muss ich den Code
am 03.09.2010 - 12:33 Uhr
Hallo,
wie muss ich den Code ändern, damit nur veröffentlichte Nodes mit einbezogen werden?