2011-03-08 52 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