Strumenti Utente

Strumenti Sito


sviluppo:multiselectmultipage

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Entrambe le parti precedenti la revisioneRevisione precedente
Prossima revisione
Revisione precedente
sviluppo:multiselectmultipage [2013/02/20 16:49] a.muccisviluppo:multiselectmultipage [2024/10/15 09:45] (versione attuale) – modifica esterna 127.0.0.1
Linea 6: Linea 6:
 === MultiSelezionePost === === MultiSelezionePost ===
 Con questa funzione potremo:  Con questa funzione potremo: 
-  * tenere memorizzate tutte le righe precedentemente selezionate.+  * memorizzare tutte le righe precedentemente selezionate.
   * visualizzare in ogni pagina le righe già selezionate   * visualizzare in ogni pagina le righe già selezionate
   * deselezionare le righe   * deselezionare le righe
 \\ \\
-Per poter utilizzare questa funzione avremo bisogno prima di tutto di una **variabile in Session** che conterrà tutte le righe precedentemente selezionate e il nome della griglia:+Per poter utilizzare questa funzione avremo bisogno prima di tutto di una **variabile in Session** che conterrà tutte le righe precedentemente selezionatee il nome della griglia:\\ 
 +\\
 Le dichiariamo: Le dichiariamo:
 <code> <code>
Linea 57: Linea 58:
 \\ \\
 Notiamo:\\ Notiamo:\\
 +  * L'assegnazione dell'**sql**;
   * L'assegnazione di **$this->SelezioneTab**   * L'assegnazione di **$this->SelezioneTab**
-  * Il richiamo della funzione **MultiSelezionePost** con l'utilizzo di 3 campi:+  * Il richiamo della funzione **MultiSelezionePost** con l'utilizzo di 3 variabili:
     * $this->SelezioneTab: Utiliziamo la variabile in session in quanto contiene i campi già selezionati (ovviamente se si tratta del primo richiamo sarà vuota)     * $this->SelezioneTab: Utiliziamo la variabile in session in quanto contiene i campi già selezionati (ovviamente se si tratta del primo richiamo sarà vuota)
     * $this->gridLicenze: rappresenta il nome della griglia, in questo caso: **gfmConLicenze_gridLicenze**     * $this->gridLicenze: rappresenta il nome della griglia, in questo caso: **gfmConLicenze_gridLicenze**
-    * $sql: la stessa sql che utilizziamo per creare la griglia, in modo che la funzione che stiamo chiamando si scorra gli stessi campi e possa controllare i ROWID selezionati.+    * $sql: la stessa sql che utilizziamo per creare la griglia, in modo che la funzione che stiamo chiamando si scorra gli stessi campi e possa controllare i ROWID selezionati.\\ In questo caso noi utilizziamo un SELECT * FROM DITTELIC 
 +    * La funzione è stata inserita direttamente nella Lib.
  
 **La funzione:**\\ **La funzione:**\\
Linea 67: Linea 70:
 <code> <code>
 public function MultiSelezionePost($SelezioneTab,$Griglia,$sql){ public function MultiSelezionePost($SelezioneTab,$Griglia,$sql){
-      // Invia in POST le row selezionate nella pagina precedente+$Riga='jqg_'.$Griglia.'_'; 
 +// PRIMA PARTE
       foreach ($SelezioneTab as $key => $Result_rec) {       foreach ($SelezioneTab as $key => $Result_rec) {
-        if($_POST['jqg_'.$Griglia.'_'.$key] == '0'){ +        if($_POST[$Riga.$key] == '0'){ 
-             $_POST['jqg_'.$Griglia.'_'.$key] = '0';+             $_POST[$Riga.$key] = '0';
              $SelezioneTab[$key ] = '0';              $SelezioneTab[$key ] = '0';
             }else{             }else{
-               if(!Out::valore('jqg_'.$Griglia.'_'.$key,'1')){ +               if(!Out::valore($Riga.$key,'1')){ 
-                  $_POST['jqg_'.$Griglia.'_'.$key]='1';+                  $_POST[$Riga.$key]='1';
                     }                     }
                   }                   }
                 }                 }
-        //Si riscorre tutte le righe e quelle che trova controlla.         +// SECONDA PARTE     
-        $Griglia_tab=ItaDB::DBSQLSelect($this->getDATABASE(),$sql, true);+       $Griglia_tab=ItaDB::DBSQLSelect($this->getGAFIEREDB(),$sql, true);//<- Cambiare il DB
         foreach ($Griglia_tab as  $Griglia_rec) {         foreach ($Griglia_tab as  $Griglia_rec) {
-            if( $_POST['jqg_'.$Griglia.'_'.$Griglia_rec['ROWID']] == '1'){ +            if( $_POST[$Riga.$Griglia_rec['ROWID']] == '1'){ 
-                $NuovoConto[$Griglia_rec['ROWID']]='1'; +                $NuovaSelezione[$Griglia_rec['ROWID']]='1'; 
-                Out::valore('jqg_'.$Griglia.'_'.$Griglia_rec['ROWID'],'1');+                Out::valore($Riga.$Griglia_rec['ROWID'],'1');
              }else {              }else {
                 if($SelezioneTab[$Griglia_rec['ROWID']] == '1'){                 if($SelezioneTab[$Griglia_rec['ROWID']] == '1'){
-                          $NuovoConto[$Griglia_rec['ROWID']]='0';+                          $NuovaSelezione[$Griglia_rec['ROWID']]='0';
                         }                         }
                     }                     }
                  }                  }
-       $SelezioneTab = $NuovoConto; + 
-       return $SelezioneTab;+       return $NuovaSelezione;
     }     }
 </code>  </code> 
-Possiamo notare+**La prima parte** della funzione invia in **POST** anche le **row** selezionate nella pagina precedente (ovviamente se è la prima pagina non verrà eseguita) 
-**$SelezioneTab,$Griglia,$sql**\\ + 
- **$SelezioneTab:** Rappresenta l'array che contiene tutte le righe selezionate. +Notiamo
- +   le 3 variabili precedentemente descritte: **$SelezioneTab,$Griglia,$sql**\\ 
 +    **$SelezioneTab:** $this->SelezioneTab 
 +    * **$Griglia:** gfmConLicenze_gridLicenze 
 +    * **$sql:** SELECT * FROM DITTELIC 
 +  * **jqg_'.$Griglia.'_'.N:** ( //jqg_gfmConLicenze_gridLicenze_N// ) rappresenta nel post le righe presenti nella pagina della tabella. Esso può assumere un valore tra 1 e 0 (Check o non Check).\\ N rappresenta il numero della riga (Rowid)  
 +\\ 
 +**Nella seconda parte** della funzione: 
 +  * viene creato l'Array **$Griglia_tab**, che conterrà tutte le righe di **DITTELIC**. Dopo di che con un ciclo lo scorriamo e verifichiamo se tra i post della pagina sono presenti una o più righe che hanno valore 1 (Checked):\\  
 +    * Se ci sono vengono aggiunte all'array provvisorio **$NuovaSelezione** e vengono valorizzate (Checked nella griglia) 
 +    * Se non ci sono, controlla se tra le righe nella pagina sono presenti righe precedentemente selezionate (Quindi presenti in **$SelezioneTab**) e le assegna a 0. In questo modo non risulteranno più selezionate. 
 +  * In fine avremo il return di **$NuovaSelezione** che rappresenta l'array aggirnato con tutte le righe selezionate in precedenza
 + 
 +Nel nostro programma avremo quindi la variabile in session $this->SelezioneTab costantemente aggiornato ad ogni evento legato alla tabella. 
 +\\ 
 +\\ 
 +**Nota**\\ 
 +\\ 
 +Con questa funzione è possibile selezionare oltre 2000 righe, ma nel caso in cui ce ne siano di più è opportuno inserire un bottone che permetta di stamparle direttamente tutte e inserire dei filtri nella ricerca( in modo da //smaltire// le righe in più).\\ 
 +\\ 
 +Per l'output delle righe selezionate, possiamo utilizzare un semplice ciclo:\\ 
 +<code> 
 + foreach ($SelezioneTab as $key => $Result_rec) { 
 +                  $SelezioneGrid[]=$key; 
 +                 
 +                
 +        $sql=" SELECT * 
 +               FROM DITTELIC  
 +               WHERE 1"; 
 +        $sql.=" AND("; 
 +        for ($index = 0; $index < count($SelezioneGrid); $index++) { 
 +             $sql.=" ROWID = $SelezioneGrid[$index] OR"; 
 +         } 
 +        $sql=substr($sql,0,-3); 
 +        $sql.=" )"; 
 +</code> 
 +**$SelezioneTab** è l'Array che contiene le righe selezionate.\\ 
 +\\ 
 +Ovviamente, se vogliamo passare una **$SelezioneTab** aggiornata, prima del ciclo, dovremo richiamare nuovamente la funzione **MultiSelectPost**, in modo che se nell'ultima pagina visualizzata sono state selezionate una o più righe, vengano aggiunte anch'esse all'array:\\ 
 +<code> 
 +... 
 +$sql = $this->CreaSql(); 
 +$this->SelezioneTab=$this->gfmLib->MultiSelezionePost($this->SelezioneTab,$this->gridLicenze,$sql); 
 +... 
 +</code> 
 +\\ 
 +Con il ciclo, rielaboriamo l'array in modo da ottenere le varie $key,che sono l'indice(ROWID), in sequenza.\\ 
 +Dopo di che, in questo esempio, all'sql aggiungiamo la condizione //ROWID = N OR// per ogni elemento dell'array, in modo da selezionare tutti gli indici(ROWID) che corrispondono a quelli selezionati.\\ 
 +Avremo un risultato del genere:\\ 
 +\\ 
 +SELECT * FROM DITTELIC WHERE 1 AND( ROWID = 2 OR ROWID = 3 OR ROWID = 35 ) 
 +\\ 
 +{{counter}} visualizzazioni. 
sviluppo/multiselectmultipage.1361378975.txt.gz · Ultima modifica: 2018/03/19 10:45 (modifica esterna)