2010-10-21 36 views
3

我正在开发我的Joomla组件TTVideo的新版本。我正在尝试使用jQuery stars插件设置评分系统。我解决了jQuery noconflict问题,但是我对如何将安全发送给助手类更新数据库以及投票值感到困惑。使用jQuery通过Joomla MVC组件更新数据库

通常这是通过外部脚本完成的,每个脚本只能通过ajax请求访问。我想这样做是为了将它集成到我的组件中,并且以这样的方式,可以为助手类提供标准的Joomla变量,例如, getDBO()和数据库引用#__表名。

任何意见,如何实现这将不胜感激。谢谢。

回答

4

这很简单。

首先,您需要创建一个控制器,其中包含处理您的评级更新的特定任务。为了确保安全,请验证令牌!该令牌将带有AJAX请求。

考虑这个例子

function rate() { 
    // Check for request forgeries 
    JRequest::checkToken() or jexit('Invalid Token'); 

    // Get ID of item 
    // update rating, etc... 
} 

其次,在视图中创建您的AJAX请求,通过一些行动显然触发。 确保将您的请求作为POST发送,因为您要写入数据... 您可以让脚本在外部文档中获取来自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调用非常有用。

+0

谢谢亚历克斯,我已经实施了这个昨天,如上所述。我唯一遗漏的就是令牌,我一定会把它包括进去。另外需要注意的是,如果你想从ajax请求收到一个回应,这是非常重要的,例如, json,xml,html,是你应该在你的请求URL中添加&format = raw的index.php?选项= my_component&控制器= my_controller&格式=原料。如果你不这样做,你会得到Joomla模板的HTML包裹你的回应。 – Martin 2010-10-23 10:21:39

+0

如果添加'format = raw','view.raw.php'将被调用。这是AJAX调用不需要的东西,会导致额外的负载和不必要的视图负载(控制器和模型对于Ajax来说足够了)。更好的任务输出并使用'jexit()'来防止脚本进一步执行。但是,如果您仍然想要使用该视图,请制作与输出相关的格式。原始 - 原始html('view.raw.php'),json - json响应('view.json.php')等... – Alex 2010-10-23 20:30:27

+0

format = raw **不会**调用视图。 view = raw会调用视图,** format **是一个std Joomla选项,不会返回组件返回的任何其他html。这在返回JSON时很有用,因为您不需要其他任何其他html /文本,jQuery不会识别它。 – Martin 2010-10-25 10:39:37