web-dev-qa-db-ja.com

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

私はこのようなものを作成する必要があります:

色(語彙)

  • 赤(用語)
    • 暗い(用語)
      • ノード1
      • ノード2
    • ライト(用語)
      • ノード3
      • ノード4
  • ブルー(用語)
    • ノード5
    • ノード6
  • 緑(学期)
    • ノード7
    • ノード8

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

22
iStryker

Refinoのおかげで、次のモジュールを使用した素敵なソリューションを見つけました。

以下に説明があります:

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

この助けを願っています

乾杯

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

Image of the final product by iStryker

15
Fred

Drupal 7.8とビュー3 +ビューフィールド)で3つのビューを作成し、インクルードビューを使用して1つのビューを別のビューにネストし、そのような結果(添付)を得ました。 enter image description here

それを行う方法のステップバイステップ:

  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パスの設定:/ 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 Set Path:/ colors-tree

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

5.10保存

...そして、これでようやくこれができるはずです。

14
Refineo

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

Edit:D7バージョンがあります。モジュールのホームページをチェックアウトしてください Views Tree

4
nmc

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" : "";
  }
3
Ahmad

Taxonomy men モジュールを使用できます。これについての引用は次のとおりです(モジュールのプロジェクトページから):

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

特徴:

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

もちろんあります:

  1. 階層的な語彙を設定し、
  2. 選択したコンテンツタイプに追加します。
  3. contextual filterを使用して、そのコンテンツタイプからノードを一覧表示するビューを作成します。

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

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

次に、ビューのURLが http://mysite.com/myview であり、 'Red' tid = 1であるとすると、 http://mysite.com/myview/1にアクセスした場合 これは、「赤」、「暗」、「明」のいずれかの用語に割り当てられたすべてのノードを一覧表示します。

2
Maciej Zgadzaj

私はこの問題を解決するためのさらに別の方法を見つけたと思います、そしてそれは他の解決策よりも簡単だと思います。追加のモジュールは含まれておらず、必要なビューは1つだけです。

2レベル階層ボキャブラリ(色)と、そのボキャブへの用語参照を持つコンテンツタイプを作成したと仮定して、次の手順を実行します。

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

できました。 3つ以上のレベルがある場合は、関係の関係として親を使用して、別の親の関係を追加します。

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

0
cdmo

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

0
uwe