Kdyby Replicator order pořadí položek

před 7 měsíci

kleinpetr
Backer | 481
+
0
-

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.