【问题标题】:joomla plugin extension loads css file on every pagejoomla 插件扩展在每个页面上加载 css 文件
【发布时间】:2012-11-12 17:22:35
【问题描述】:

我在 Joomla 2.5 中使用自定义插件扩展。此插件针对我网站上的单个页面。但由于某种原因,我注意到它会在每一页上加载 css 文件。

插件的代码会加载这个css文件:

$doc->addStyleSheet($pluginAssetsUrl . '/css/aecuserpage.css');

我不认为这很常见,但我不确定插件。我可以让它只应用我想要的页面而不是每个页面。任何关于如何调试的想法都将不胜感激。

插件在文章页面打印简单表格,使用插件功能onContentPrepare

【问题讨论】:

  • 插件在做什么?例如,如果它针对特定的类/id,您可以搜索类/id,如果存在,则包含 css 文件。

标签: css joomla joomla2.5


【解决方案1】:

使用这些 sn-ps 来管理您的问题:

1) 通过检查活动菜单项来加载 CSS

$menu = &JSite::getMenu();
$menuItem = $menu->getActive();
$Itemid = $menuItem->id;
if($Itemid!=1)
{
 $doc->addStyleSheet($pluginAssetsUrl . '/css/aecuserpage.css');
}

2)在组件上加载 CSS

if (JRequest::getCmd( 'option' ) == 'com_k2'){
        $doc->addStyleSheet($pluginAssetsUrl . '/css/aecuserpage.css');
}

3)只在首页加载CSS

<?php if(JRequest::getInt('Itemid') == $menu->getDefault()) {
   $doc->addStyleSheet($pluginAssetsUrl . '/css/aecuserpage.css');
}?>

4)根据活动菜单 id 加载 CSS

<?php
$menuID = JSite::getMenu()->getActive()->id ;
  if ($menuID == '6')
  {
   $doc->addStyleSheet($pluginAssetsUrl . '/css/aecuserpage.css');
  }
?>

5) 在激活语言时加载 CSS:

$lang =& JFactory::getLanguage();
switch ($lang) {
case 'en-gb':
$doc->addStyleSheet($pluginAssetsUrl . '/css/aecuserpage.css');
break;
}

6) 在用户身上加载 CSS

$user =& JFactory::getUser();
if($user->get('id')==0){
//user is logged in
 $doc->addStyleSheet($pluginAssetsUrl . '/css/aecuserpage.css');
}

7) 在 URL 上加载 CSS

$u =& JFactory::getURI();
if($u=="http://www.example.com/joomla/index.php?task=view&id=12&Itemid=29")
{
$doc->addStyleSheet($pluginAssetsUrl . '/css/aecuserpage.css');
}

【讨论】:

  • 啊哈! #1 做到了。当他接近时向@Lodder 提供道具。顺便说一句,很棒的选项列表!谢谢。
  • 感谢朋友,很高兴我能提供帮助
【解决方案2】:

插件响应什么事件?它在哪个组?对于许多事件,您可以检查页面的 $context。如果您知道它只会在某个页面上加载,请使用这些标识符。

例如这是分页插件中的一行:

if ($params->get('show_item_navigation') && ($context == 'com_content.article') && ($view == 'article')) {

或者这个来自加载模块

    $canProceed = $context == 'com_content.article';
    if (!$canProceed) {
        return;
    }

【讨论】:

  • 事件是:onContentPrepare
  • 正确,这样每一页都会发生这种情况。因此,您要做的是执行 if ($context != whatever) {return;} 查看其他一些内容插件,您会发现基本上您正在检查 url。
  • 我不确定我是否理解“随便”部分是什么?其他插件在您的回答中包含一些内容,但我不确定它们的含义。例如 loadmodule 我不知道com_content.article 是什么。
  • 一篇文章的网址是 index.php?option=com_content&view=article&id=2(对于文章 2)。换句话说,这是在询问 url 中的内容,如果 url 没有表明我们在文章中,那么不要继续运行插件。
  • 好的,到了。如果我和 loadmodule 一样,它只会加载文章。但现在更具体地说,例如我将如何指定文章 id 30?
【解决方案3】:

我认为将Itemid 放入plugin 是行不通的。我建议您将 css 代码移动到模板 index.php 中并检查它会在那里工作的 itemid 条件。

【讨论】:

    【解决方案4】:

    尝试使用以下内容:

    $application = JFactory::getApplication();
    $menu = $application->getMenu();
    $item = $menu->getItem(1);
    if ($item == 1){
        $doc = JFactory::getDocument(); //Remove it you already have this line
        $doc->addStyleSheet($pluginAssetsUrl . '/css/aecuserpage.css');
    }
    

    将数字“1”更改为页面所属的任何菜单项。

    请注意,我尚未对此进行测试,因此请告诉我它是否有效。如果没有,我会看看我能挖出什么。

    【讨论】:

    • 关闭,谢谢。这段代码肯定会阻止它大部分加载(奇怪的是它仍然显示在站点的根目录上)。我正在玩弄菜单项 id,因为它现在也不能在我希望它使用的页面上工作......叹息。如果getMenugetItem 正在做他们应该做的事情,我会进行更多研究。
    • 尝试了一切,但没有成功。尝试了getItems('menutype','mymenu'),它至少返回了一些东西。 getItem 没有。还有其他想法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多