ビュー3で用語とノードを含むネストされたツリーを作成するにはどうすればよいですか?


22

次のようなものを作成する必要があります。

色(語彙)

  • 赤(期間)
    • ダーク(ターム)
      • ノード1
      • ノード2
    • ライト(期間)
      • ノード3
      • ノード4
  • 青(期間)
    • ノード5
    • ノード6
  • 緑(期間)
    • ノード7
    • ノード8

(箇条書きはインデントです。)
Drupal 7とビュー3でこれを行う方法はありますか?そうでない場合、これを行う別の方法はありますか?


明確にするために-おそらくあなたの質問を誤解したように-あなたはこのような構造を1ページに表示したいですか?
マチェイZgadzaj

はい1ページのみ
-iStryker

回答:


15

refinoのおかげで、次のモジュールを使用して素晴らしい解決策を見つけました。

以下に説明があります。

  1. 最初に新しい分類法を作成します(「フォルダ」と呼びましょう)
  2. 次に、「Folder」分類法への用語参照フィールドを持つ新しいコンテンツタイプを作成します(「Element」と呼びましょう)。
  3. 新しい「コンテンツ」ビューを作成します(「エレメントビュー」と呼びましょう)
  4. フィールド表示を選択
  5. 用語参照フィールドにコンテキストフィルターを追加する
  6. 新しい「分類」ビューを作成します(「フォルダツリー」と呼びましょう)
  7. 2つのフィールド(用語名と用語ID)を追加します。2番目のフィールドは表示から除外できます
  8. リレーション内:「親用語」を追加します
  9. 3番目のフィールド(用語ID)を追加して、親リレーションに割り当てます。このフィールドは表示から除外できます
  10. [書式] [ツリー(隣接モデル)]を選択し、パラメーターで選択します。順序付きリスト+メインフィールド(最初のtid)、親フィールド(親リレーションに割り当てられたtid)。これで、すべての用語がネストされた素敵なツリーができました
  11. 4番目のフィールド「Global:View」(これはビューフィールドビューに付属)を追加し、「エレメントビュー」を選択し、引数テキストフィールドにMaster add [tid]を表示します

この助けを願っています

乾杯

iStrykerによる編集:これは私が得たものです。変更したのは、エレメントビューをテーブルビューにし、デフォルト(行とストリップ)クラスを削除することだけでした。

iStrykerによる最終製品の画像


このコメントからの大きな助け。ちょっとした注意:VT設定のドロップダウンでは、両方の「期間ID」フィールドが区別できないため、フィールド(管理タイトル)の名前を変更することをお勧めします。
アルトゥール

この回答により、私は90%になりました。各フィールドのデフォルトクラスを削除する必要がありました。「エレメントビュー」ビューでテーブルクラスを削除します。テーマ少し
-iStryker

コンテンツビューで重複を減らすための手順を追加しました。また、Global:Viewの「Arguments」フィールドには「Contextual filters」というラベルが付けられ、使用するトークンは「[!tid]」です。
othermachines

これを行うことは可能ですが、分類法の代わりに有機グループを使用しますか?
IamOnStage

14

Drupal 7.8およびViews 3 + Views Fieldで3つのビューを作成し、Include Viewを使用して1つのビューを別のビューにネストすると、そのような結果が得られました(添付)。 ここに画像の説明を入力してください

ステップバイステップの方法:

  1. ボキャブラリー「色」を作成し、タグで埋めます。

  2. 分類ノードの色の新しいビューを作成します-私はそれを「色のノード」と呼びます

2.1フォーマット表、設定:グループ化フィールド:分類用語:名前

2.2高度なコンテキストフィルター:分類用語:親用語

2.3高度な関係:分類用語:色を使用したコンテンツ

2.4フィールドの設定:分類用語:用語ID、分類用語:名前、(field_color)コンテンツ:タイトル

2.5フィルター基準:分類用語:語彙(=色)

2.6必要に応じて、用語ID、分類用語に「表示から除外」を設定することもできます:名前

2.7パスの設定:/ nodes-of-colors /%

2.8結果なしの動作を設定:グローバル:表示領域(後でこれに戻ります)2.9保存

3.分類ノードの色の新しいビューを作成します-私はそれを「色2のノード」と呼びます

3.1フォーマット表、設定:グループ化フィールド:なし

3.2高度なコンテキストフィルター:分類用語:用語ID

3.3高度な関係:分類用語:色を使用したコンテンツ

3.4フィールドの設定:分類用語:用語ID、分類用語:名前、(field_color)コンテンツ:タイトル

3.5フィルター基準:分類用語:語彙(=色)

3.6必要に応じて、用語ID、分類用語に「表示から除外」を設定することもできます:名前

3.7 Set Path:/ nodes-of-colors-2 /%

3.8結果なしの動作の設定:グローバル:なし

3.9保存

戻って「色のノード」をもう一度編集します

4.1結果なしの動作を設定する:グローバル:ビューエリアに進みます

4.2挿入するビューの設定:ビュー:nodes_of_colors2表示:ページ

4.3継承コンテキストフィルターの設定

4.4保存

5もう一度ビューに戻る(タイプ用語)

5.1分類ノードの色の新しいビューを作成-私はそれを「色ツリー」と呼びます

5.1フォーマット表、設定:グループ化フィールド:なし

5.2高度なコンテキストフィルター:なし

5.3高度な関係:分類用語:親用語

5.4フィールドの設定:分類用語:用語ID、分類用語:用語ID、分類用語:名前、ビュー:ビューを含む(ビューを含む)

5.5フィルター基準(1):分類用語:語彙(=色)

5.6フィルター基準(2):(親)分類用語:用語

5.7必要に応じて、用語IDに「表示から除外」および「ビューを含める」のラベルを設定することもできます

5.8パスの設定:/ colors-tree

5.9結果なしの動作の設定:なし

5.10保存

...そしてこれが最後になります。


「5.4 set fields ... view:include view」をもう少し明確にできますか。そのためのオプションはどこにもありません。ありがとう
uwe

私はビュー7.x-3.0-rc1 +ビューフィールド7.x-1.0-rc1を使用して書いていないことをごめんなさい
Refineo

わかった、ありがとう。私は彼らの問題キューにもいくつかの指示に従いましたdrupal.org/node/1171604
uwe

うわー、この答えは7日間のパスで大賛成を得ました。しかし、誰かがこれをテストしましたか、それとも@Refineoが最も詳細な答えを与えたのであなた/彼らはただ賛成していますか?
iStryker

このチュートリアルをもう一度試しましたが、うまくいきませんでした。この質問を支持したすべての人がテストなしの最後の週
です-iStryker

4

私はこれのD6またはD7バージョンを自分で試したことはありませんが、あなたが探しているものであればそれを言及すると思いました:Views Tree Module-D7 progress

編集:D7バージョンがあります。モジュールホームページビューツリーをチェックアウトしてください


3

URLからvidを取得するには、次のコードを使用します。

$vid = $_GET['vid'];
$tid = 0;
$level = 0;
print taxonomy_tree($vid, $tid, $level);
function taxonomy_tree($vid, $tid = 0, $level) {
  $children = taxonomy_get_children($tid, $vid);
  $output = '';
  if ($children) {
    $output .= '<ul>'; 
    foreach ($children as $child) {
      $level++;
      $output .= '<li class="taxonomy-tree-lvl' . $level . ' ">'; 
print $level;
      $output .= l($child->name, 'taxonomy/term/'. $child->tid) . '(' . taxonomy_term_count_nodes($child->tid) . ')'; 
      $output .= taxonomy_tree($vid, $child->tid, $level);
      $output .= '</li>';

      $level--; 
    }
    $output .= '</ul>'; 
  }

  return $output;

}

または、次のコードを使用します。

$vocabulary = taxonomy_vocabulary_load(2);//Here pass the vid
print $vocabulary->name;
$vid1 = $_GET['vid'];
if(!$vid1) {
$vid1 = 2;
print 'empty';
}
$vid = 2;
$parent = 0;
print get_child_terms($parent, $vid1);
 function get_child_terms($parent, $vid) {
      $sql = "SELECT td.tid, td.vid, td.name"
         . "  FROM {term_data} td"
         . "  JOIN {term_hierarchy} th on th.tid = td.tid"
         . " WHERE th.parent = %d"
         . "   AND td.vid = %d"
         . " ORDER BY td.weight, td.name";
    $terms = db_query($sql, $parent, $vid);
    $output = "";
    while ($aterm = db_fetch_object($terms)) {
        $output .= "<li>";
        $output .= l("$aterm->name", "taxonomy/term/$aterm->tid/all") . " ("
                .  taxonomy_term_count_nodes($aterm->tid) . ")</li>\n"
                .  get_child_terms($aterm->tid, $vid);
    }
    return ($output != "") ? "<ul style='list-style-type: none;
  margin: 0px 0px 0px 20px;
  padding: 0px;'>\n". $output ."</ul>\n" : "";
  }

2

もちろんあります:

  1. 階層ボキャブラリーを設定し、
  2. 選択したコンテンツタイプに追加し、
  3. コンテキストフィルターを使用して、そのコンテンツタイプからノードをリストするビューを作成します。

    • 「コンテンツ:分類用語IDがあります」-特定の用語に割り当てられたノードのみをリストする場合は、
    • または「コンテンツ:分類用語ID(深さあり)」-特定の用語とその子用語に割り当てられたノードを一覧表示する場合。

      この場合、フィルター構成では、深さを設定する必要があります-このフィルターを動作させるレベルの数(下)(または上)。

次に、あなたのビューのURLを仮定することはありhttp://mysite.com/myviewと「赤」TID = 1、あなたがに行く場合http://mysite.com/myview/1それはあなたのいずれかに割り当てられたすべてのノードが一覧表示されます「赤」、「暗い」、および/または「明るい」という用語。


特定の用語に対する答えを探しているのではありません。私は語彙全体のビューを探しています
-iStryker

そして、それはまさに私が説明したことです。
マチェイズガジャジ

2

Taxonomyメニューモジュールを使用できます。モジュールのプロジェクトページからの引用です:

分類法の語彙をメニューに簡単に変換します!

特徴:

  • 語彙ごとのカスタムメニュー
  • デフォルトの分類用語パスまたはカスタムパスを使用します
  • ビューと統合する
  • Pathautoと統合:URL /パスエイリアスを使用
  • 他のメニューモジュールに干渉しない

Drupal SEへようこそ!taxonomy_menuはクールなプロジェクトであり、これをうまく行うことができます。OPはビューでそれをしたいのですが。
AyeshK

0

私は同じことを達成しようとしていますが、D7で利用可能なものはほとんど見つかりませんでした。 分類ブロックモジュールは、ビューではなくブロックでそれを行います。


0

この問題を解決する別の方法を見つけたと思いますが、他の解決策よりも簡単だと思います。追加のモジュールは一切含まれず、必要なビューは1つだけです。

2レベルの階層語彙(色)とその語彙への用語参照を含むコンテンツタイプを作成したと仮定して、次の手順を実行します。

  1. 「分類語彙:マシン名(=色)」で新しいビューとフィルターを作成します
  2. 関係の追加:(1)Taxonomy term: Content using Colorおよび(2)Taxonomy term: Parent term
  3. ビューにフィールドを追加します:(1)Titlefield_color「リレーションシップ」で選択し、このリレーションシップを必要とします)、(2)Taxonomy term name(リレーションシップを使用せず、表示から除外します)(3)Taxonomy term name(はい、今回Parentはリレーションシップを選択して除外しますディスプレイから)。
  4. [フォーマットの設定]をクリックしてグループ化します:(1)grouping 1:(Parent) Taxonomy term: Name、(2)Taxonomy term: Name

できた 3つ以上のレベルがある場合は、リレーションシップの関係として親を使用して、別の親の関係を追加するだけです。

編集:関係を必要としない場合は、だまされてしまいます。ノードが参照する子用語がある場合、親は2回リストされます。そのため、トップレベルの用語では、参照するノードが表示されないため、回答が少し制限されます。また、ソートはおそらく重要であるため、最上位の用語を参照するコンテンツがあると、ディスプレイのニーズに応じて問題が発生する可能性があります。


関係を追加するまで、「分類語彙:マシン名(=色)」というフィルターはありません。私は、最初のステップが2番目になることだと思います。また、「関係」でfield_colorを選択するときにフィールドのタイトルを追加する方法を理解できませんでした。
ダイメトリー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.