1

我无法解决如何在我的自定义 Drupal 6 主题中制作可编辑的背景图像。我的客户希望在其网站的每个主要部分(具有多种内容类型:页面、博客、图片库)上使用不同的背景图像,并且为了保持一切动态,我希望背景图像是可编辑的。

我想做的是向各种内容类型添加背景图像字段,允许用户从内容库中引用图像或上传新图像(类似于 ImageAssist),并将其应用于我的模板中的区域. 关于此最佳方法的任何建议?

有没有办法将自定义内容类型变成动态背景图像块?我正在使用 Image、Image Cache、Views、CCK、Image Assist、Panels、Filefield 和 Imagefield 模块。

谢谢!

4

4 回答 4

2

使用函数 phptemplate_preprocess 吗?也许我错过了,但在 drupals 的 API 站点上有这样的功能。
我认为你应该使用 phptemplate_preprocess_page,它应该实现为:
'function THEMENAME_preprocess_page(&$vars)' 并放置在你的主题目录中的 template.php 中。
很可能该函数已经存在,您应该在其末尾添加以下行: 注意 field_background 是一个 cck 字段
global $base_url;
if (!empty($vars['node']->type)) {
if (($vars['node']->type == 'CONTENT-TYPE-A') || ($vars['node']->type == 'CONTENT-TYPE-B') {
$vars['background'] = $base_url."/".$vars['node']->field_background[0]['filepath']; }
}

关于您的 page.tpl.php,我不想在 body 标记中输入图像。我将它放在一个 div 中,这将提供更大的灵活性(例如,如果您希望图像位于浏览器顶部以下 20 像素)。例子:
<div id="main" >
<div id="page" style='background: url("<?php print $background ?>") no-repeat;'>

希望这有助于

于 2010-05-03T05:23:40.790 回答
1

这些天我自己在这样一个网站上工作。我所做的是: 1. 为该图像创建内容字段,站点管理员可以在其中上传新背景 2. 在 template.php 中,我将图像位置添加到我创建的新 $var['background'] 3.在 pape.tpl.php 中,我在正文中添加了一个包含所有页面内容的 div,4. 在 a bove div 中,我添加了一个样式并打印 $background 作为背景值示例(用 [] 替换 <> 以避免自动代码删除): [body class="[?php print $body_classes; ?]"] [div id="page" style='background: url("[?php print $background ?]") no-repeat;' ] [/div] [/body] 希望这对 Avner 有所帮助

于 2010-03-16T09:59:10.547 回答
0

一种更简单、更简洁的方法是在 phptemplate_preprocess_page() 函数中添加 template.php:

if (isset($node->field_background[0]['filepath']) ){ $vars['styles'] .= ' '; $vars['styles'] .= 'div#page{background: url("'.$base_url.'/'.$node->field_background[0]['filepath'].'");}'; $vars['styles'] .= ''; }

于 2010-06-02T13:48:29.690 回答
0

现在我正在硬编码一个 url,在我弄清楚如何使它动态之前,这是毫无意义的。这是我的 template.php 文件的一部分:

function phptemplate_preprocess(&$vars, $hook) {
  $vars['background'] = base_path().'sites/default/files/wood-med.jpg';
   //...
}

这是我的 page.tpl.php 文件的相关部分:

  </head>

    <body class="<?php print $body_classes ?>" style='background-image: url("<?php print $background ?>");background-repeat: repeat-y;'>
      <div id="pageWrapper">
      // ....

我创建了一个背景图像节点类型,并希望使用它来为页面、图像或画廊节点提供一个可供选择的图像列表。关于如何连接它的任何想法?

于 2010-04-11T05:39:50.867 回答