如何根据页面路径/深度向BODY标签动态添加类?


22

如何将类动态添加到body标签,例如下面的示例?

-家庭
-Cities      
--Melbourne       <body class="melbourne">
---主题公园       <body class="melbourne theme_parks">
---餐馆       <body class="melbourne restaurants">
-纽约       <body class="new_york">
---主题公园       <body class="new_york theme_parks">
---餐馆       <body class="new_york restaurants">
-联系我们       <body class="contact_us">

Drupal新手在这里并且没有编程背景。因此,如果您能在共享解决方案时尽可能详细,将不胜感激。

Answers:


37

要说明Nikhil Mohan的答案,您可以template_preprocess_html()在主题的template.php文件中实现。阅读有关覆盖可移植输出的文档,以了解此处发生的情况的基础。

在此函数中,您可以访问变量$vars['classes_array'],该变量包含将应用于<body>页面上HTML 标记的类的列表。

不幸的是,菜单中有关当前页面位置的信息无法立即获得。您可以使用menu_get_item()然后再menu_get_ancestors()获取此信息,但这对于我们使用Simpiler方法可能获得的东西来说具有很大的处理能力。

假设您使用pathauto模块根据菜单路径自动为内容页面创建语义路径(即,墨尔本主题公园页面的路径为“ melbourne / theme_parks”),则可以使用页面路径来创建您要创建的类正在找:

function THEMENAME_preprocess_html(&$vars) {
  $path = drupal_get_path_alias();
  $aliases = explode('/', $path);

  foreach($aliases as $alias) {
    $vars['classes_array'][] = drupal_clean_css_identifier($alias);
  } 
}

而已。Drupal现在将查看当前页面的路径别名,并为路径别名的<body>每个块将一个类添加到标签中。


1
如果路径不起作用,那么可以选择分析menu_get_active_breadcrumb。那时可能在static缓存中,因此几乎没有开销。
mpdonadio

3
谢谢大家,尤其是@sheena_d的解释以及代码!不得不对如何使其在Omega主题上工作进行了一些搜索,并设法使其起作用:D这是使其在Omega主题上工作的线路: $vars['attributes_array']['class'][] = drupal_clean_css_identifier($alias);
kyooriouskoala 2012年



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.