2011-01-06 3 views
0

Ich habe eine Ansicht in Drupal konfiguriert, um Knoten zurückzugeben, sortieren sie nach ihrer durchschnittlichen Stimme in absteigender Reihenfolge. Für den Zweck der Ansicht ist der Wert der durchschnittlichen Stimmen eine Beziehung. Ich habe bemerkt, dass Knoten ohne Stimmen nach Knoten mit einem negativen Durchschnitt angezeigt werden. Knoten mit keinen Votes sollten einen Durchschnitt von 0 haben, aber ich glaube, dass der MySQL JOINNULL Werte zurückgibt (da es keine übereinstimmenden Zeilen in der Joined-Tabelle gibt, da eine Zeile erstellt wird, nachdem die erste Stimme für diesen Eintrag gewirkt wurde)).Drupal Ansichten: Render Null Ergebnis für Beziehung als 0

Ich entdeckte, dass es mit MySQL möglich ist, alle Werte, die NULL in einer Spalte sind, als einen anderen Wert mit IFNULL(column_name,'other value') auszugeben.

Ich fühle mich wie ich würde das Sichten-Modul ändern müssen, um diese Funktionalität zu erhalten, aber ich hoffe, dass es eine Art von Option gibt, die NULL Werte in einer Beziehung zurückgibt (eine Beziehung existiert nicht für die item) als 0 statt NULL, damit ich die Knoten richtig sortieren kann.

Die Module, die ich verwende, sind Ansichten, Voting API, Vote Up/Down und CTools.

Danke.

Antwort

1

Oooh, bitte ändern Sie Ansichten nicht direkt.

Schreiben Sie einfach ein Plugin. Es ist alles objektorientiert, also schreiben Sie einfach einen Handler, der den bestehenden Handler für dieses Feld erweitert. hook_views_handlers ist der Ort, um dafür zu beginnen.

Alles, was Sie tun müssen, ist kopieren Sie den vorhandenen Handler, machen Sie Ihre Änderungen an die SQL, und geben Sie dem Feld einen neuen Namen. Es wird in Ihrer Liste der verfügbaren Felder wie jeder andere angezeigt.

- Bearbeiten - „ahah“

Ansichten Dokumentation ein wenig verwirrend auf den ersten sein können, wenn Sie es noch nie zuvor getan haben, aber es ist super-einfach, wenn du das Moment.

Ein guter Ausgangspunkt wären andere Module, die Ansichten erweitern und ihre Tricks kopieren. Die Dokumente unter http://views2.logrus.com/doc/html/index.html helfen Ihnen, einen Eindruck davon zu bekommen, wie die Objekte zugeordnet sind.

Persönlich würde ich die Änderung in der ->render() Methode statt in der ->query() Methode machen. Auf diese Weise können Sie einfach eine einfache if (is_null($value)) {$value = 0;} anstelle von SQL-Tricks hinzufügen.

+0

Vielen Dank. Ich hatte nicht unbedingt vor, Sichten selbst zu modifizieren, aber ich dachte, das wäre der Punkt, an dem ich die Funktionalität ändern müsste, statt die Voting-Module zu ändern. Die Funktionalität über ein Plugin zu erweitern, scheint so zu sein, wie Sie es gesagt haben. – Kyle

+0

Ich habe meine Antwort mit einigen Links und Empfehlungen bearbeitet - viel Glück! – anschauung