Хорошо, я решил дополнить свой вопрос найденным решением. Это может помочь другим. Он в значительной степени основан на ответе, который googletorp дал на очень похожий вопрос, размещенный здесь: Drupal 6 / jQuery Ajax обновляет поле .
Шаг 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;
}
Это первая функция в модуле, которая создает URL-адрес www.mywebsite.com/update_positions, который вызывает функцию php «update_node_position». (см. ниже)
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-node, становится сортируемым с помощью метода «sortable» jQuery. Когда я нажимаю и перетаскиваю DIV, он делает это:
2.2 Используйте CSS-класс 'ui-state-highlight' между каждым сортируемым DIV.
2.3 Уменьшите непрозрачность до 70%.
2.4 Как только позиция была изменена, она запустит событие «update».
2.5 Событие 'update' создаст переменную с именем 'result', которая содержит строку всех идентификаторов узлов сортируемых объектов. (например, 113,114,115,116,117 и т. д.)
2.6. Метод .ajax запускается, и ему предлагается отправить запрос POST на URL-адрес / update_positions (созданный ранее в файле updatemynode / updatemynode.module) и передать переменную $ _POST с именем 'theorder', которая содержит строку ' результат'. Как только строка «result» передается в URL, тогда функция модуля update_node_position () использует эту строку и выполняет свою магию, как описано выше.
3.0 Мои результаты на странице упорядочены по весу узла с использованием представлений. Таким образом, когда страница перезагружается, порядок должен оставаться таким же, как вы ее заказали (потому что был обновлен node_weight) с помощью вызова AJAX.
Надеюсь, что это может кому-то помочь. Любые вопросы / комментарии приветствуются!