2012-07-24 53 views
2

這是我第一次嘗試創建一個Joomla插件,我需要一些幫助才能使其工作。該插件非常簡單,我想要捕獲HTTP_REFERER,檢查請求是否來自Google有機或付費結果,將數據傳遞給會話變量,然後將其與聯繫人表單中的值一起提交。 (我的表單中有一個隱藏的字段,它會獲得會話var值)。我使用RSForms創建我的表單,僅供參考。Joomla插件不被稱爲

在開始的時候,我硬編碼下面的代碼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>[email protected]</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> 

我覺得我很接近,但我不能讓它運行,任何建議將不勝感激。謝謝!

+1

第一個猜測是,它是你的插件的內部名稱之間的不匹配 - 從插件=「」 parametever在文件 - >文件名的XML元素和類的名稱。 它也可能是它使用的'name'標籤,但你有空格和版本號。無法記住具體信息,但是您的類名 - 包括字母的大小寫必須與內部插件名稱(但是派生)相對應。 – 2013-02-05 23:58:50

+0

@DeanMarshall謝謝Dean,真的救了我一天。我正在尋找一個解決方案,爲什麼舊​​的和不支持的joomla 1.5插件不渲染後渲染。原因是類插件沒有下劃線,如插件內部名稱。 – 2013-09-13 19:51:24

回答

3

該班的名字是錯誤的。它需要匹配插件文件夾的名稱和插件文件的名稱。它應該是:

class plgSystemRsform_Google_Referer extends JPlugin 

也就是說RsformRsforms和下劃線。