尝试了这六种不同的方式,它仍然无法正常工作。 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;
}
}
}
我错过了一些明显的东西吗?我一直在环顾四周,我尝试的任何解决方案都无效。它位于正确的位置,我可以在插件管理器屏幕上看到它。希望有人能给我一些建议。
答案 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;
}
}
目前,无论发生什么事情,您都会返回true,因此不会报告任何错误。使用上面显示的try
来捕捉可能的错误......
您确定它已超过if (!$success)
- 通常您会在执行任何工作之前检查所有输入,如果您的代码遇到错误,您只会返回false
。
例如
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
}