web-dev-qa-db-ja.com

現在のノードに基づいて領域/ブロックのコンテンツを変更する

表示されているノードに応じてリージョン/ブロックのコンテンツを変更する方法を理解しようとしています。

食料品店のウェブサイトを作成していたとしましょう。ホームページには、さまざまな部門(肉、シーフード、乳製品など)へのリンクがいくつかあります。ユーザーがこれらの部門の1つをクリックすると、その部門のすべてのアイテムをリストするメニューがあるノードに移動します。 ...

  • 肉=>ステーキ、ハンバーガーなど.
  • 乳製品=>牛乳、卵、チーズなど.
  • シーフード=>エビ、マグロ、サーモンなど.

私が理解しようとしているのは、選択した部門の正しいアイテムメニューを表示する方法です。ユーザーが「乳製品」ノードを選択したときにすべての乳製品のメニューを表示するにはどうすればよいですか?

理想的には、サイトの所有者が自分で変更できるようにしたいので、テンプレートに変更をハードコーディングせずにこれを達成したいと思います。

提案をありがとう!

2
webworm

簡単な方法は次のとおりです。

  1. サイトセクション分類法を作成し、フィールドとしてノードに追加します(例:field_site_section)。おそらく、1つの値のみを許可する必須フィールドにしたいと考えています。

  2. コンテンツタイプのpathauto設定を設定して、URLに用語を含めます(例:[node:field_site_section]/[node:title]

  3. 定義したメニューごとにブロックが必要です。上記で定義したパスに基づいて、ワイルドカードに一致するパスにのみ表示されるように表示設定を設定します(例:section/*

セクションのランディングページが必要な場合は、ノードを作成し、サイトセクションを割り当て、セクション名だけになるようにエイリアスを手動で設定します。次に、これをメニューブロックが表示されるパスのリストに追加します。

このアプローチに役立つもう1つのことは、エンティティセクションフィールドをサイトセクションの分類法に追加することです。次に、各用語について、フィールドをセクションのルートノードに設定します。これは、いくつかの用途に役立ちます。

3
mpdonadio

context モジュールを試してください。

コンテキストを使用すると、サイトのさまざまな部分のコンテキスト条件と反応を管理できます。各コンテキストは、サイトの「セクション」を表すものと考えることができます。コンテキストごとに、このコンテキストをアクティブにするトリガー条件を選択し、このアクティブコンテキストに反応するDrupalのさまざまな側面を選択できます。

条件は、アクティブなコンテキストを確認するためにページの読み込み中にチェックされる一連のルールと考えてください。次に、アクティブなコンテキストに関連付けられているすべてのリアクションが発生します。

ドキュメントのリンクについては、モジュールのページを参照してください。

3
junedkazi

ノードでエンティティ参照 http://drupal.org/project/entityreference を使用できます(私の完全な例に従うには、名前「親ノード」とマシン名「field_parent_node」を作成してください)。これにより、ノードを親ノードに割り当てることができます。完了したら、コンテキストフィルターでビューを使用できます

Contextual Filter Setup:Content:Parent Node、When the FILTER VALUE IS NOT AVAILABLE-Provide default value-Content ID from URL

これにより、タイトルのブロックを表示してメニューを作成したり、親の子ノードのティーザーを表示したりできます。

(少し複雑ですが)親子のビューを作成することもできます。つまり、卵のページで牛乳、卵、チーズなどを表示して、以前と同じようにビューを作成できますが、コンテキストフィルターにはphpが必要です。

コンテキストフィルターのセットアップ:コンテンツ:親ノード、フィルター値の場合IS使用不可-デフォルト値を指定-PHPコード

if ($node = menu_get_object()) {
  $query = &$view->build_info['query'];
  $parent_node = field_get_items('node', $node, 'field_parent_node');
  return($parent_node[0]['target_id']);
}

現在のノードもビューから除外したい場合は、このビューに別のコンテキストフィルターを追加できます。

Contextual Filter Setup:Content:nid、WHEN THE FILTER VALUE IS NOT AVAILABLE-Provide default value-Content ID from URL。次に下部の[more]タブを開き、[exclude]をオンにします。

0
James