根据用户的选择更改Drupal页面的背景图像......?

时间:2010-05-20 05:51:42

标签: drupal background taxonomy

我正在尝试为用户提供更改页面上使用的背景图片的功能。

背景图片列表将是一个不会真正改变的小数字。

我想我可以添加一些分类术语...每个背景类型一个...然后在查看页面时将一个类应用于body标签。

这听起来是否可行,如果是这样,我该怎么做呢?

由于

萨姆

1 个答案:

答案 0 :(得分:1)

编辑:在澄清我对问题的误解之后修改了答案

如果要在每个(节点)页面定义背景图像,那么通过分类词汇表的方法听起来就像是正确的方法。要使CSS可用的术语,最简单的方法是在node.tpl.php文件中输出/使用它们作为类,您可以直接访问$node变量。但是在这种情况下,它们有点埋没在结果标记的中间,这使得使用它们有点困难。

为了将它们添加到page.tpl.php中的$body_classes变量,你必须操纵zen_preprocess_page()函数来添加它们,或者(更好的方法)添加它们是你自己的模块/主题preprocess_page()函数,使用zen函数作为例子:

function yourModuleOrTheme_preprocess_page(&$vars) {
  // Add classes for body element based on node taxonomy
  // Is this a node page?
  if ('node' == arg(0) && is_numeric(arg(1))) {
    // Yes, extract wanted taxonomy term(s) and add as additional class(es)
    $node = node_load(arg(1));
    $background_vid = yourFuntionToGetTheBackgroundVocabularyId(); // Could be hardcoded, but better to define as variable
    $terms = $node['taxonomy'][$background_vid];
    foreach ($terms as $tid => $term) {
      // NOTE: The following assumes that the term names can be used directly as classes.
      // You might want to safeguard this against e.g. spaces or other invalid characters first.
      // Check the zen_id_safe() function for an example (or just use that, if zen is always available)
      $vars['body_classes'] .= ' ' . $term;
    }
  }
}

注意:未经测试的代码可能包含拼写错误和其他疏忽。


编辑前的原始答案 - 基于对OP意图的误解,留下她以防万一其他误解了它:) 基本的想法听起来可行,但我建议一个小的变化:

由于您希望每个用户可以调整设置,因此您必须跳过一些环节以允许用户使用分类术语“标记”自己。我认为只需启用(核心,但可选)profile module并在那里配置'背景'字段(使用类型'列表选择')会容易得多。该字段将显示在用户页面上(或者如果您为其指定类别,则显示在该页面上的单独选项卡),并且稍后可以从代码中轻松地获得用户选择,例如,派生页面模板的类:

global $user;
// NOTE: The following call would be the explicit way,
// but usually the profile fields get added to the $user object
// automatically on user_load(), so you might not need to call it at all,
// extracting the values directly from the $user object instead
$profile = profile_load_profile($user);
$background = $user->profile_background