Term-Liste mit Einrückungen (entsprechend der Hierarchie)?
Eingetragen von mdatab (47)
am 05.12.2008 - 11:58 Uhr in
am 05.12.2008 - 11:58 Uhr in
Hallo,
ich habe ein Vokabular mit einigen Begriffen:
A
+ AA
B
C
+ CC
Wenn ich nun einen View erstelle, der mir zu den Taxonomie-Begriffen eine Zusammenfassung, also eine Liste der Terms mit Verlinkung auf die entsprechenden Nodes, anzeigt, so sieht ist diese Liste flach:
- A
- AA
- B
- C
- CC
Kann ich irgendwie erreichen, dass mir der View diese Hierarchie widerspiegelt? Sowas hätte ich gerne von dem View:
- A
- AA
- B
- C
- CC
Danke und Gruß
mdatab
- Anmelden oder Registrieren um Kommentare zu schreiben
Möglichkeit ohne Views
am 05.12.2008 - 14:45 Uhr
Ich nutze die folgende php Zeilen, um ein solches Ergebnis ohne Views zu erhalten.
Einfach die ID des Vokabulars austauschen und ziemlich weit unten einstellen, ob der Pfad taxonomy/term/xxx oder forum/xxx ausgeben soll.
Zusätzlich gibt diese Funktion die Anzahl der Nodes pro Term aus.
<?php
// Die ID des Taxonomie Vokabulars für gewünschten den Hierarchie Baum
$vid = 6;
function fill_children_ids_recursive(&$term_rebuilt, &$children_ids) {
if ($term_rebuilt["children_count"]>0) {
for ($i=0;$i<$term_rebuilt["children_count"];$i++) {
if (!in_array($term_rebuilt["children"][$i]["id"], $children_ids)) {
$children_ids[]=$term_rebuilt["children"][$i]["id"];
}
fill_children_ids_recursive($term_rebuilt["children"][$i], $children_ids);
}
}
}
$tree = taxonomy_get_tree($vid);
$terms = array();
foreach ($tree as &$term) {
$terms[] = array(
"id"=>$term->tid,
"name"=>$term->name,
"parents"=>$term->parents,
"depth"=>$term->depth,
"children"=>array(),
"children_count"=>0,
"node_count"=>0,
"global_node_count"=>0
);
}
foreach ($terms as $key => &$term_rebuilt) {
for ($x=0;$x<sizeof($term_rebuilt["parents"]);$x++) {
$parent_tid = $term_rebuilt["parents"][$x];
$idx=0;
$not_found = true;
while($not_found&&($idx<sizeof($terms))) {
if ($terms[$idx]["id"]==$parent_tid) {
$terms[$idx]["children"][]=&$term_rebuilt;
$terms[$idx]["children_count"]++;
$not_found = false;
}
$idx++;
}
}
}
print '<ul class=repos>';
$depth = 0;
foreach($terms as $index => &$term_rebuilt) {
$children_ids = array();
fill_children_ids_recursive($term_rebuilt, $children_ids);
$sql_count = "SELECT COUNT(nid) FROM {term_node} WHERE tid = '".$term_rebuilt["id"]."' ";
if (sizeof($children_ids)>0) {
//print_r($children_ids);
$sql_count .= " OR tid = '";
$sql_count .= join("' OR tid = '",$children_ids);
$sql_count .= "'";
}
$term_rebuilt["global_node_count"] = db_result(db_query($sql_count));
if ($term_rebuilt["depth"] > $depth) {
print '<ul>';
$depth = $term_rebuilt["depth"];
}
if ($term_rebuilt["depth"] < $depth) {
for ($i=($depth - $term_rebuilt["depth"]);$i>=1;$i--) {
print '</ul></li>';
}
$depth = $term_rebuilt["depth"];
}
// Wenn Taxonomy Baum ausgegeben werden soll
// print '<li>' . l($term_rebuilt["name"], 'taxonomy/term/' .$term_rebuilt["id"] .'/all') . " (".$term_rebuilt["global_node_count"].")".'</li>';
// Wenn der Forum Baum ausgegeben werden soll
print '<li>' . l($term_rebuilt["name"], 'forum/' .$term_rebuilt["id"]) . " (".$term_rebuilt["global_node_count"].")".'</li>';
}
print '</ul>';
?>
cu
rener
------------
Wir sind lediglich hier, um Erfahrungen zu sammeln.
Wir sind lediglich hier, um Erfahrungen zu sammeln.