2011-03-08 69 views
1

我有几个jQueryUI可拖动对象,代表我在Drupal的头版上生成的节点。Drupal 7 - 通过ajax/frontpage更新节点字段

我想抓住用户放下元素并将x/y坐标保存到服务器,以便在下一个用户打开页面时它仍然是它最后留下的位置。

我创建了两个整数字段,homex和homey,但我似乎无法弄清楚或找到足够的文档来学习如何告诉Drupal更新给定节点的值。

我很熟悉如何在Drupal和ajax中创建模块 - 但在这种情况下将两者结合在一起让我感到困惑。

有人可以帮助我理解如何附加到Drupal,所以我可以动态保存坐标吗?

如果我可以为Drupal编写一个简单的处理程序模块,并在get/post请求中使用x/y对,然后在数据库中更新它们并以成功/ json响应,那么最好是什么。真的,如果没有在Drupal中完成,这将是一个相当简单的设置。

回答

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

我认为这种“直接”的方式对于非敏感数据很好,但是使用Form API,您不必关心安全问题 – corbacho 2011-03-12 11:27:21

+0

当然,尽管在这种情况下,我认为使用表单API并不可行 – 2011-03-12 16:45:21

1

当你说你熟悉ajax时,你的意思是jquery的ajax或Drupal 7 ajax框架。你可以在这里阅读更多关于Drupal 7 Ajax的信息http://drupal.org/node/752056

我想homex是一个隐藏的表单元素。也许你可以hook_form_alter它,加入由一个“变”事件例如或任何其他Jquery event触发的AJAX回调#ajax属性,并在Ajax回调,执行node_form_submit_build_node

+0

也许我误解你;但是这可以从FrontPage完成吗?我认为大多数表单钩子与给定表单被修改时相关 – 2011-03-08 14:04:22

+0

表单可以放置在首页,通过块,通过主题的preprocess_hook中的变量等,使用drupal_render('name_of_form') – corbacho 2011-03-08 19:00:26