Php 乔姆拉:可以';t使用onUserAfterSave工作制作插件

Php 乔姆拉:可以';t使用onUserAfterSave工作制作插件,php,plugins,joomla,Php,Plugins,Joomla,尝试了半打不同的方法,但仍然不起作用。本地机器上的Joomla 1.7.3。这个插件什么都不做,但实际上它还没有破坏任何东西。据我所知,命名约定是可以接受的 我要做的是在数据库表中插入一个新行,其中包含一个新用户的userid。表已经创建,我检查了SQL查询以确保它工作正常 <?php // no direct access defined( '_JEXEC' ) or die( 'Restricted access' ); // Import library dependencies

尝试了半打不同的方法,但仍然不起作用。本地机器上的Joomla 1.7.3。这个插件什么都不做,但实际上它还没有破坏任何东西。据我所知,命名约定是可以接受的

我要做的是在数据库表中插入一个新行,其中包含一个新用户的userid。表已经创建,我检查了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;
        }
    }
}

假设Joomla 1.6/7/2.5上出现这种情况。。。如果您将其放在正确的位置,即/plugins/user/cnpluginupdate/wrap您的数据库代码,请执行如下错误检查:

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;
    }
}
  • 目前,无论发生什么情况,您都只返回true,因此不会报告任何错误。使用如上所示的
    尝试
    ,以捕获可能的错误

  • 您确定它通过了
    if(!$success)
    -通常您会在执行任何工作之前检查所有输入,并且只有在代码遇到错误时才会返回
    false

  • 例如


    我试过这个,但没有效果。我不知道如何将错误检查代码添加到插件中,所以这很好,但它仍然没有做任何事情。在这一点上,我想知道我是否在命名约定中有什么错误-大小写重要吗?我已经回顾了命名的内容。这些文件位于/plugins/user/cnpluginupdate中。文件名为plgusercnpuginupdate.php。该类名为plgusercnpuginupdate。我通过在后端而不是前端添加用户来测试这一点。不知道这是否会对onUserAfterSave函数产生影响。对于PHP中的函数,case实际上不算,但它是匹配定义的好形式。让我想一想还有什么可能发生。由于我无法解决的原因,这个解决方案对我很有效。我只是复制了代码并更改了数据库表,所有的工作都完全符合预期。仍然不知道为什么我的代码不起作用。
    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
        }