【问题标题】:Drupal 7 - Update node fields via ajax/frontpageDrupal 7 - 通过 ajax/frontpage 更新节点字段
【发布时间】:2011-03-08 04:31:13
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    看来我所要做的就是在一个模块中创建一个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'
        )));
    }
    
    ?>
    

    【讨论】:

    • 我认为这种“直接”的方式对非敏感数据来说很好,但是使用 Form API 你不必关心安全问题
    • 当然可以,虽然在这种情况下我认为使用表单 API 是不可行的
    【解决方案2】:

    当您说您熟悉 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

    【讨论】:

    • 也许我误会了你;但这可以从首页完成吗?我认为大多数表单挂钩都与更改给定表单的时间有关
    • 可以使用 drupal_render('name_of_form') 将表单放置在首页、通过块、通过主题的 preprocess_hook 中的变量等。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-06
    • 2010-12-12
    • 2013-07-11
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    相关资源
    最近更新 更多