ユーザーが作成したノードのすべての未読コメントを表示するユーザーのプロファイルページのビューを作成したいと思います。 「未読」とは、コメントが配置されているページ(ノードのページ)がユーザーによってまだ訪問されていないことを意味します。つまり、ユーザーが新しいコメントを読んでいない場合は、ビューに表示されます。ユーザーがそれを読むと、ビューに表示されなくなります。
ユーザーのノードのすべてのコメントを表示するだけのビューを既に設定しましたが、未読のものを除外する追加の「フィルター基準」または「関係」を見つけることができません。
手伝って頂けますか?
編集:Flag モジュールとルールを使用して、「Read」(オランダ語では「Reactie gelezen」)というフラグを作成しましたコメントが表示されたときに自動的に「既読」のフラグを付ける「コメント既読」。また、すべてのユーザーに 'Read'フラグでコメントにフラグを付ける権限を与えました(もちろん、コメントの上にフラグリンクは表示されません)。
私のルールは完全に機能し、フラグ付けは手動でも機能します。ただし、ビューは正しく機能しません。これらは私の設定です:
両方のuidにデフォルト値「URLからのユーザーID」が提供されました。
何を間違えたのですか?
Flagモジュールは、フラグが設定されているコンテンツの行のみをデータベースに保持します。つまりnotのフラグが立てられている場合、データベースには対応する行がありません。
問題は、ビューが次のようなクエリを生成することです(uid=12
のユーザーとfid=1
のフラグの場合)。
SELECT cid FROM comment AS c
INNER JOIN node AS n ON c.nid = n.nid
LEFT JOIN flagging AS f ON c.cid = f.entity_id AND f.fid = '1'
WHERE n.uid = '12' AND f.uid = '12'
ただし、notフラグが付けられているコメントを除く、特定のユーザーのすべてのコメントを選択するには、SQLサブクエリが必要です。
SELECT cid FROM comment AS c
INNER JOIN node AS n ON c.nid = n.nid
WHERE n.uid = '12' AND c.cid NOT IN (
SELECT f.entity_id FROM flagging AS f
WHERE f.fid = '1' AND f.uid = '12'
)
AFAIKビューには、サブクエリの組み込みサポートがありません。したがって、ロジックを逆にして以下を実装することをお勧めします。
is_new
is_new
- flagsを削除するルールを実行します(これは、フラグ付けロジックを逆にする必要があることを除いて、基本的には既に持っているルールと同じです)。flagged=false
フィルターを削除し、代わりにフラグ関係を構成して、フラグが立てられたコンテンツのみが含まれるようにします。