Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Module › Modul-Entwicklung ›

[gelöst]Durchschnittswert mehrerer Fivestar Felder berechnen

Eingetragen von glycid (921)
am 31.07.2013 - 10:14 Uhr in
  • Modul-Entwicklung

Moinsen zusammen,

ich habe einen Inhaltstyp, mit dem User andere User nach vier Kriterien mittels Fivestar bewerten können. Felder: Kriterium1, Kriterium2, Kriterium3, Kriterium4 . Es soll ein fünftes Feld "Gesamt" erstellt werden, das den Durchschnittswert der einzelnen Felder K1, K2, K3 und K4 wiederum mit Fivestar ausgibt.

Mein Ansatz ist das Modul computed_field mit einem kleinen Hilfsmodul, das den entsprechenden Code enthält:

<?php
//holen und berechnen der Werte
function computed_field_field_gesamt_compute(&$entity_field, $entity_type, $entity, $field, $instance, $langcode, $items) {

$entity_type = 'node';
$id = $entity->nid;

//fivestar_get_votes() liefert ein Array mit drei Elementen
  $k1 = fivestar_get_votes($entity_type, $id, $tag = 'vote', 'field_kriterium_1');
  $k2 = fivestar_get_votes($entity_type, $id, $tag = 'vote','field_kriterium_2');
  $k3 = fivestar_get_votes($entity_type, $id, $tag = 'vote', 'field_kriterium_3');
  $k4 = fivestar_get_votes($entity_type, $id, $tag = 'vote', 'field_kriterium_4');

  $wert1 = $k1['average']['value'];
  $wert2 = $k2['average']['value'];
  $wert3 = $k3['average']['value'];
  $wert4 = $k4['average']['value'];
 

  $total = $wert1 + $wert2 + $wert3 + $wert4;
  $ave = $total / 4;

  $entity_field[0]['value'] = $ave;
}

//Ausgabe computed_field "Gesamt"
function computed_field_field_gesamt_display($field, $entity_field_item, $entity_lang, $langcode){
  
   
    $ave = $entity_field_item['value'];   
   
  
    $variables = array("rating" => $ave, "stars" => 5);
    $variables["widget"]["name"] = "basic";
    $variables["widget"]["css"] = "sites/all/modules/fivestar/widgets/basic/basic.css";

    //Fivestar CSS hinzufügen
    drupal_add_css(drupal_get_path('module', 'fivestar') .'/css/fivestar.css');

    return theme('fivestar_static', $variables);
  
}

Das funktioniert auch wunderbar mit dem Fivestar Steuerelement "rated while viewing". Jedoch nicht, wenn als Steuerelement der Fivestar- Felder "rated while editing" ausgewählt wird, das rating also auf der node/add Seite erfolgt. In dem Fall kann fivestar_get_votes() die Feldwerte nicht holen und das Array ist leer.

Alternativ hab ich versucht, die Feldwerte mit field_get_items() und field_view_field() zu bekommen. Da ergibt sich jedoch das Problem, das PHP beim speichern der Node mit der Fehlermeldung, es stehe nicht genug memory_limit zur Verfügung, abbricht. Es ist auch egal, wie hoch das Limit setze, der Fehler bleibt. Ich denke, es hängt eher damit zusammen, das field_get_items() und field_view_field() innerhalb der Funktion computed_field_field_gesamt_compute() ausgeführt wird.

Danke an alle, die sich die Mühe machen, das hier alles zu lesen. Vielleicht hat ja jemand eine Idee, wie das Problem für das Fivestar Steuerelement rated while editing zu lösen sein könnte.

‹ [gelöst] Checkbox mit variablen Links in der Bezeichnung [gelöst]Durchschnittswert mehrerer Fivestar Felder berechnen ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Habe bereits eine

Eingetragen von Peter Majmesku (656)
am 31.07.2013 - 20:38 Uhr

Habe bereits eine Durchschnittsberechnung von Fivestar in einem Projekt gelöst.

Zitat:

Jedoch nicht, wenn als Steuerelement der Fivestar- Felder "rated while editing" ausgewählt wird, das rating also auf der node/add Seite erfolgt. In dem Fall kann fivestar_get_votes() die Feldwerte nicht holen und das Array ist leer.

Kannst du einen Screenshot von dem Steuerelement machen? Verstehe nicht ganz, was das ist und wozu du das brauchst.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Moin Jepster, danke für Deine

Eingetragen von glycid (921)
am 31.07.2013 - 21:37 Uhr

Moin Jepster,

danke für Deine Antwort. Das Steuerelement, in der englischen Oberfläche "Widget" genannt, findest Du bei den Feldeinstellungen. "rated while editing" bedeutet, dass die User ihre Bewertung auf der node/add oder node/[nid]/edit Seite des betreffenden Inhaltstypen vornehmen können. Ist "rated while viewing" ausgewählt, können die Bewertungen erst nach dem Speichern des Nodes erfolgen.

AnhangGröße
steuerelemente.png 29.95 KB
  • Anmelden oder Registrieren um Kommentare zu schreiben

Also wenn der

Eingetragen von Peter Majmesku (656)
am 31.07.2013 - 22:08 Uhr

Also wenn der Durchschnittswert bereits angezeigt wird, verfällt die Möglichkeit, dass anhand des Klicks innerhalb der Sterne ein Rateing aufgenommen wird, ja?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ja

Eingetragen von glycid (921)
am 31.07.2013 - 22:22 Uhr

Ja

  • Anmelden oder Registrieren um Kommentare zu schreiben

Sind in der JavaScript

Eingetragen von Peter Majmesku (656)
am 01.08.2013 - 09:06 Uhr

Sind in der JavaScript Konsole von z.B. Chrome irgendwelche Fehler zu sehen?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Nein, keine JS Fehler. Alle

Eingetragen von glycid (921)
am 03.08.2013 - 05:53 Uhr

Nein, keine JS Fehler. Alle Fehler, die auftreten, sind im ersten Post beschrieben. Das Frage ist doch, wie komme ich an die Rating- Werte, die vor dem Speichern der Node per Fivestar gesetzt werden.

  • Anmelden oder Registrieren um Kommentare zu schreiben

du könntest doch per js die

Eingetragen von sepp68 (444)
am 03.08.2013 - 07:29 Uhr

du könntest doch per js die Rating-Werte abfragen, den Durchschnitt berechnen und an ein Formularelement übergeben, das du per js/css oder hiddem-Property ausgeblendet hast ....

  • Anmelden oder Registrieren um Kommentare zu schreiben

Vielleicht hilft dir dieser

Eingetragen von Peter Majmesku (656)
am 03.08.2013 - 11:26 Uhr

Vielleicht hilft dir dieser Patch: https://drupal.org/node/1911706

Wenn du Probleme hast, die stark modulspezifisch sind, wie in diesem Falle, dann suche am Besten zuerst in der Issue Queue des jeweiligen Projektes. Ansonsten poste deine Frage in die Issue Queue des jeweiligen Projekts an die Maintainer bzw. die Community.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Vielen Dank euch

Eingetragen von glycid (921)
am 06.08.2013 - 14:56 Uhr

Vielen Dank euch Beiden!

@Jepster: Der Patch behebt einen Fehler, der bei mir nicht auftritt. Die Issue Queue's hatte ich schon durchgesehen.
@ sepp: Die JavaScript Variante hat neben der Umständlichkeit natürlich den Nachteil, dass es nicht funktioniert, wenn im Browser JS deaktiviert ist. Es muss schon serverseitig berechnet werden.

Allerdings funktioniert es jetzt einwandfrei bei "rating while editing" mittels der Funktion field_get_items(). Warum es bei meinem ersten Entwurf damit nicht klappte, kann ich jetzt nicht mehr sagen. Wahrscheinlich hatte ich einen Fehler drin, den ich immer wieder übersehen hatte. Hab's neu geschrieben und alles ist gut.

Für den Fall, dass jemand diese Funktionalität in gleicher oder ähnlicher Weise benötigt, schreib ich noch mal kurz auf, wie ich es gelöst hab:

  1. Das Modul Computed Field installieren
  2. Im Node die Fivestar Felder für die einzelnen Bewertungskriterien anlegen
  3. Ein zusätzliches Feld vom Typ "Computed" für die Berechnung des Gesamtdurchnschnitts der einzelnen Fivestar Felder anlegen. In meinem Fall heißt das Feld "Gesamt" (field_gesamt) Soll der Feldwert noch weiter verarbeitet werden (z.Bsp. mit Views), muss bei den Feldeinstellungen "speichern in der Datenbank" aktiviert werden. Wird der Feldwert nur im Node ausgegeben, ist das nicht nötig. Alles andere so lassen wie es ist.
  4. Mit nachfolgendem Code ein kleines custom Modul erstellen und in sites/default/modules oder sites/all/modules/custom speichern und über die Modulverwaltung aktivieren.

Der Code für die MODULNAME.module Datei:

<?php
//holen und berechnen der Werte
function computed_field_field_gesamt_compute(&$entity_field, $entity_type, $entity, $field, $instance, $langcode, $items) {
 
$k1 = field_get_items('node', $entity, 'field_kriterium_1');
 
$k2 = field_get_items('node', $entity, 'field_kriterium_2');
 
$k3 = field_get_items('node', $entity, 'field_kriterium_3');
 
$k4 = field_get_items('node', $entity, 'field_kriterium_4');

 
$wert1 = $k1[0]['rating'];
 
$wert2 = $k2[0]['rating'];
 
$wert3 = $k3[0]['rating'];
 
$wert4 = $k4[0]['rating'];


 
$total = $wert1 + $wert2 + $wert3 + $wert4;
 
$ave = $total / 4;

 
$entity_field[0]['value'] = $ave;
}

//Ausgabe computed_field "Gesamt"
function computed_field_field_gesamt_display($field, $entity_field_item, $entity_lang, $langcode){
 
  
   
$ave = $entity_field_item['value'];  
  
 
   
$variables = array("rating" => $ave, "stars" => 5);
   
$variables["widget"]["name"] = "basic";
   
$variables["widget"]["css"] = "sites/all/modules/fivestar/widgets/basic/basic.css";

   
//Fivestar CSS hinzufügen
   
drupal_add_css(drupal_get_path('module', 'fivestar') .'/css/fivestar.css');

    return
theme('fivestar_static', $variables);
 
}
?>

  • In dem Funktionsnamen function computed_field_field_gesamt_compute() field_gesamt durch den Namen deines computed field ersetzen
  • Bei der Funktion field_get_items('node', $entity, 'field_kriterium_1') ist der dritte Parameter der Feldname deiner einzelnen Fivestar Felder. Bei mir field_kriterium_1...4. Die Feldnamen müssen natürlich durch deine ersetzt werden
  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
  • Update Manger läst sich nicht Installieren
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 2 Wochen 4 Tagen
  • Hey danke
    vor 2 Wochen 4 Tagen
  • Update: jetzt gibt's ein
    vor 2 Wochen 5 Tagen
  • Hallo, im Prinzip habe ich
    vor 3 Wochen 2 Tagen
  • Da scheint die Terminologie
    vor 3 Wochen 3 Tagen
  • Kannst doch auch alles direkt
    vor 4 Wochen 9 Stunden
  • In der entsprechenden View
    vor 4 Wochen 9 Stunden
  • Dazu müsstest Du vermutlich
    vor 4 Wochen 9 Stunden
  • gelöst
    vor 6 Wochen 3 Tagen
  • Ja natürlich. Dass ist etwas,
    vor 6 Wochen 4 Tagen

Statistik

Beiträge im Forum: 250233
Registrierte User: 20455

Neue User:

  • ByteScrapers
  • Mroppoofpaync
  • 4aficiona2

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 25 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association