web-dev-qa-db-ja.com

Drupal 7 / Views 3で類似ノードのリストを作成する

Drupal.stackexchange.comからコピーして、ここでより多くの回答を得たいと考えています。

現在のノードと同様のノードのリストを表示するというかなり一般的な問題に直面しています。類似ノードは、現在のノードが持っている少なくとも1つの分類用語を持つノードとして定義されます。モジュールとして利用できるソリューションはほとんどありませんが、私が見つけたモジュール(特に用語による類似)はDrupal 7。

また、ビューとコンテキストフィルターに基づいたいくつかのソリューションを見つけました(例 http://scito.ch/content/show-related-nodes-block-based-taxonomy-terms-views-3- and-drupal-7 )または関係。追加のモジュールをインストールする手間が省けるため、私はこの方法がとても気に入っています。ビューは積極的に開発およびサポートされているので、カスタムソリューションではなくそれらを使用したいと思います。私が回避できない問題は、「類似ノード」をそれらが共有する用語の数でソートする方法です。たとえば、「iPhone 4S」Nodeで「ガジェット」、「アップル」、「電話」という用語を使用している場合、次の順序で同様のノードが必要です。

  1. IPhone 3(アップル、ガジェット、電話)
  2. IPad(Apple、ガジェット、タブレット)
  3. Mac(アップル、コンピューター)
  4. ブラムリー(アップル、フルーツ、ツリー)

このビューのノードを、共有する用語の数でソートするにはどうすればよいですか?

この質問はビューの構築に関するものです。モジュールやカスタムのphpベースのソリューションを提案しないでください。ありがとうございました。

30
  1. ブロックビューを作成する
  2. コンテキストフィルターの追加->コンテンツ:Nid->デフォルト値の提供-> URLからのコンテンツID
  3. 関係の追加->コンテンツ:ノードの分類用語->適切な語彙を指定
  4. 関係の追加->分類用語:上記で指定された語彙を使用したコンテンツ->チェックオフこの関係を要求
  5. ビューの集約をオンにします(注:下のスクリーンショットの矢印は間違った場所を指しており、2行下を指しているはずです)。
  6. タイトルのみをリストしている場合、上記の4で設定した関係を使用するようにタイトルフィールドを編集します。
  7. Content:Nidの新しい並べ替え基準を追加します。集計設定で、[カウント]を選択します。 #4の関係を使用し、降順で並べ替え
  8. コンテキストフィルターを追加->コンテンツ:Nid->#4からの関係を使用->デフォルト値を指定-URLからのコンテンツID->下にスクロールして[詳細]を展開し、[除外]をオンにして現在のノードをビューから削除します

**ビューUIプレビューでこれをテストする方法については、下記の@ garret-albrightによるコメントを参照してください。 **

Related node view

81
nmc

何を推測する-そのためにも modules がある:D

私は 用語で同様 を設定の手間をかけずにそのビューを提供することをお勧めします。

2
rémy

これは、この質問に関連する代替ソリューションです。ただし、すべてのケースに当てはまるわけではありませんが、使用できる場合は単純です(私の意見では集計よりも安全です)。

panels を使用します。エンティティ(ノードなど)を表示するパネルを作成したら、複数のビューを追加して、コンテンツの横に表示できます。これらのビューの1つが関連コンテンツになります。
このパネルが唯一の制限です。 たぶんミニパネルを使用して、それをブロックとして表すことは可能です。私はまだ試していません。

前提条件

  • ビュー(d'oh!)
  • パネル
  • ビューのコンテンツペイン:ダウンロードする必要はありません。ビューとともにダウンロードされるctoolsモジュールにあります。
  • ページマネージャー:ビューコンテンツペインと同じ(オプション/強く推奨)。


景色

  1. 通常どおりにビューを作成しますが、notのようにして、ブロックまたはページとして作成します。両方のチェックを外します。

  2. ビューの構成ページで、エンティティにrelation to taxonomy termを作成します。

  3. フィルターするコンテキストフィルターを作成します:分類用語:用語ID

  4. 別のコンテキストフィルターエンティティIDを作成するか、ノードの場合はコンテンツ:Nidです。

    • これを作成する際、下部にオプションExcludeを持つ折りたたまれたフィールドセットがあります。マークされていることを確認してください。

  5. Addをクリックして、タイプコンテンツペインの新しい表示を作成します。

  6. 表示設定エリア(名前:ペイン設定)で引数入力を開きます。次の2つのオプションがあります。

    • 内容:Nid source:ソースをFrom contextとして設定します。 必須コンテキストコンテンツIDとして設定します(ノードを使用していない場合は、[〜 #〜] id [〜#〜]
    • 分類用語:用語ID source:ソースをFrom contextとして設定します。 必須コンテキストTerm IDとして設定します。

おめでとうございます!ビューの作成が完了しました。パネルの時間です(このQ/Aの範囲を超えているため、パネルの作成についてはあまり説明しません)。

パネル

  1. パネルを作成します(またはnode /%nodeデフォルトパネルを有効にして、バリアントを追加します)。

  2. contextタブで、エンティティにrelation to taxonomy termを作成します。

  3. いずれかのペインで[コンテンツの追加]をクリックします。

  4. ビューのカテゴリを変更しなかった場合は、viewsペインにあります追加します。エンティティIDと用語IDの両方が要求され、パネルコンテキストで使用できるようになり、設定します。

  5. パネルが表示されると、このページのコンテンツを除いて、同じ用語のコンテンツがすべて表示されます。

Views Configuration

Contextual filter

Argument input

重要な追伸:

この方法を試したところ、問題なく動作しましたが、この記事の執筆時点では、ctoolsにバグがありました。それのためのパッチがあります: https://www.drupal.org/node/2195211

0
hkoosha