试着写一个简单的Joomla插件

时间:2013-04-24 21:11:03

标签: database joomla joomla2.5 updating

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

提前致谢。

<?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    

    ?>

1 个答案:

答案 0 :(得分:2)

您的代码不合适:

  • 您可以在所有代码中放弃通过引用分配(&amp;) - 在99%的情况下,您真的不需要它。
  • 使用IDE (例如Eclipse with PDT)。在代码的顶部,您有& user->userID;任何IDE都会发现您的错误以及代码中的其他内容。
  • 研究现有的插件,了解它们的工作原理。这也是documentation on plugins
  • 当触发特定事件时(激活插件时),Joomla 将自动调用onUserLogin()方法。请使用die("My plugin was called")查看您的插件是否真正被调用
  • 在onUserLogin()中你做了所有的业务逻辑。你不应该返回一些东西,只返回true。现在你的方法绝对没有。但你可以调用$ this-&gt; giveBadge()将逻辑移动到另一个方法。