【问题标题】:Drupal Background Image as Block or NodeDrupal 背景图像作为块或节点
【发布时间】:2010-03-14 07:32:46
【问题描述】:

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

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

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

谢谢!

【问题讨论】:

    标签: drupal-6 cck background-image


    【解决方案1】:

    是否使用函数 phptemplate_preprocess ?也许我错过了,但在 drupals 的 API 站点上有这样的功能。
    我认为你应该使用phptemplate_preprocess_page,它应该被实现为:
    'function THEMENAME_preprocess_page(&$vars)' 并放置在您的主题目录中的 template.php 中。
    该函数很可能已经存在,您应该在其末尾添加以下行:
    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']; }
    }

    注意 field_background 是一个 cck 字段

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

    希望这会有所帮助 阿夫纳

    【讨论】:

      【解决方案2】:

      这些天我自己在这样一个网站上工作。 我所做的是: 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] [/身体] 希望这可以帮助 阿夫纳

      【讨论】:

      • 感谢您的回复!但是你只使用一张图片吗?我希望以某种方式使在每个部分上放置不同的图像变得容易。当您说“图像位置”时,您的意思是对网址进行硬编码吗?
      • 一点也不,正如我在评论中解释的那样,背景可以更改并作为变量输入(在我的示例中为 $background)。发布您的 template.php,我会尽力帮助您解决代码
      【解决方案3】:

      更简单更干净的方法是在 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'] .= ''; }

      【讨论】:

        【解决方案4】:

        现在我正在对 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">
              // ....
        

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-01-31
          • 1970-01-01
          • 2015-11-18
          • 2014-03-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多