Eliminare un elemento da una lista aggiornandola

Luca Benati

Come cancellare un elemento da una lista e forzarne l'aggiornamento


Pubblicato da Luca Benati il 23 luglio 2019

Per eliminare un elemento da una lista è necessario innanzitutto un pulsante che ci permetta di farlo. Per fare questo andiamo ad aggiungere questo codice in

nomeautore\nomeplugin\controllers\nomecontroller\ _list_toolbars.htm


<button 
    class="btn btn-default oc-icon-trash-o"
    disabled="disabled"
    onclick="$(this).data('request-data', {
        checked: $('.control-list').listWidget('getChecked')
    })"
    data-request="onDelete"
    data-request-confirm="Sei sicuro?"
    data-trigger-type="enable"
    data-trigger=".control-list input[type=checkbox]"
    data-trigger-condition="checked"
    data-stripe-load-indicator>
    Elimina
</button>


Abilitiamo i checkbox per la selezione degli elementi in

nomeautore\nomeplugin\controllers\nomecontroller\config_list.yaml

showCheckboxes: true


Ora dobbiamo aggiungere il metodo nel controller che andrà ad eliminare l'elemento che vogliamo cancellare.

Ricordo che il metodo e la data-request del bottone sono relazionati, cioè il nome del metodo inserito nell'argomento data-request sarà il metodo che verrà invocato dalla chiamata ajax al click sul pulsante.


<button
...
data-request="onDelete"
...
>
    Elimina
</button>


Nel controller avremo quindi il metodo


public function onDelete()


Il metodo completo sarà qualcosa di questo tipo:


/** Cancella l'elemento dalla lista. Chiamata Ajax **/
public function onDelete() {
    /** controlliamo di avere dei valori sui quali ciclare **/
    if (($checkedIds = post('checked')) && is_array($checkedIds) && count($checkedIds)) {
        /** Cicliamo su ogni id **/
        foreach ($checkedIds as $objectId) {
            /** Controliamo che ci sia un oggetto con questo id
            * Qui possimao aggiungere altri controlli as esempio sui permessi utente.
            **/
            if (!$object = NOMEDELMIOMODELLO::find($objectId))
                continue; /** Se non troviamo l'oggetto proseguiamo **/
            /** Se troviamo l'oggetto lo eliminiamo **/
            $object->delete();
        }
    }

    /** Ritorniamo la lista di elementi aggiornata così l'utente
    *   vede che l'elemento è stato effettivamente eliminato
    **/

    return $this->listRefresh();
}

Chiamando


$this->listRefresh()

forziamo la lista ad aggiornarsi nella vista utente senza che venga ricaricata la pagina.


Lunga vita e prosperità

Ti interessa un argomento non trattato?