Navigationsblock Anzeige nach terms

rener
rener's picture
Member for
01.12.2001
Offline

Mit Hilfe des folgenden PHP Codes kann ein Block angezeigt werden, wenn ein node zu den folgenden terms angehört.
Als Beispiel habe ich meine Start Navigation angefügt. Geändert werden brauchen lediglich die term IDs und die Alias Namen.
Als Highlight wird der Block auch angezeigt, wenn ein Kommentar zu einem node verfasst wird. Das Script läßt sich natürlich auch erweitern, falls weitere Funktionen benötigt werden.

<?php

$desired_terms
= array(131, 129, 100, 130, 140, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160);
$desired_paths = array('start', 'taxonomy/term/131', 'about', 'taxonomy/term/129', 'news', 'taxonomy/term/100', 'blog', 'taxonomy/term/130', 'faq', 'taxonomy/term/140', 'filter/tips', 'weblinks', 'weblink', 'taxonomy/term/151', 'taxonomy/term/152', 'taxonomy/term/153', 'taxonomy/term/154', 'taxonomy/term/155', 'taxonomy/term/156', 'taxonomy/term/157', 'taxonomy/term/158', 'taxonomy/term/159', 'taxonomy/term/160', 'sitemap', 'search');

if (
arg(0) == 'node' and is_numeric(arg(1)) ) {
   
// viewing a node.
   
$node = node_load(arg(1));
    foreach (
$node->taxonomy as $term) {
        if (
in_array($term->tid, $desired_terms)) {
            return
TRUE;
        }
    }
}

if (
arg(0) == 'comment' and is_numeric(arg(2)) ) {
   
// a comment form.
   
$node = node_load(arg(2));
    foreach (
$node->taxonomy as $term) {
        if (
in_array($term->tid, $desired_terms)) {
            return
TRUE;
        }
    }
}

if (
$_GET['q']) {
   
$my_drupal_path = $_GET['q'];
} else {
   
$my_drupal_path = substr($_SERVER['REQUEST_URI'], 1);
}
$my_path_alias = drupal_get_path_alias($my_drupal_path);
foreach (
$desired_paths as $desired_path) {
    if (
stristr($my_path_alias, $desired_path)) {
        return
TRUE;
    }
}

return
FALSE;
?>

Bei diesem Beispiel wird der Alias Namen 'news' auch auf einer Seite mit dem Beispiel-Alias-Namen 'newsletter' gefunden, da 'news' ein Teil des Wortes 'newsletter' ist.
Damit der Block nicht auf der 'newsletter' Seite erscheint, kann der Code auf eine 100%-ige Alias Übereinstimmung geändert werden.
Ändert dazu die Zeile:

    if (stristr($my_path_alias, $desired_path)) {

gegen:
    if ($my_path_alias == $desired_path) {

cu
rener
----------------
Wir sind lediglich hier, um Erfahrungen zu sammeln.

Wir sind lediglich hier, um Erfahrungen zu sammeln.

#1
rener's picture

Drupal 7

Bei Drupal 7 hat sich viel geändert, gegenüber der Vorgängerversion.
Der folgende Code zeit den Block nur für den Taxonomy Term 5 an.

<?php
if ( arg(0) == 'node' && is_numeric(arg(1)) ) {
   
$node = node_load(arg(1));
   
$items = field_get_items('node', $node, 'field_tags');
    if (
is_array($items))
    {
        foreach(
$items as $term)
        {
            if (
$term['tid'] == 5)
            {
                return
TRUE;
            }
        }
    }
    return
FALSE;
}
?>

Wir sind lediglich hier, um Erfahrungen zu sammeln.