Block in best. Kategorien und Nodes anzeigen - PHP Hilfe
Eingetragen von chrissmiss (46)
am 02.12.2009 - 18:58 Uhr in
am 02.12.2009 - 18:58 Uhr in
Habe folgende Frage...
Wie kann ich den Code erweitern/verbessern, das
1. der Block (z.B. ein Menü) sowohl beim NODE, als auch bei sämtlichen
Begriffen des Vokabulars (z.B. alle taxonomy/term/xy von
$desired_vocab = 35;) angezeigt wird
2. das bei der Anzeige eines NODE das korrekte Menu/Submenu aktiv
angezeigt bzw. geöffnet wird
Ich nutze im Moment den Code von http://drupal.org/node/69076
Die Anzeige bei den Nodes funktioniert! Nicht aber bei Term, kein aktives Menu!
<?php
// This snippet returns TRUE if the node we are
// currently viewing is tagged with a term which belongs
// to the 'desired_vocab' and we are not in edit mode (arg(2)).
// put here the vocabulary ID you're interested in
$desired_vocab = 35;
if ( arg(0) == 'node' and is_numeric(arg(1)) and arg(2) == FALSE ) {
// Yes, we're viewing a node in view mode.
$node = node_load(arg(1)); // cached
// If the term does not exist we're done
if (is_array($node->taxonomy)) {
foreach ($node->taxonomy as $term) {
if ($term->vid == $desired_vocab) {
return TRUE;
}
}
}
}
return FALSE;
?>
Eine etwas einfache Lösung, die bei Node und TERM funktioniert
aber das aktive Menü nicht anzeigt.
- Danke für Vorlage an quiptime für Info http://www.drupalcenter.de/node/14655
<?php
$check_terms = array(350, 121, 122);
$output = false;
// check_taxonomy
foreach ($check_terms as $t) {
$s = "/taxonomy/term/" . $t;
if ($_SERVER["REQUEST_URI"] == $s) {
return true;
}
}
// check_terms
if ((arg(0) == 'node' || arg(0) == 'term') && is_numeric(arg(1)) && !arg(2)) {
$mynode = node_load(array('nid' => arg(1)));
if (count($mynode->taxonomy) > 0) {
foreach ($mynode->taxonomy as $tid => $term) {
if (in_array($term->tid, $check_terms)) {
$output = true;
}
}
}
}
return $output;
?>
- Anmelden oder Registrieren um Kommentare zu schreiben
Block ist Menü -> bei best. Anzeige aktives Menü anzeigen
am 03.12.2009 - 09:41 Uhr
So funktioniert es für alle TERMS und NODES der angegebenen $vid.
!!!!!! Es fehlt leider noch die Übergabe des "aktiven Menüs" an die Navigation,
wenn der Block eine Menü enthält. Kann mir da jemand helfen?????
<?php
// put here the vocabulary ID you're interested in
$desired_vocab = 35;
if (arg(0) == 'taxonomy' && arg(1) == 'term') {
$str_tids = arg(2);
$terms = taxonomy_get_tree($desired_vocab);
foreach ( $terms as $term ) {
$items[] = $term->tid;
}
$terms = taxonomy_terms_parse_string($str_tids);
//browse each value
foreach ($terms['tids'] as $k => $v) {
if (in_array($v, $items)) {
return TRUE;
}
}
}
if ( arg(0) == 'node' and is_numeric(arg(1)) and arg(2) == FALSE ) {
// Yes, we're viewing a node in view mode.
$node = node_load(arg(1)); // cached
// If the term does not exist we're done
if (is_array($node->taxonomy)) {
foreach ($node->taxonomy as $nodeterm) {
if ($nodeterm->vid == $desired_vocab) {
return TRUE;
}
}
}
}
return FALSE;
?>
Gruss Chriss
--------------------------
In Drupal 7 ?
am 15.02.2011 - 17:41 Uhr
Frage: kennt jemand für Drupal 7 den richtigen Code dazu?
Diesen habe ich immer in D6 benutzt:
<?php
if (arg(0) == 'node' && is_numeric(arg(1))) {
$nid = arg(1);
$node = node_load($nid);
foreach ($node->taxonomy as $term) {
if ($term->name == 'myTermname') {
return TRUE;
}
}
}
return FALSE;
?>