Martina Major

- Webdesign nach dem Baukastenprinzip

Home Joomla Voting geht nicht
Drucken
Benutzerbewertung: / 6
SchwachPerfekt 

Joomla 1.5.x - Bewertung / Voting funktioniert nicht

Plötzlich hatte ich jede Menge Besucher auf meiner Seite, also wollte ich doch wissen, wie denen meine Beiträge gefallen. Also habe ich zum ersten mal das Voting eingeschaltet und mich gewundert, warum nichts passiert.

Bis meine Mama anrief und sagte, Dein Voting geht nicht.

Ups!?


Nach näherem Hinsehen stand fest, die Bewertung geht schon, sie wird auch in die Datenbank eingetragen, aber es wird kein Ergebnis angezeigt.

Mein Template?

Der erste Gedanke mein Template könnte die Ursache sein, konnte ich verwerfen, nachdem ich zum einen die 3 Standard-Templates ohne Erfolg probiert hatte und zum anderen auf einer frisch installierten anderen Domain (Joomla 1.5.10 frisch installiert) mit meinem Template getestet habe. Bei der funktionierte das Voting, warum auch immer. Mein Template installiert und aktiviert, geht immer noch.

Beim Update etwas schiefgegangen?

Das Template ist es also nicht. OK. Die Installation der betroffenen Domain ist schon etwas älter, Joomla 1.5.1 glaube ich oder 1.5.2.
Allerdings habe ich immer alle Updates sauber installiert. Trotzdem noch ein Test, natürlich lokal: die Daten aus der alten Datenbank mit einem frisch installierten Joomla (ohne Installationsverzeichnis, dafür mit den nötigen Dateien .htaccess und configuration.php).
Nein geht auch nicht.

Also die Datenbank?

Ich habe doch nicht etwa die alte Datenbank aus der Beta-Phase verwendet?
Jetzt bin ich mir plötzlich nicht mehr sicher ...

Nein, sowas würde ich doch nicht tun.

Ein Blick in meine Aufzeichnungen beweist, ja das ist eine neue Datenbank. Das steht's auch Version 1.5.1 RC3 war die erste Version.

Wie finde ich denn jetzt, woran es liegt?

Ich bin total local, also kann ich alles kaputt machen, ist ja nur eine Kopie:

Ich habe etwas gefunden: query.php

components\com_content\helpers\query.php
Zeile 104
function buildVotingQuery($params=null)

Diese Funktion fragt den Parameter show_vote ab, wenn dieser nicht gesetzt ist, wird der Query nicht erstellt, d.h. selbst wenn da später einer versuchen würde den Query abzufragen, käme nichts zurück.
Bei mir ist genau dies der Fall, ich könnte jetzt einfach das if streichen und schon würde es gehen.

Das habe ich mal eben getetestet.

Da aber das Programm ja nicht Schuld sein kann, da es sonst ja nicht in der anderen Installtion funktionieren würde, ergibt sich die Frage:

Woher kommt dieses show_vote?

$params = &JComponentHelper::getParams( 'com_content' );

Noch ein Helper,  aber nicht wirklich hilfreich?
Er liest nur die Standardeinstellung für die Anzeige der Bewertung. Da ich generell keine Bewertung eingeschaltet, und nur explizit 2 Artikel zur Bewertung vorgesehen habe, bin ich hier am Ende.

Bedienfehler sozusagen.

Aber letzendlich ist auch das Programm ein bisschen Schuld.

Lösung

Hack im Programm

Ich nehme das if raus, dokumentiere hiermit mein Vergehen, und werde bei nächster Gelegenheit rausfinden, warum das an dieser Stelle so programmiert ist. Denn es ist nicht nachvollziehbar, warum für die Erstellung der Query abgefragt werden muss, ob sie später auch gebraucht  wird. Diese Abfrage braucht genausoviel CPU, wie das Basteln der Query.

Handarbeit

Ich setze global die Bewertung auf ein, und stelle manuell die Bewertung für Artikel, die nicht bewertet werden sollen auf aus

Immer noch auf der Suche noch der perfekten Lösung

Mir ist immer noch nicht klar, warum das nicht geht.


Das Model article.php liest in der Funktion

function _loadArticleParams()

die Parameter vom Artikel aus und übernimmt, nur soweit globale Einstellungen verwendet gesetzt ist, die globalen Einstellungen aus com_content.

Das Model article.php liest auch die Daten für den Artikel ein und ruft dazu die Funktion

function buildVotingQuery($params=null)

auf, die allerdings nochmal abprüpft, ob Parameter gesetzt sind und wenn nicht die globalen Einstellungen liest.
Die Funktion übergibt Teile für die endgültige Query,
$select = ' , ROUND( v.rating_sum / v.rating_count ) AS rating, v.rating_count';
$join = ' LEFT JOIN #__content_rating AS v ON a.id = v.content_id';

die wenn voting gesetzt ist, die notwendigen Daten aus der Tabelle pre_content_rating berechnen.

Diese werden dann über das Plugin vote.php dargestellt, wenn

if (isset($row->rating_count) && $params->get( 'show_vote' ) && !$params->get( 'popup' ))

ein Wert für rating_count vorhanden ist, das Voting für den Artikel eingeschaltet ist und es sich nicht um ein  Popup-Fenster handelt.

So nun weiss ich, wie es gehen soll, aber leider nicht warum es eben nicht funktioniert, bei global ausgeschalteten Rating.

Hier an dieser Stelle höre ich jetzt erstmal auf, wenn einer eine Idee hat: E-Mail, Telefon, Kontaktformular, Rauchzeichen ...

wären willkommen!