Как добавить класс тела для таксономии текущего узла в тему Drupal 7 - PullRequest
2 голосов
/ 10 января 2011

Кто-нибудь знает, как или может направить меня в правильном направлении, как добавить класс body css для термина таксономии текущего узла?то есть <body class="term-dogs">, где "собаки" - это название термина таксономии.Это также может быть просто термин ID.В любом случае все в порядке, мне просто нужно решение.Это будет для подтемы Drupal 7

Ответы [ 3 ]

2 голосов
/ 10 января 2011

Этот ответ занял больше времени, чем я ожидал выяснить. Сложнее всего было собрать термины на узле, поскольку Все функции таксономии, связанные с узлами, были удалены или подвергнуты рефакторингу . В конечном итоге, страница 355 Pro Drupal 7 Development спасла день с помощью фрагмента, который выполняет работу, ранее выполненную таксономией_node_get_terms.

Ниже приведен код, который работал для меня (ищите часть, которая говорит "MAGIC НАЧИНАЕТСЯ ЗДЕСЬ"). Предполагая, что вы создаете подтему Zen, вам нужно переместить ее в файл template.php вашей подтемы и переименовать в 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;
  }
}
1 голос
/ 28 января 2011

Мне нужно было знать, как это сделать, и решение Matt V сработало идеально.Я сделал пару дополнений к его работе.Я вызвал drupal_html_class, который заменяет пробелы и недопустимые символы.И я добавил термин ID, чтобы вы могли настроить таргетинг на термин, даже если название термина изменилось.

// 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
0 голосов
/ 10 января 2011

Не уверен, что вы имеете в виду под этим тегом body, но здесь генерируются классы на узле:

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

Вы можете добавить больше, реализовав yourmodule_preprocess_node ($ vars)затем добавьте все, что вы хотите, в $ vars ['classes_array']

...