2010-11-03 64 views
1

我在寻找的是page_id/view_id,我可以用它来识别和设置特定页面。我会使用标题或网址,但如果高层决定不应再将页面称为高尔夫球,而有可能改变它,但是因为他更喜欢它,所以它可能会改变。如何得到Drupal的当前视图/页面标识符?

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

回答

2

解决这个问题的方法如下。这取决于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; ?>"> 

这不是一个通用的解决方案。因此,您可能必须根据您的特定需求进行自定义。它会例如需要调整以适应路径自动。

+0

我最终做了类似的事情,谢谢! – SeanJA 2010-11-11 05:08:56

1

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

一个选项是在theme_preprocess_page中做些事情。其中一种方法是通过page_manager_get_current_page()获取页面数据,并在其中徘徊,然后根据需要添加主体类。不知道你在做什么,你基本上需要在某个地方的结果,看看你有什么,并从那里去。

相关问题