覆盖joomla template.php身体背景颜色(网站背景)

问题描述:

我使用joomla 2.5与一个artisteer模板, 我写了一个自定义组件显示和排序产品列表,产品本身也是组件并保存在数据库中。 什么,我试图做的是设置一个不同的身体背景特定产品或产品类别根据if条件覆盖joomla template.php身体背景颜色(网站背景)

if (product_category == 1): 
    <body id="background1"> 
    ... 

但问题是,<body id="someID">中的template.php加载之前的组件加载,所以即使我在组件中设置了正文背景,背景也不会改变。但是,如果我从template.php中删除正文css id decleration并将其保留为<body>而不是<body id="someID">,则组件<body id...>声明会正确设置背景,但随后任何其他与该组件无关的页面都会有空白背景。

我想我需要做的是找到一种方法来设置默认背景,以防背景未在其他地方定义,或者以某种方式覆盖当前背景并使组件重新加载主体背景,我相对较新PHP和CSS,但有一点帮助,我guidence我认为我可以找到我的方式:)任何帮助将非常感谢!谢谢!

尝试做这样的事情:

<?php 
$doc = JFactory::getDocument(); 
    if(product_category == 1){ 
    $css = 'body {' 
      .'background: url(' . JURI::root() . 'components/com_yourcomponent/file.jpg) !important;' 
      .'}'; 
    $doc->addScriptDeclaration($css); 
    }  
?> 

您需要到后台的路径更改为任何适合您的需求。

希望这有助于

在template.php文件中,被加载的身体之前,你可以这样做

if (JRequest::getCmd('option') == 'com_mycontent'){ 
    echo '<body id="myid">'; 
} 
else 
    echo '<body id="anotherid">'; 

喜@marko和@Lodder非常感谢你的回复! 不幸的是,您提供的解决方案不起作用,因为样式表在组件之前加载,所以从templae代码更改任何新设计都不会影响模板设计。 和不幸的,因为template.php无法初始化组件veriables(例如Category_id)我不能创建一个条件,并检查什么是category_Id,并相应地更改背景...我发现一个简单的解决方案,分量代码:

app =& JFactory::getApplication(); 

如果($ CATEGORY_ID == 1) $ APP-> setTemplate( “模板”);
其他 ....

$这只是设置根据CATEGORY_ID一个新的模板,我知道这是不是内存使用效率和加载时间较长,最糟糕的是,我需要创建一个新的模板对于每个类别...但这是诀窍... 我会感激,如果你能想到任何更好的解决方案?

非常感谢你们!

实际上,您可以在菜单项中使用内置的页面类后缀参数来完成您想要的操作。如果你有一个自定义模板,将它添加到它:

<?php 
$app = JFactory::getApplication('site'); 
$params = & $app->getParams('com_content'); 
$pageclass = trim($params->get('pageclass_sfx')); 
?> 
<body id="<?php echo $pageclass ? $pageclass : 'default'; ?>"> 

最有信誉的模板开发者的包括网页类的后缀代码,那么你可能不需要做的比其他任何东西的参数添加的东西您要自定义的页面。

通过在body标签中添加一个ID,这可以确保您可以轻松而准确地覆盖页面上的任何CSS。