好吧,我想我會跟着我找到的解決方案跟進我的問題。它可以幫助其他人。它很大程度上取決於googletorp對此處發佈的類似問題的回答:Drupal 6/jQuery Ajax update a field。
步驟1.0創建一個新模塊。 我創建了一個簡單的updatemynode.info文件和updatemynode.module文件。
1.1 updatemynode/updatemynode.module包含兩個函數。
function updatepos_menu() {
$items = array();
$items['update_positions'] = array(
'page callback' => 'update_node_position',
'type' => MENU_CALLBACK,
'access callback' => TRUE,
'access arguments' => array('access content'),
);
return $items;
}
這是創建它調用PHP函數「update_node_position」一個URL www.mywebsite.com/update_positions模塊中的第一功能。 (見下文)
1.2 updatemynode/updatemynode.module第二函數是:
function update_node_position() {
// Create an array from the passed string
$neworder = explode(",", $_POST['theorder']);
// For each array entry, redo their node weight (which Views sorts on)
foreach ($neworder as $key => $value){
$node = node_load($value);
$node->node_weight = ($key+1);
node_save($node);
}
}
爲了簡潔和簡單起見,我已經移除任何錯誤檢查,以它只是完成一個功能,就是這樣。基本上,它執行以下操作:A.搜索$ _POST ['theorder']變量(其中包含我的應用中的NID字符串),使用php'explode'將字符串轉換爲數組並將其分配給$ neworder。 B.對於新陣列的每個條目,使用值(NID)加載該節點。 C.我使用'重量'模塊來創建排序。 $ node-> node_weight =($ key + 1);行將數組1,2,3,4等中的位置分配給節點wight。 (因此創建一個訂單)。 D.保存該節點並重復每個數組中的條目。
2.0我有一個main_javascript.js文件附加到我的所有drupal頁面。該JavaScript文件包含以下代碼:
$(function() {
$(".sortable-nodes").sortable({
placeholder: "ui-state-highlight",
opacity: 0.7,
update: function(event, ui) {
// Create result variable that contains array order.
var result = $(this).sortable('toArray');
// Run AJAX function with RESULT data to update_positions page
$.ajax({
type: "POST",
url: "/update_positions",
// Pass the RESULT array
data: { theorder : [result]},
});
}
});
這是jQuery的癥結和它的幾個位:
2.1對象(這是一個DIV在我的情況)標記的.sortable節點使用jQuery的「可排序」方法進行排序。當我點擊並拖動DIV時,它會這樣做:
2.2在每個可排序的DIV之間使用CSS類'ui-state-highlight'。
2.3將不透明度降低到70%。
2.4一旦位置被改變,它將運行'更新'事件。
2.5'update'事件將創建一個名爲'result'的變量,其中包含所有可排序對象節點標識的字符串。 (例如113,114,115,116,117等)
2.6運行.ajax方法並被告知向/ update_positions URL(在updatemynode/updatemynode.module文件中早先創建)發送POST請求,並將$ _POST變量名爲'theorder',其中包含字符串'result'。一旦將字符串'result'傳遞給URL,那麼模塊函數update_node_position()將使用該字符串,並如上所述執行其魔術。
3.0我在頁面上的結果是按節點權重使用視圖排序的。所以,當頁面重新加載時,訂單應該保持與您訂購它的方式相同(因爲node_weight已更新)使用AJAX調用。
希望可以幫助別人。任何問題/意見歡迎!
謝謝你clive。我一直在做更多的研究,看來你提到的第二種方法是更好的方法。我發現這個帖子:[drupal-6-jquery-ajax-update-a-field](http://stackoverflow.com/questions/1670858/drupal-6-jquery-ajax-update-a-field)這似乎解決了這個任務的大部分重要問題。 – loneTraceur