0

请帮忙,这是我写的第一个插件,我完全迷路了。我正在尝试使用我的自定义giveBadge()函数在 joomla 数据库的表中写入和更新信息。这些函数接收两个不同的变量,第一个变量是$userID,第二个变量是数字300 ,我使用giveBadge(300)在类的底部传递它。同时比较 Joomla 数据库中的$userID以确保将数字300分配给登录 Joomla 站点的当前用户。

提前致谢。

<?php


     defined('JPATH_BASE') or die;


      class plgUserBadge extends JPlugin
      {
           public function onUserLogin () {
                $user =& JFactory::getUser();
                $userID =& user->userID;

                return $userID;
           }

           public function giveBadge ($userID, &$badgeID) {
                // Get a db connection.
                $db = JFactory::getDbo();

                // Create a new query object.
                $query = $db->getQuery(true);

                // Fields to update.
                $fields = array(
                    'profile_value=\'Updating custom message for user 1001.\'',
                    'ordering=2');

                // Conditions for which records should be updated.
                $conditions = array(
                    'user_id='.$userID, 
                    'profile_key=\'custom.message\'');

                $query->update($db->quoteName('#__user_badges'))->set($fields)->where($conditions);

                $db->setQuery($query);

                try {
                    $result = $db->query(); 
                } catch (Exception $e) {
                    // Catch the error.
                }es = array(1001, $db->quote('custom.message'), $db->quote('Inserting a record using insert()'), 1);

            }   

        }

     giveBadge(300);  //attaches to $badgeID    

    ?>
4

1 回答 1

2

您的代码进展不顺利:

  • 您可以在所有代码 (&) 中通过引用删除分配- 在 99% 的情况下,您真的不需要它。
  • 使用 IDE(例如带有 PDT 的 Eclipse)。在您的代码顶部,& user->userID;任何 IDE 都会发现您的错误以及代码中的其他内容。
  • 研究现有插件以了解它们的工作原理。这也是关于插件的文档
  • 当特定事件被触发时(当您的插件被激活时),Joomla 将自动调用 onUserLogin() 方法。检查die("My plugin was called")你的插件是否真的被调用
  • 在 onUserLogin() 中,您执行所有业务逻辑。你不应该返回一些东西,只需要返回 true。现在你的方法完全没有任何作用。但是您可以调用 $this->giveBadge() 将逻辑移动到另一个方法。
于 2013-04-26T15:21:27.410 回答