Joomla: не могу создать плагин, используя onUserAfterSave work - PullRequest
0 голосов
/ 16 февраля 2012

Пробовал полдюжины разных способов, и он все еще не работает.Joomla 1.7.3 на локальной машине.Плагин ничего не делает, но на самом деле он ничего не ломает - пока.Насколько я могу судить, соглашения о присвоении имен в порядке.

Я пытаюсь вставить новую строку в таблицу базы данных с идентификатором пользователя нового пользователя.Таблица уже создана, и я проверил 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 Ответ

1 голос
/ 16 февраля 2012

Предполагая, что это на Joomla 1.6 / 7 / 2.5 ... и если у вас есть это в нужном месте, то есть / plugins / user / cnpluginupdate / оберните ваш код БД в некоторой проверке ошибок, как это:

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, только если ваш код обнаружил ошибку.

например.

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
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...