繁体   English   中英

覆盖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中,因此即使我在组件中设置了主体背景,背景也不会改变。 但是,如果我从template.php中删除body css id decleration,并将其保留为<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文件中,在加载主体之前,您可以像这样

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

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

app =& JFactory::getApplication();

如果($ category_id == 1)$ app-> 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'; ?>">

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

通过将一个ID添加到body标签,可以确保您可以轻松,准确地覆盖页面上的所有CSS。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM