我无法绕过如何在我的自定义Drupal 6主题中制作可编辑的背景图像。我的客户希望在他的网站上的每个主要部分使用不同的背景图像(具有多种内容类型:页面,博客,图库),并且为了保持动态,我希望背景图像可以编辑。
我想要做的是将背景图片字段添加到各种内容类型,允许用户从内容库中引用图像或上传新图像(类似于ImageAssist),并将其应用于某个区域在我的模板中。有关最佳方法的任何建议吗?
有没有办法将自定义内容类型转换为动态背景图像块?我正在使用图像,图像缓存,视图,CCK,图像辅助,面板,文件字段和图像场模块。
谢谢!
答案 0 :(得分:2)
使用phptemplate_preprocess函数吗?也许我错过了它,但在drupals的API网站上有这样的功能。
我认为你应该使用phptemplate_preprocess_page,它应该实现为:
'函数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中,这将允许更多的灵活性(例如,如果你希望图像低于浏览器顶部20px)。例如:
<div id="main" >
<div id="page" style='background: url("<?php print $background ?>") no-repeat;'>
答案 1 :(得分:1)
这些天我自己在这样的网站上工作。 我做的是: 1.为此图像创建内容字段,网站管理员可以在其中上传新背景 2.在template.php中,我将图像位置添加到我创建的新$ var ['background']中 3.在pape.tpl.php中我在body中添加了一个包含所有页面内容的div, 4.在一个bove div中,我添加了一个样式并打印了$ background作为背景值 示例(使用[]重置&lt;&gt;以避免自动代码删除): [body class =“[?php print $ body_classes;?]”] [div id =“page”style ='background:url(“[?php print $ background?]”)no-repeat;'] [/ DIV] [/身体] 希望这可以帮助 阿夫纳
答案 2 :(得分:0)
现在我正在对一个网址进行硬编码,直到我弄清楚如何使其动态化之前,这是毫无意义的。这是我的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">
// ....
我创建了一个背景图像节点类型,并希望使用它来为页面,图像或图库节点提供可供选择的图像列表。关于如何解决这个问题的任何想法?
答案 3 :(得分: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'] .= '';
}