2016-09-21 87 views
1

我正在編寫幾個插件來處理通過API的用戶信息。我沒有發現可以完全處理的默認進程,所以我使用onAfterRoute來覆蓋組件模型類。Joomla覆蓋用戶組件模型

這僅僅是檢查該成分= com_users,視圖=重置或提醒:

class plgSystemUseroverride extends JPlugin { 

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

      public function onAfterRoute() { 
       $app = JFactory::getApplication(); 
       $input = $app->input; 
       if('com_users' == $input->get('option') && 'reset' == $input->get('view') && !$app->isAdmin()) {    
        require_once(dirname(__FILE__) . '/user/reset.php'); 
       } 

       if('com_users' == $input->get('option') && 'remind' == $input->get('view') && !$app->isAdmin()) { 
        require_once(dirname(__FILE__) . '/user/remind.php'); 
       } 
      } 
    } 

的文件從用戶部件複製,並且我修改「提醒」爲我的測試: 方法processRemindRequest:

$return = JFactory::getMailer()->sendMail($data['mailfrom'], $data['fromname'], $user->email, $subject . " TEST Subject", $body); 

如果直接編輯組件文件,但是作爲插件類沒有被覆蓋,修改工作正常。

回答

0

沒關係,我想通了。刪除視圖並僅檢查組件是否是'com_users'就足夠了。我還設置JLoader來註冊類:

public function onAfterRoute() { 
     $app = JFactory::getApplication(); 
     if('com_users' == JRequest::getCMD('option') && !$app->isAdmin()) {  
      JLoader::register('UsersModelReset', dirname(__FILE__) . '/user/reset.php'); 
      JLoader::register('UsersModelRemind', dirname(__FILE__) . '/user/remind.php'); 
     } 
    }