Drupal → Добавляем CSS классы в body на основе текущего пути

20.01.2012

Если на сайте используется модуль Path, то удобно иметь в body цепочку классов на основе текущего пути. Например если открыта страница https://example.com/news/world/title то в body должно быть:

<body class="... path-news path-news-world path-news-world-title">

Код, добавляющий эти классы:

Drupal 8+

function THEMENAME_preprocess_html(array &$vars): void {
  // Add classes by current path
  $current_system_path = \Drupal::service('path.current')->getPath();
  $current_path_alias = \Drupal::service('path_alias.manager')->getAliasByPath($current_system_path);
  $path_class_suffix = 'path';
  foreach (explode('/', $current_path_alias) as $key => $arg) {
    if ($arg) {
      $path_class_suffix .= '-' . $arg;
      $vars['attributes']['class'][] = \Drupal\Component\Utility\Html::getClass($path_class_suffix);
    }
  }
}

Drupal 7

function THEMENAME_preprocess_html(&$vars) {
  $request_path_array = explode('/', request_path());
  if ($request_path_array) {
    if ($request_path_array[0] == $GLOBALS['language']->language) {
      unset($request_path_array[0]);
    }
    $class = 'path';
    foreach ($request_path_array as $arg) {
      $class .= '-' . $arg;
      $vars['classes_array'][] = $class;
    }
  }
}
Написанное актуально для
Drupal 7, Drupal 8+
Похожие записи

Комментарии

Если не ошибаюсь, тоже самое можно проделывать с помощью модуля css injector . Но в любом случае спасибо за информацию. Модули модулями... но все же надо понимать, что и как происходит, а не просто тыкать мышкой в админке : )

Александр
04.02.2013, 17:20

А зачем это нужно, если друпал и так добавляет туда классы?

Александр
04.02.2013, 17:24

Может это у меня модуль Pathauto добавляет?

У меня вот так выглядит просмотр ноды по умолчанию

<body class="html not-front logged-in no-sidebars page-node page-node- page-node-228 node-type-sale i18n-ru" >
Александр
04.02.2013, 17:29

Я не про классы пути. Я спрашиваю зачем их добавлять, если и так есть уникальные классы вплоть до идентификатора ноды

чтобы составлять селекторы на основе текущего пути

Александр
04.02.2013, 17:34

И и с помощью стандартных классов смогу сделать темизацию, зачем добавлять лишние классы?

ну вы молодец. не знаю что ещё вам ответить

Александр
04.02.2013, 17:43

Просто может я не понимаю чем вызвана необходимость классов путей, тогда просветите )

Роман
16.03.2013, 01:04

Вот более менее Решение для drupal 6

автор пишет, что получается что то типа такого:

Дмитрий
06.09.2023, 20:52

А как это реализовать на Drupal 9?

Добавить комментарий