我有一些jQueryUI可拖动对象,它们代表在Drupal的首页上生成的节点。
我想在用户删除元素并将x / y坐标保存到服务器时抓取,这样当下一个用户打开页面时,它仍然是最后一次离开的位置。
我创建了两个整数字段,homex和homey,但我似乎无法弄清楚或找到足够的文档来学习如何告诉Drupal更新给定节点的值。
我对如何在Drupal和ajax中创建模块非常熟悉 - 但在这种情况下将两者结合起来让我很困惑。
有人可以帮我理解如何附加到Drupal以便我可以动态保存坐标吗?
如果我可以为Drupal编写一个简单的处理程序模块,在get / post请求中获取x / y对,然后在数据库中更新它们并以success / json响应,那将是更可取的。真的,如果没有在Drupal中完成,这将是一个相当简单的设置。
答案 0 :(得分:3)
似乎我所要做的就是在模块中创建一个hook_menu()和一个hook_ajax_callback()(抱歉找不到链接)。
这是我最终的结果(更不用说,留下我正在玩的三种不同的回归方法):
<?php
function homepage_coords_menu(){
return array(//$items
'homepage_coords/%node/%/%' => array(
'page callback' => 'homepage_coords_ajax_callback',
'page arguments' => array(1,2,3),
'access callback' => TRUE,
'type' => MENU_CALLBACK,
)
);
}
function homepage_coords_ajax_callback($node,$x=0,$y=0){
if(!is_numeric($x) || !is_numeric($y)){
ajax_deliver(json_encode(array(
'status'=>'fail'
)));
}
$node->field_homepagex = array('und'=>array(array('value'=>$x)));
$node->field_homepagey = array('und'=>array(array('value'=>$y)));
node_save($node);
ajax_deliver(json_encode(array(
'status'=>'win'
)));
}
?>
答案 1 :(得分:1)
当你说你熟悉ajax时,你的意思是jquery的ajax或Drupal 7 ajax框架。您可以在此处阅读有关Drupal 7 Ajax的更多信息http://drupal.org/node/752056
我认为homex是一个隐藏的表单元素。也许你可以hook_form_alter它,添加#ajax属性,例如由“change”事件或任何其他Jquery event触发的ajax回调,并在该ajax回调中,执行node_form_submit_build_node