2011-01-06 10 views
0

Drupalでノードを返すようにビューを構成し、それらの平均投票を降順で並べ替えます。ビューの目的のために、平均票の価値は関係です。投票がないノードは、負の平均を持つノードの後に​​表示されることに気付きました。投票なしのノードの平均は0であるべきですが、MySQL JOINNULLの値を返すと考えています(最初の票がその項目に対してキャストされた後に行が作成されるため、結合された表に一致する行がないためです)。 )。Drupal Views:Render Null Result for Relationship 0

私は、MySQLでNULLという値を別の値としてIFNULL(column_name,'other value')で出力できることを発見しました。

この機能を取得するためにViewsモジュールを変更する必要があるように感じますが、NULLの値を返すようなオプションがあることを期待しています(関係は存在しませんitem)をNULLの代わりに0として、ノードを適切にソートすることができます。

私が使用しているモジュールには、ビュー、投票API、投票アップ/ダウン、CToolsが含まれています。

ありがとうございました。

答えて

1

ビューを直接変更しないでください。

プラグインを作成するだけです。これはすべてオブジェクト指向なので、そのフィールドの既存のハンドラを拡張するフィールドハンドラを書くだけです。 hook_views_handlersはそれを開始する場所です。

あなたがする必要があるのは、既存のハンドラをコピーして貼り付け、SQLを調整してフィールドに新しい名前を付けるだけです。利用可能なフィールドのリストに他のフィールドと同様に表示されます。

- 編集 - あなたが前にそれをやったことがないが、あなたがいることを得れば、それは超簡単だ場合

ビューのドキュメントは、最初は少し混乱することができます「AHAHを!」瞬間

開始するには、ビューを拡張してトリックをコピーする他のモジュールを検討するのがよいでしょう。 http://views2.logrus.com/doc/html/index.htmlのドキュメントは、オブジェクトのマッピング方法を理解するのに役立ちます。

個人的には、​​メソッドではなく->render()メソッドで修正を行います。そうすれば、SQLトリックの代わりに単純なif (is_null($value)) {$value = 0;}を追加できます。

+0

ありがとうございます。必ずしもViews自体を変更するつもりはありませんでしたが、投票モジュールを変更するのではなく、提供する機能を変更する必要があると思いました。プラグインを介して機能を拡張することは、あなたが言ったように機能するようです。 – Kyle

+0

私はいくつかのリンクと推奨事項で私の応答を編集しました - 幸運! – anschauung