2012-04-24 2 views
1

Я пытаюсь сортировать список записей базы данных, а затем обновлять базу данных с новым заказом в Joomla.Порядок сортировки Joomla/Mootools для сортировщиков

До сих пор у меня есть mootools Sortables список с каждым <li> с двумя скрытыми <input> для отслеживания идентификатора и заказа. В настоящий момент переменная заказа не изменяется и просто отражает исходный порядок.

Я надеялся захватить отправить событие и изменить переменные порядка к тому, что теперь они должны быть, а затем отправить запрос на, но я понятия не имею, как это сделать ...

у меня есть:

<li style="float:left"> 
    <input type="hidden" name="o<?php echo $row->order; ?>" value="<?php echo $i; ?>" /> 
    <input type="hidden" name="i<?php echo $row->order; ?>" value="<?php echo $row->lotid; ?>" /> 
    Lot <?php echo $row->lot_name; ?><br /> 
    <?php echo $row->address; ?> 
</li> 

И:

window.addEvent('domready', function(){ 
    new Sortables('#order-grid', {opacity: 0.7}); 

    form = document.id('adminForm'); 
    list = document.id('order-grid'); 

    form.addEvent('submit', function(e) { 
     var sortOrder = []; 

     list.getElements('li').each(function(li) { 
      sortOrder.push(li.retrieve... //Stuck! 
     }); 
    }); 
}); 

оценил любую помощь.

ответ

2

страницы документа являются вашим другом. http://mootools.net/docs/more/Drag/Sortables

сначала, я бы сказал, сохраните ссылку.

var sortables = new Sortables(options) 

, то вы можете использовать метод sortables.serialize() для получения нового заказа. по умолчанию сериализация вернет идентификаторы элементов - но для этого требуется аргумент, который является функцией, поэтому вы можете вернуть все, что захотите.

например. чтобы получить массив нового порядка сортировки, просто сделать

var newOrder = sortables.serialize(function(el, index) { 
    return el.get('data-id'); // or el.retrieve('id'); if you have one. 
}); 

Наконец, нет необходимости делать это на представить событие - вы можете просто сделать что-то вроде:

var orderField = document.id("i_something_order"); 
new Sortables('#order-grid', { 
    onComplete: function() { 
     orderField.set('value', this.serialize(function(el) { 
      el.retrieve('id'); 
     }).join(',')); 
    } 
}); 

отмечают, что retrieve подразумевает вас использовали store заранее. если это атрибут DOM, который вам нужен, просто сделайте el.get('data-id') или что бы это ни было, как было предложено

+0

Спасибо за ответ, как бы получить имя и значение с моих входов? Это моя основная проблема, поэтому я могу изменить эти значения. – BeaverusIV

+0

Спасибо, добавлена ​​функция onComplete, которая зациклилась на входах и сбрасывает их порядок. Работает. Просто упоминание, что я прочитал этого человека. – BeaverusIV