覆盖joomla template.php主体背景色(站点背景色)


override joomla template.php body background color (site background)

我使用joomla 2.5与artisteer模板,我编写了一个自定义组件,它显示和排序产品列表,产品本身也是组件的一部分,并保存在数据库中。我要做的是根据if条件

为特定产品或产品类别设置不同的正文背景。
if (product_category == 1):
   <body id="background1">
   ...

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

我认为我需要做的是找到一种方法来设置默认背景,如果背景没有在其他地方定义,或者以某种方式覆盖当前背景,并使组件再次加载主体背景,我对php和css相对较新,但有一点帮助和我的指导,我想我能找到我的方式:)任何帮助都会非常感激!!谢谢!

试着这样做:

<?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文件中,在body被加载之前,你可以这样做

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

嗨@marko和@ loder非常感谢你们的回复!不幸的是,您提供的解决方案不起作用,因为样式表是在组件之前加载的,所以来自模板代码的任何新的设计更改都不会影响模板设计。不幸的是,由于template.php不能初始化组件变量(例如,Category_id),我不能创建一个条件,并检查什么是Category_id,并相应地改变背景…我找到了一个简单的解决方案,它是在我的组件代码中实现这段代码:

app =& JFactory::getApplication();

$category_id == 1应用程序-> setTemplate("template2");
其他的…

$this只是根据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。