cancellare un record da zii.widgets.CListView

Quando con gii realizziamo la logica di CRUD,

vengono implementati i controller

actionAdmin()

che si preoccuperà di gestire la griglia (zii.widgets.grid.CGridView)

questa griglia ha la possibilità di eliminare dei record.

Immagino che in qualche modo via ajax riesca a richiamare il controller dedicato

actionDelete() e la cosa bella è che la pagina non viene ricaricata, ma viene eseguito il refresh della sola griglia

Infine c’è il controller actionIndex() che gestisce l’elenco dei record (zii.widgets.CListView).

e per alcuni aspetti è simile alla griglia, tant’è che sono riuscito a trasportare la logica di ricerca.

Ora la domanda è questa:

Secondo voi è possibile implementare anche qui la stessa logica ajax per eliminare i record ?

Mi piacerebbe riuscire ad implementare in _view.php un bel tasto per eliminare il record in questione.

Certo che si puo’.

Come gia’ discusso in un altro post:




$('.search-form form').submit(function(){

        $.fn.yiiGridView.update('call-rcms-grid', {

                data: $(this).serialize()

        });

        return false;

});



Fa il refresh della grid, analogamente




$('#buttonID').click(function(){

        $.fn.yiiListView.update('call-rcms-grid');

        return false;

});



Anche se non e’ efficientissimo, fai una richiesta ajax per la cancellazione, e all’onsuccess chiama $.fn.yiiListView.update(‘call-rcms-grid’);, vedrai che ti aggiorna la listView.

Si, forse ero stato io stesso ad aprire quel topic.

E grazie l’aiuto di mombda ero riuscito ad implementare il search anche sul [color="#1C2837"][size=“2”]CListView[/size][/color]

[color="#1C2837"][size="2"]Però non riesco ancora a sbrogliarmela.[/size][/color]

[color="#1C2837"][size="2"]E spiego meglio il mio ostacolo:[/size][/color]

[color="#1C2837"][size="2"]CGridView è in grado di mostrare anche il tasto per eliminare i record, mentre con [/size][/color][color="#1C2837"][size="2"]CListView non so come si faccia.[/size][/color]

[color="#1C2837"][size="2"]Ho anche trovato un esempio abbastanza completo in proposito:[/size][/color]

[color="#0000EE"]http://www.packtpub…-zii-components[/color]

[color="#0000EE"][u]

[/u][/color]

[color="#1C2837"][size="2"]Come faccio per far comparire nella _view.php il tasto elimina?[/size][/color]

[color="#1C2837"][size="2"]Al momento ho provato a copiare il link di cancellazione record della Grid e metterlo nella _view.php,[/size][/color]

[color="#1C2837"][size="2"]


<a class="delete" title="Cancella" href="/.../controller/delete/<?php echo $data->id; ?>">

	<img src="/prova/demo/assets/296b5f48/gridview/delete.png" alt="Cancella"></a>

	<br />



[/size][/color]

in modo tale che i link escano in questo formato:

http :// bla bla/controller/delete/173

[color="#1C2837"][size=“2”]ma quando clicco, mi restituisce l’errore 400[/size][/color]

[size="2"][color="#1c2837"]Invalid request. Please do not repeat this request again.[/color][/size]

Ho notato due cose nel tuo codice:

  • /.../controller/delete/<?php echo $data->id; ?>

  • /prova/demo/assets/296b5f48/gridview/delete.png

Nel primo caso ti segnalo che hai messo 3 punti.

Nel secondo caso, fai attenzione: stai usando la cartella assets. le cartelle assets possono cambiare.

Non fare mai i link come a href ma usa sempre la funzione CHtml::link.

Se sfogli nella documentazione troverai che puoi fare un link che fa una post request/

Tu stai facendo una delete con una get request, e nel codice di actionDelete c’e’ scritto di restituire errore se non e’ un post.

Impara a usare bene i componenti base del framework (e soprattutto generare gli url con le funzioni preposte).