Joomla 覆盖用户组件模型

Joomla override users component model

我正在编写一些插件来通过 API 处理用户信息。我发现没有任何默认进程可以完全处理这个问题,所以我使用 onAfterRoute 来覆盖组件模型 类.

这只是检查组件 = 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');
              }
          }
     }

文件是从用户组件复制的,我修改了 'remind' 以供测试: 方法 processRemindRequest:

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

如果直接编辑组件文件,修改工作正常,但作为插件,类 不会被覆盖。

没关系,我想通了。删除视图并检查组件是否为 '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');
      }
  }