5

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

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

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

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

该插件在文章页面上打印一个简单的表格并使用插件功能onContentPrepare

4

4 回答 4

5

使用这些片段来管理您的问题:

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');
}
于 2012-12-12T21:04:37.400 回答
0

尝试使用以下内容:

$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”更改为页面所属的任何菜单项。

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

于 2012-11-24T19:25:41.613 回答
0

我不认为进入Itemid内部plugin会起作用。我建议您在模板 index.php 中移动 css 代码并检查它会在那里工作的 itemid 条件。

于 2012-12-10T05:22:18.653 回答
0

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

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

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

或者这个来自 loadmodule

    $canProceed = $context == 'com_content.article';
    if (!$canProceed) {
        return;
    }
于 2012-12-10T06:40:07.940 回答