【问题标题】:Joomla plugin not being called未调用 Joomla 插件
【发布时间】:2012-07-22 10:45:07
【问题描述】:

这是我第一次尝试创建 Joomla 插件,我需要一些帮助才能使其正常工作。该插件非常简单,我想捕获 HTTP_REFERER,检查请求是否来自 Google 有机或付费结果,将数据传递给会话 var,然后将其与联系表单中的值一起提交。 (我的表单中有一个隐藏字段,它获取会话 var 值)。我使用 RSForms 创建表单,仅供参考。

一开始,我将以下代码硬编码到站点根目录的 index.php 中,它运行良好。现在,我正在尝试制作一个合适的插件,但是在加载页面时我无法启动它。所有的系统方法我都试过了,还是不行。

这是我的代码:

defined( '_JEXEC' ) or die( 'Restricted access' );

jimport( 'joomla.plugin.plugin' );

class plgSystemRsformsGoogleReferer extends JPlugin
{

    public function plgSystemRsformsGoogleReferer( &$subject, $config )
    {
        parent::__construct( $subject, $config );
    }


    function onAfterRender()
    {
        $session = & JFactory::getSession();
        if (!$session->get('referrer', $origref, 'extref')) //If does not exist
        {
          $origref = $_SERVER['HTTP_REFERER'];
          $session->set('referrer', $origref, 'extref');
          $q =  search_engine_query_string($session->get('referrer', $origref, 'extref'));

          if(stristr($origref, 'aclk')) { // if referer is a google adwords link as opposed to an organic link
              $type = ', paid link';
          } else {
              $type = ', organic result';
          }

        $ginfo = $q.$type;
        $session->set('referrer', $ginfo, 'extref');  

        }

        function search_engine_query_string($url = false) {
            if(!$url && !$url = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : false) {
                return '';
            }

            $parts_url = parse_url($url);
            $query = isset($parts_url['query']) ? $parts_url['query'] : (isset($parts_url['fragment']) ? $parts_url['fragment'] : '');
            if(!$query) {
                return '';
            }
            parse_str($query, $parts_query);
            return isset($parts_query['q']) ? $parts_query['q'] : (isset($parts_query['p']) ? $parts_query['p'] : '');
        }
    }
}

这是我用于插件安装的清单 xml(安装工作正常):

<?xml version="1.0" encoding="utf-8"?>
<install version="1.5" type="plugin" group="system" method="upgrade">
    <name>RSForm Google Referer v1.1</name>
    <author>Me</author>
    <creationDate>July 2012</creationDate>
    <copyright>(C) 2004-2012 www.mysite.com</copyright>
    <license>Commercial</license>
    <authorEmail>info@mysite.com</authorEmail>
    <authorUrl>www.mysite.com</authorUrl>
    <version>1.1</version>
    <description><![CDATA[Track visitor's search terms and and attaches the information to the RSForm! Pro Forms emails when sent.]]></description>
    <files>
        <filename plugin="rsform_google_referer">rsform_google_referer.php</filename>
    </files>
</install>

我觉得我很接近,但我无法让它运行,任何建议都将不胜感激。谢谢!

【问题讨论】:

  • 首先猜测是插件的内部名称不匹配 - 来自 files->filename xml 元素中的 plugin="" 参数和您的类的名称。也可能是使用了“名称”标签,但其中有空格和版本号。不记得具体细节,但你的类名 - 包括字母的大小写必须与内部插件名称相对应(无论是派生的)。
  • @DeanMarshall 谢谢院长,真的救了我的命。我正在寻找一个解决方案,为什么旧​​的和不受支持的 joomla 1.5 插件在渲染后不触发。原因是类 bane 没有插件内部名称中的下划线。

标签: plugins joomla joomla1.5


【解决方案1】:

类名错误。它需要匹配插件文件夹的名称和插件文件的名称。应该是:

class plgSystemRsform_Google_Referer extends JPlugin

那是Rsform 而不是Rsforms 和下划线。

【讨论】:

    猜你喜欢
    • 2011-08-10
    • 1970-01-01
    • 2012-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-04
    相关资源
    最近更新 更多