我几个小时来一直在努力寻找解决方案。。。如有任何意见/指导,我们将不胜感激!。。谢谢我创建了一个扩展,用于按类别列出不同的产品。我试图完成的是根据设置的类别更改整个网站的背景,例如:电子产品将是蓝色背景,时尚将是红色背景等。
我有几个问题:1.类别的排序功能是动态的(下拉列表/提交按钮),所以页面不会改变(只有它在模块中显示的内容会改变),所以我不能对不同的页面使用不同的模板,2.我不能使用页面后缀来定义新模板。
一个好的解决方案是php语句,如:如果($categoryId==X)-->set_new_background,但是站点后台的类设置在我正在处理的php文件之外。此外,为DIV设置背景不会更改站点背景。
任何想法和帮助都将不胜感激!非常感谢。
报告这篇文章
请参考@Theodore上面的回答,它相当完整;我唯一想做的就是只在模板级别使用类,这样你就可以在css中定义你的颜色,并为每个类别创建类。
这将是最快的(你不需要查找表):所以只需将下面的$catClass添加到body中:
if ($option=='com_content' && $view=='category')
$catClass = ' cat'.JRequest::getVar('id');
在此之后,$catClass将包含类似于"cat16"的内容,您可以将其附加到
因此,您可以在"
<body class="your classes <?php echo $catClass; ?>">
它将输出类似于:
<body class="your classes cat16">
然后在单个css中,您将有规则:
body.cat16 {background-image:url(../image1.jpg);}
body.cat18 {background-image:url(../image2.jpg);}
这将比拥有单独的css文件更好,因为它将更快地为浏览器加载。
有几种方法可以解决问题
1) 您可以对每个类别使用模板覆盖,在组件中加载不同的模板
2) 你可以加载不同的css样式
$document =& JFactory::getDocument();
If ($cat==1){
$document->addStyleSheet("/mybluetheme.css");
}
else
{
$document->addStyleSheet("/myredtheme.css");
}
3) 您可以使用自定义插件将特定的类添加到文档的正文中http://www.rockettheme.com/magazine/jan-2012/1342-creating-a-simple-macro-replacement-plug-in
4) 至少但不是最后一次,你可以在你的身体中回声一个隐藏的div,指定颜色
<?php
if($category==1){
$color="#ffffee";
}
else{
$color="#eeeeee";
}
echo "<div class='hiddencolor' style='display:none'>".$color."</div>";
?>
然后使用一些jquery代码
$(document).ready(function() {
var mycolor = $(".hiddencolor").text();
alert(mycolor);
// change the body background css
$("body").css("background", mycolor);
});
http://jsfiddle.net/zWzvd/
您可以尝试这种编辑模板代码的方法。只要让它充满活力。http://forum.joomla.org/viewtopic.php?p=2271520
或
您可以将类别的颜色保存在表格中。当页面加载时查询它,如果返回值,则使用它为网站的背景上色。基本上将代码放入模板中。