我正在开发我的Joomla组件TTVideo的新版本。我正在尝试使用jQuery stars插件设置评级系统。我已经解决了jQuery noconflict问题,但是我对如何将投票安全发送给使用投票值更新数据库的帮助程序类感到困惑。
通常这是通过外部脚本完成的,该脚本仅由ajax请求访问。我想这样做,因此它被合并到我的组件中,并且以这样的方式使得std Joomla变量可用于辅助类,例如getDBO()和数据库引用#__ table_name。
任何关于如何实现这一目标的评论将不胜感激。感谢。
答案 0 :(得分: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')
,这将检查网址中的令牌。这对于读取数据的AJAX调用很有用。