代码之家  ›  专栏  ›  技术社区  ›  Martin

使用jquery通过joomla mvc组件更新数据库

  •  3
  • Martin  · 技术社区  · 14 年前

    我正在开发一个新版本的joomla组件ttvideo。我正在尝试使用jquery stars插件设置一个评级系统。我已经解决了jquery-noconflict问题,但是我对如何发送投票有点困惑。 安全地 到一个助手类,该类用投票值更新数据库。

    通常,这是通过一个外部脚本来完成的,该脚本仅被Ajax请求访问。我希望这样做,以便它被合并到我的组件中,并且以这样一种方式,std joomla变量可用于帮助程序类,例如getdbo()和数据库引用uu table_name。

    任何关于如何实现这一目标的评论都将受到极大的赞赏。谢谢。

    1 回复  |  直到 12 年前
        1
  •  4
  •   Alex    14 年前

    这是非常直接的。

    首先,您需要创建一个控制器,该控制器具有处理评级更新的特定任务。要使其安全,请验证令牌!令牌将随Ajax请求一起提供。

    考虑这个例子

    function rate() {
        // Check for request forgeries
        JRequest::checkToken() or jexit('Invalid Token');
    
        //  Get ID of item
        //  update rating, etc...
    }
    

    第二,在视图中创建Ajax请求,显然是由某些操作触发的。 确保将您的请求作为日志发送,因为您将要写入数据… 您可以让外部文档中的脚本从HTML文档(隐藏输入中的id、token、url等)获取值,也可以用php生成javascript并将其包含在头中(如下面的示例)。

    <?php
    //
    $url = JRoute::_('index.php?option=my_component&controller=my_controller');
    $token = JUtility::getToken();  //  <-  Session token
    $id = 101;  //  <-  YOUR ID
    
    //  This will add the request to the head of the document, instead of somewhere in the document
    JFactory::getDocument()->addScriptDeclaration("
        .ajax({
            type: 'POST',
            url: $url,
            data: {
                '$token': '1', // <-- THIS IS IMPORTANT
                'task': 'rate',
                'id':  $id
            },
            success: youSuccessFunction
        }); 
    ");
    ?>
    

    您可能需要修改一些东西,但这是MVC中Ajax背后的想法。

    注:您也可以拨打 JRequest::checkToken('get') 这将检查URL中的令牌。这对于读取数据的Ajax调用很有用。