Wie eine Körperklasse für den aktuellen Knoten Taxonomie zu einem Drupal 7 Thema hinzufügen

StackOverflow https://stackoverflow.com/questions/4642561

  •  09-10-2019
  •  | 
  •  

Frage

Wer weiß, wie oder kann mich in der richtigen Richtung, wie man einen Körper CSS-Klasse für das aktuelle Knotens Taxonomieausdruck hinzufügen? das heißt <body class="term-dogs"> wo „Hunde“, der Name Taxonomieausdruck ist. Es könnte auch nur der Begriff ID sein. So oder so ist in Ordnung, ich nur eine Lösung benötigen. Dies wird für ein Drupal 7 zen Unterthema sein

War es hilfreich?

Lösung

Diese Antwort hat länger gedauert, als ich erwartet hatte, um herauszufinden. Der schwierige Teil war das Sammeln der Begriffe auf den Knoten, da Alle im Zusammenhang Taxonomie Funktionen Knoten entfernt wurden oder Refactoring . Letztlich gespeichert, Seite 355 von Pro Drupal 7 Entwicklung des Tag mit einem Code-Schnipsel, die den Job zuvor von taxonomy_node_get_terms behandelt hat.

Im Folgenden finden Sie den Code, der für mich gearbeitet (Look für den Teil, der sagt „MAGIC begins here“). Angenommen, Sie sind ein Unterthema Zen erstellen, werden Sie wollen, dass diese template.php Datei zu Ihrem Unterthema bewegen, und benennen Sie sie in YOURSUBTHEMENAME_preprocess_html:

/**
 * Override or insert variables into the html template.
 *
 * @param $vars
 *   An array of variables to pass to the theme template.
 * @param $hook
 *   The name of the template being rendered ("html" in this case.)
 */
function zen_preprocess_html(&$vars, $hook) {
  // If the user is silly and enables Zen as the theme, add some styles.
  if ($GLOBALS['theme'] == 'zen') {
    include_once './' . drupal_get_path('theme', 'zen') . '/zen-internals/template.zen.inc';
    _zen_preprocess_html($vars, $hook);
  }

  // Classes for body element. Allows advanced theming based on context
  // (home page, node of certain type, etc.)
  if (!$vars['is_front']) {
    // Add unique class for each page.
    $path = drupal_get_path_alias($_GET['q']);
    // Add unique class for each website section.
    list($section, ) = explode('/', $path, 2);
    if (arg(0) == 'node') {
      if (arg(1) == 'add') {
        $section = 'node-add';
      }
      elseif (is_numeric(arg(1)) && (arg(2) == 'edit' || arg(2) == 'delete')) {
        $section = 'node-' . arg(2);
      }
      // MAGIC BEGINS HERE
      $node = node_load(arg(1));
      $results = field_view_field('node', $node, 'field_tags', array('default'));
      foreach ($results as $key => $result) {
        if (is_numeric($key)) {
          $vars['classes_array'][] = strtolower($result['#title']);
        }
      }
      // MAGIC ENDS HERE
    }
    $vars['classes_array'][] = drupal_html_class('section-' . $section);
  }
  if (theme_get_setting('zen_wireframes')) {
    $vars['classes_array'][] = 'with-wireframes'; // Optionally add the wireframes style.
  }
  // Store the menu item since it has some useful information.
  $vars['menu_item'] = menu_get_item();
  switch ($vars['menu_item']['page_callback']) {
    case 'views_page':
      // Is this a Views page?
      $vars['classes_array'][] = 'page-views';
      break;
    case 'page_manager_page_execute':
    case 'page_manager_node_view':
    case 'page_manager_contact_site':
      // Is this a Panels page?
      $vars['classes_array'][] = 'page-panels';
      break;
  }
}

Andere Tipps

Ich musste wissen, wie dies zu tun und Matt V-Lösung funktionierte perfekt. Ich machte ein paar Ergänzungen zu seiner Arbeit. Ich rief drupal_html_class, die Leerzeichen und ungültige Zeichen ersetzt. Und fügte ich im Begriff ID, damit Sie einen Begriff, auch wenn der Name der Begriff Änderungen abzuzielen.

// MAGIC BEGINS HERE
$node = node_load(arg(1));
$results = field_view_field('node', $node, 'field_tags', array('default'));
foreach ($results as $key => $result) {
    if (is_numeric($key)) {
    // Call drupal_html_class to make safe for a css class (remove spaces, invalid characters)
    $vars['classes_array'][] = "taxonomy-" . strtolower(drupal_html_class( $result['#title']) );
    // Add taxonomy ID. This will allow targeting of the taxonomy class even if the title changes
    $vars['classes_array'][] = "taxonomy-id-" . $result['#options']['entity']->tid  ;
    }
}
// MAGIC ENDS HERE

Nicht sicher, was Sie mit diesem Body-Tag bedeuten, aber die Klassen auf dem Knoten hier erzeugt:

http: // api. drupal.org/api/drupal/modules--node--node.module/function/template_preprocess_node/7

Sie können mehr hinzufügen, indem yourmodule_preprocess_node Implementierung ($ VARs) und fügen Sie dann, was Sie zu $ ??wollen Vars [ 'classes_array']

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top