Drupal 7 - 通过ajax / frontpage更新节点字段

时间:2011-03-08 04:31:14

标签: php ajax drupal jquery-ui drupal-7

我有一些jQueryUI可拖动对象,它们代表在Drupal的首页上生成的节点。

我想在用户删除元素并将x / y坐标保存到服务器时抓取,这样当下一个用户打开页面时,它仍然是最后一次离开的位置。

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

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

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

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

2 个答案:

答案 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