(risolto) gridview ritornare sull'ultima pagina visualizzata

Ciao a tutti sono nuovo (lo ripeto sempre) ho creato con gii (crud) la gestione di una tabella (db)

1 passo ) ho la visualizzazione nella griglia dei record interessati circa 200.

2 passo ) scorro la griglia o effettuo il search per trovare il record

3 passo ) clicco sulla griglia per la modifica del record

4 passo ) aggiorno il record

5 passo ) mi visualizza il record modificato

6 passo ) clicco sul breadcrumbs per ritornare nella visualizzazione della griglia

a questo punto chiedo posso evitare di eseguire il passo numero 5 e posso ritornare nella griglia

ma nella pagina dove ho effettuato l’aggiornamento del record ?

ciao e grazie

Modifica actionUpdate, in particolare il redirect, invece di portare alla action View, manda l’utente alla vista admin

si cosi ho fatto soltanto che la gridview mi riparte dalla 1 pagina

ah, beh, questa è una storia diversa.

questo è il normale funzionamento del widget CGridView.

Credo, e dico credo, che ci sia la possibilità di usare alcune delle proprietà della gridview per eseguire del javascript al termine dell’aggiornamento (cioè, dopo ogni ricerca, o cambio pagina). A quel punto potresti salvare lo ‘stato’ della grid view in seesion, e quando ritorni sulla pagina, se c’è quello stato salvato, interagire di nuovo con la gridview per chiedergli di ripristinare lo stato.

Sto facendo delle ipotesi, perchè non ho mai provato di persona questa cosa.

Mi interessa molto, a dire il vero credo interesserà anche ad altri. Se riesci, faccelo sapere.

ci proverò ho tempo grazie comunque ti farò sapere

In passato ho fatto qualcosa del genere usando questa estenzione:

http://www.yiiframework.com/extension/selgridview/

vedi se fa al caso tuo…

Grazie per averci linkato l’estensione, sembra fenomenale

Si può usare anche in congiunzione con ERememberFiltersBehavior

io sto lavorando in Yii2

Puoi saltare direttamente alla pagina che vuoi passando il parametro "page" nella querystring.

"model/admin?page=2"

in poche parole ho uno stesso controllers che mi visualizza la griglia mi effettua l’aggiornamento inserimento ecc. come faccio a passare una variabile (numero di pagina) tra le varie actions ?

La via più veloce che mi viene in mente è modificare la actionColumn update della Grid




GridView::widget([

  ...

        [

            'class' => 'app\widgets\grid\ActionColumn',

            'template' => '{update}',

            'urlCreator' => function ($action, $model, $key, $index) {

              return Url::toRoute(['model/update', 'id' => $key, 'param1' => 'foo', 'param2' => 'bar']);

            }

        ]

  ...

]);



Qui un po’ di info su toRoute

Nicola Perfetto !!!!!

GridView::widget([

[‘class’ => ‘yii\grid\ActionColumn’,

         'template' => '{view} {update} {delete}',	


         'urlCreator' => function ($action, $model, $key, $index) {


         return Url::toRoute(['fasigioco/update', 'id' => $key,'page' => $_GET ['page'] ]);


        },

nella ActionUpdate del controller

$page = $_GET[‘page’];

if ($page == 0) {

$page = 1;

}

return $this->redirect([‘index’, ‘page’ => $page]);

Visto che la gridview non prevede la visualizzazione di una determinata pagina

ritengo che questa sia una soluzione non so se si tratta della soluzione migliore

comunque funziona !!!

grazie a tutti

alla prossima

modificato in

[‘class’ => ‘yii\grid\ActionColumn’,

         'template' => '{view} {update} {delete}',	


         'urlCreator' => function ($action, $model, $key, $index) {


            if (isset($_GET['page'])) {


				$page = $_GET['page'];	


			} else {


				$page = 1;


			}


        	


        	if ($action == 'update' ) {


         		return Url::toRoute(['fasigioco/update', 'id' => $key,'page' => $page]);


         	}


         	if ($action == 'view' ) {


         		return Url::toRoute(['fasigioco/view', 'id' => $key,'page' => $page]);


         	}


         	if ($action == 'delete' ) {


         		return Url::toRoute(['fasigioco/delete', 'id' => $key,'page' => $page]);


         	} 

per essere precisi

ciao