Joomla:无法使用onUserAfterSave工作制作插件

时间:2012-02-15 22:53:04

标签: php plugins joomla

尝试了这六种不同的方式,它仍然无法正常工作。 Joomla 1.7.3在本地机器上。该插件什么都不做,但它实际上并没有破坏任何东西。据我所知,命名惯例是可以的。

我要做的是在数据库表中使用新用户的用户ID插入新行。该表已经创建,我检查了SQL查询以确保它有效。

<?php
// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );

// Import library dependencies
jimport('joomla.plugin.plugin');

class plgUserCNPluginUpdate extends JPlugin 
{
    function onUserAfterSave ($user, $isnew, $success, $msg) 
    {
        if (!$success) 
        {
            return false;
        }
        if ($isnew) 
        {
            $db = JFactory::getDbo();
            $db->setQuery(
                'INSERT INTO `#__cnuser_cginfo`(`RecordID`,`UserID`) VALUES (NULL,'.(int) $user['id'].')'
            );
            $db->Query();
            return true;
        }
    }
}

我错过了一些明显的东西吗?我一直在环顾四周,我尝试的任何解决方案都无效。它位于正确的位置,我可以在插件管理器屏幕上看到它。希望有人能给我一些建议。

1 个答案:

答案 0 :(得分:1)

假设这个在Joomla 1.6 / 7 / 2.5上...如果你在正确的位置,即/ plugins / user / cnpluginupdate /将你的db代码包装成一些错误检查:

try
{
    $db = JFactory::getDbo();
    $db->setQuery(
        'INSERT INTO `#__cnuser_cginfo`(`RecordID`,`UserID`)
         VALUES (NULL,'.(int) $user['id'].')'
    );

    if (!$db->query()) {
        throw new Exception($db->getErrorMsg());
    }        

    catch (JException $e)
    {
        $this->_subject->setError($e->getMessage());
        return false;
    }
}
  1. 目前,无论发生什么事情,您都会返回true,因此不会报告任何错误。使用上面显示的try来捕捉可能的错误......

  2. 您确定它已超过if (!$success) - 通常您会在执行任何工作之前检查所有输入,如果您的代码遇到错误,您只会返回false

  3. 例如

    function onUserAfterSave($data, $isNew, $result, $error)
    {
        $userId = JArrayHelper::getValue($data, 'id', 0, 'int');
    
        if ($userId && $result && isset($data['profile']) && (count($data['profile'])))
        {
          // then 'try' your code here
        }