新しい Unified New ビューをDiscourseサイトのメインフィード(ホームページ)として使用することを検討しています。ただし、X/TwitterやFacebookのように動作させたいと考えています。
私が実現しようとしているのは以下の通りです:
-
トピックがUnified Newフィードに表示される。
-
ユーザーがスクロールし、そのトピックがビューポート内に一度表示される。
-
ユーザーがそれをスクロールで通り過ぎると、Discourseはそのトピックをそのユーザーに対して「既読」または「無視済み」として扱う。
-
ユーザーがページをリロードするか、後日 /new に戻った際、そのトピックはもう表示されない。
理想を言えば、スクロール中にその行が即座に消えるのは避けたいです。そうするとページがジャンプしてしまう可能性があるためです。バックグラウンドで既読/無視済みとしてマークし、次のロード時に消えているだけで十分です。
また、私は Don’s Topic Preview Modal も使用しており、これはすでにビューポート周辺のトピックをプリフェッチしています。そのため、トピックが単にプリフェッチされた状態と、ユーザーが実際に見た状態を区別したいと考えています。
例えば、以下のような仕組みです:
トピックが少なくとも50%表示されて200〜400ms経過 → 既読としてマーク → ユーザーがそれをスクロールで通り過ぎる → Unified Newから無視済みとして除外。
誰か類似の機能を実装したことはありますか?
現在のユーザーに対して、Unified Newから個別のトピックを無視(除外)するための既存のDiscourse APIやフロントエンドのメソッドはありますか?それとも、これはプラグインやテーマコンポーネントが必要になるのでしょうか?
基本的に、ユーザーがすべてのトピックを開くことを要求するのではなく、Unified Newを「まだ見ていないもの」のパーソナライズされたスクロールフィードにしたいと考えています。
「いいね!」 4
これは現在存在する機能ではないと思うので、Contribute > Feature に移動します。
バッチ操作は存在しますが、スクロールしながら「チェックするだけ」というのは、あまりスムーズではないように感じます。
「いいね!」 1
トピックモーダルがすでにプリフェッチを使用しているため、プリフェッチが発生した時点で閉じるコンポーネントを作成できるか確認してみます。
ログイン済みユーザーのみ /new をホームページとして表示する方法はありますか?ログインしていないユーザーは当然404エラーになります。
これなら役に立ちますか?
ここでは “latest” を “new” に変更できます。試してみましたが、動作すると思います。
Moin
5
また、Custom Homepage for Groups もあります。これは、すべてのユーザーが自動的に追加される trust_level_0 グループを使用すれば動作するはずです。
「いいね!」 2
つまり、もっと簡単な方法があることはわかっていた……あとはそれを見つけるだけだった。
「いいね!」 1
このトピックは閉鎖または削除できます。/new の動作を完全に理解していなかったため、過去 x 時間分の投稿が表示されるものと誤解していました。実際にはそうではなく、この状態では新規ユーザーに空のページが表示されてしまいます。
「いいね!」 1