如何获得Drupal的当前视图/页面标识符?

时间:2010-11-03 15:51:59

标签: drupal-6 drupal-views

我正在寻找的是一个page_id / view_id,我可以使用它来识别和设置特定页面的样式。我会使用标题或网址,但如果高层决定该网页不再被称为高尔夫,而是Tee-Time因为他更喜欢它,那么它有可能会改变。

如果当前页面是分页视图(第1,2,3,4页......),大概这个标识符不会改变。

2 个答案:

答案 0 :(得分:2)

解决此问题的一种方法如下。它取决于url,所以如果它改变了,那么class-name也是如此。

在我的主题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; ?>">

这不是通用的解决方案。因此,您可能需要根据您的特定需求进行自定义。例如,它需要som调整才能很好地使用路径自动。

答案 1 :(得分:1)

这取决于您的网站如何组合在一起(面板页面,查看页面,“普通”页面)。实质上,您需要确定范围内的变量,然后确定可以使用哪些变量。要确定范围内的内容,您可以使用print_r(array_keys(get_defined_vars()));,然后在各个变量中查看。

选项是在theme_preprocess_page中执行某项操作。一种选择是通过page_manager_get_current_page()获取页面数据,在那里查看,然后根据需要添加正文类。在不知道你在做什么的情况下,你基本上需要print_r某处的结果,看看你拥有的是什么,然后从那里开始。