根据IF条件更改JOOMLA站点背景


Change JOOMLA site background according to IF condition

我几个小时来一直在努力寻找解决方案。。。如有任何意见/指导,我们将不胜感激!。。谢谢我创建了一个扩展,用于按类别列出不同的产品。我试图完成的是根据设置的类别更改整个网站的背景,例如:电子产品将是蓝色背景,时尚将是红色背景等。

我有几个问题: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

您可以将类别的颜色保存在表格中。当页面加载时查询它,如果返回值,则使用它为网站的背景上色。基本上将代码放入模板中。