0

我正在使用带有艺术家模板的 joomla 2.5,我编写了一个自定义组件,用于显示和排序产品列表,产品本身也是组件的一部分并保存在数据库中。我要做的是根据if条件为特定产品或产品类别设置不同的正文背景

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

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

我认为我需要做的是找到一种方法来设置默认背景,以防其他地方未定义背景,或者以某种方式覆盖当前背景并使组件再次加载正文背景,我对 php 和 css 相对陌生,但是有一点帮助和指导,我想我可以找到自己的方式:) 任何帮助将不胜感激!!!谢谢!

4

4 回答 4

0

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

app =& JFactory::getApplication();

if ($category_id == 1) $app->setTemplate("template2");
别的 ....

$this 只是根据 category_id 设置一个新模板,我知道这不是内存效率,加载时间更长,最糟糕的是我需要为每个类别创建一个新模板......但这可以解决问题。 ..如果您能想到任何更好的解决方案,我将不胜感激?

十分感谢大家!

于 2013-03-04T17:29:08.987 回答
0

尝试做这样的事情:

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

您需要将背景的路径更改为适合您需要的任何内容。

希望这可以帮助

于 2013-02-28T15:33:55.327 回答
0

在 template.php 文件中,在加载正文之前,您可以这样做

if (JRequest::getCmd('option') == 'com_mycontent'){
    echo '<body id="myid">';
}
else
    echo '<body id="anotherid">';
于 2013-02-28T15:35:47.523 回答
0

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

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

大多数信誉良好的模板开发人员都包含页面类后缀的代码,因此除了在要自定义的页面参数中添加一些内容之外,您可能不需要做任何事情。

通过将 ID 添加到 body 标记,可以确保您可以轻松准确地覆盖页面上的任何 CSS。

于 2013-03-04T21:35:03.753 回答