Как получить текущий вид / идентификатор страницы в Drupal? - PullRequest
1 голос
/ 03 ноября 2010

То, что я ищу, это page_id / view_id, который я могу использовать для идентификации и оформления определенных страниц. Я бы использовал заголовок или URL-адрес, но есть вероятность, что он может измениться, если верхний уровень решит, что страница больше не должна называться Гольфом, а скорее Tee-Time, потому что ему это нравится больше.

Предположительно, этот идентификатор не изменился бы, если бы текущая страница была постраничным представлением (стр. 1,2,3,4 ...).

Ответы [ 2 ]

2 голосов
/ 04 ноября 2010

Один из способов решения этой проблемы заключается в следующем. Это зависит от URL-адреса, поэтому, если он меняется, меняется и имя класса.

В моих темах template.php я реализовал страницу hook_preprocess_page:

function mytheme_preprocess_page(&$vars, $hook) {
  $body_classes = array();
  $body_classes[] = 'page-' . _get_page_name($_SERVER['REQUEST_URI']);
  $vars['body_classes'] = implode(' ', $body_classes);
}

function _get_page_name($request_uri) {
  static $numeric_subsection = array(
    '/node/' => 'node',
  );

  $preAlias = $request_uri;
  $alias = substr(strrchr($preAlias, "/"), 1);
  if (strpos($alias, '?') > -1) {
    $alias = substr($alias, 0, strpos($alias, '?'));
  }

  $page_name = $alias;
  if (empty($alias)) {
    $page_name = 'start';
  }
  else if (is_numeric($alias)) {
    foreach ($numeric_subsection as $section => $pn) {
       if (strpos($preAlias, $section) > -1) {
         $page_name = $pn;
       }
    }
  }

  return $page_name;
}

Тогда на главной странице-шаблоне:

<body class="<?php print $body_classes; ?>">

Это не общее решение. Таким образом, вам, вероятно, придется настроить это для ваших конкретных потребностей. Например, для корректной работы с автоматическим путем потребуется некоторая настройка сома.

1 голос
/ 04 ноября 2010

Это немного зависит от того, как ваш сайт собран (панель страниц, просмотр страниц, «нормальные» страницы).По сути, вам необходимо выяснить, какие переменные находятся в области действия, а затем определить, какую информацию в них можно использовать.Чтобы определить, что находится в области действия, вы можете использовать print_r(array_keys(get_defined_vars()));, а затем копаться в отдельных переменных.

Можно сделать что-то в theme_preprocess_page.Один из вариантов - получить данные страницы через page_manager_get_current_page(), покопаться в них, а затем добавить классы тела по мере необходимости.Не зная, что вы делаете, вам по существу нужно print_r результаты где-то, посмотреть, что у вас есть, и идти оттуда.

...