【问题标题】:override joomla template.php body background color (site background)覆盖 joomla template.php 正文背景颜色(网站背景)
【发布时间】:2013-02-14 20:29:17
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: php html css joomla joomla-template


    【解决方案1】:

    尝试做这样的事情:

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

    您需要将背景的路径更改为适合您需要的路径。

    希望对你有帮助

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        app =& JFactory::getApplication();
        

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

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

        非常感谢你们!

        【讨论】:

          【解决方案4】:

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

          <?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。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-02-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-12-26
            相关资源
            最近更新 更多