Kdyby Replicator order pořadí položek
- kleinpetr
- Člen | 480
Zdravím,
prošel jsem vlákna týkající se sortování dynamic položek a ani jedno řešení se mi příliš nehodilo, tak se chci podělit o mé řešení, třeba se bude někomu hodit.
Pro vizuelní řazení jsem použil klasicky Jquery UI sortable, to funguje dobře, nicméně když přidáte nový item a překreslí se vám zpetně snippet, tak se vám pořadí vrátí zpět do původního stavu, proto jsem si přidal do formu následující button
$form->addSubmit('changeItemsOrder', null)->setValidationScope(FALSE)->onClick[] = [$this, 'changeItemsOrder'];
public function changeItemsOrder(SubmitButton $button)
{
$form = $button->form;
$form->onSuccess = [];
$values = $form->getValues(true);
$new_items = [];
foreach ($values['items'] as $index => $item) {
$new_items[] = $form['items'][$index];
$form['items']->remove($form['items'][$index]);
}
foreach ($new_items as $new_item) {
$form['items'][] = $new_item;
}
Callback::invoke($this->reloadItemsCallback);
}
To přenastavení klíčů by se dalo určitě udělat nějak elegantněji,
akorát když jsem zkoušel přidat celé pole
$form['items'] = $new_items;
tak mi házelo error
při addComponent() expected IComponent, array given
A na konec jako callback pro sortable jsem přidal
jednoduše $('input.changeItemsOrder').click()
Kdyby někdo měl návrh na vylepšení, tak sem s ním :) Snad se bude někomu hodit.