Supporto volontario e collaborativo per Joomla!® in italiano

Esportare le tabelle di joomla 1.6 in un foglio di calcolo con Chronoforms.

logo

Per i siti su piattaforma Joomla 1.6 per ottenere il risultato sintetizzato nel titolo useremo il componente Chronoforms v 4 RC1.8. Si tratta di un nuovo componente ancora in fase di sviluppo, ma che presenta delle caratteristiche molto potenti ed interessanti. Questa nuova versione è disponibile in due varianti una per Joomla 1.5 e l'altra, che useremo in questa guida, per Joomla 1.6. Le modalità di uso sono però le stesse. L'unica differenza è che in Joomla 1.5 dovremo avere attivato il plugin Mootools Update. Qui l'articolo per Joomla 1.5.
Questo primo uso sarà anche l'occasione di prendere confidenza con questo nuovo componente, che come già detto ha delle caratteristiche molto innovative rispetto al precedente. Il primo impatto può sembrare un po' ostico, ma dopo un primo giro vedrete che ci potremo muovere facilmente fra le nuove modalità di uso e funzionalità.


Se non è già disponibile installiamo in Joomla 1.6 il componente Chronoform v 4 RC1.8 con le consuete modalità. Fatto questo avremo disponibile nell'elenco dei componenti il nostro nuovo fiammante. Andiamo con il mouse sulla voce Componenti, che si aprirà a tendina, poi sulla voce Chrono Forms, che aprirà a sua volta un'altra tendina laterale, qui cliccheremo sull'etichetta Form Manager. Qui potremo scegliere fra le tre opzioni disponibili, figura 1. Form Manager, Form Wizard e Easy Form Wizard. La quarta etichetta Validate Installation, che non prenderemo in considerazione in questa guida, è invece la solita opzione per registrare il componente e togliere dalle finestre dei form in frontend il link al sito Chronoengine .

formmanager_16

L'opzione Form Wizard ci porta in una nuova finestra apparentemente molto complessa che ci consente di usare tutte le nuove potenzialità del componente per creare il form ed inserire tutte le azioni o controlli di eventi che ci possono servire. La usermo anche noi.

L'opzione Easy Form Wizard è invece una modalità ridotta che permette di realizzare form semplici senza particolari difficoltà operative. Conserva alcune analogie con la vecchia versione di Chronoforms.

Nel nostro caso iniziremo da Form Manager creando un nuovo form vuoto che riempiremo con gli attrezzi necessari. Per questo clicchiamo sul bottone color arancione in.alto al centro, che porta l'etichetta Nuovo. Si apre una finesta, figura 2, che mostra un elenco di campi contenenti una serie di scelte predefinite.

formmanager_general16

In questo finestra ci limiteremo ad assegnare il nome del form in Form name, inserendo export_cvs1 o un altro nome, e selezionando la voce Yes nel campo Published, che assicura la pubblicazione del form. Negli altri campi lasciamo le scelte predefinite.

Cliccando sulla etichetta Code accediamo ad una nuova finestra, figura 3, dove possiamo inserire il codice principale che visualizzerà i campi del form. La finestra che si apre sarà simile alla seguente.

formmanager_code16

In questa finestra nel campo Form type selezioniamo la voce Custom, che sta a significare che in questo momento usiamo codice personalizzato non creato atomaticamente da Chronoforms con l'opzione Wizard. Nel campo HTML code inseriamo con copia ed incolla il seguente codice.

 

<?php
$app = &JFactory::getApplication();
if ( !$app->isSite() ) { return; }
$mainframe=$app;
 
// controllo amministratore loggato
$user =& JFactory::getUser();
if ($user->name<>"Super User") { ?>
 
<div class="ccms_form_element">
 
    <h1>Area riservata non è consentito l'accesso ai non autorizzati.</h1>
 
  <div class="clear"></div>
</div>
 
<?php
} else {
?>
 
<div class="ccms_form_element cfdiv_select" id="tabella_container_div">
<label>Tabella</label><select size="1" class=" validate['required']" title="" 
type="select" name="tabella">
<option value="" selected>Scegli una tabella</option>
<?php
 //questo codice permette di popolare la dropdown con le tabelle di chronforms
 
    $db =& JFactory::getDBO();         
    $query = "SHOW TABLES LIKE '%chronoforms%'";
    //$query = "SHOW TABLES ";
    $db->setQuery($query);
    $nomes = $db->loadResultArray();
//print_r($nomes);
    $nome_options = "";
      $i=0;
      foreach ( $nomes as $v ) {
      $nome_options .= "<option value='".$nomes[$i]."' >".$nomes[$i]."</option>";
      $i++;
      }
 
     echo $nome_options;
?>
</select>
<div title="Tabella" rel="Seleziona una tabella da esportare" class="tooltipimg">
<a href="#">?</a></div><div class="small-message">Seleziona una tabella</div>
<div class="clear"></div><div id="error-message-tabella"></div></div>
<div class="ccms_form_element cfdiv_select" id="separatore_container_div">
<label>Separatore</label><select size="1" class="" title="" type="select" name="separatore">
    <option value="">Scegli un separatore</option>
    <option value=",">Virgola</option>
    <option value=";">Punto e virgola</option>
    <option value="|">Barra verticale</option>
    <option value="tab">Tabulazione</option>
 
 
 
</select>
<div title="Separatore" rel="Scegli un separatore dei campi della tabella" class="tooltipimg">
<a href="#">?</a>
</div><div class="small-message">Scegli un separatore dei campi della tabella</div>
<div class="clear"></div><div id="error-message-separatore"></div></div>
<div class="ccms_form_element cfdiv_submit" id="input_submit_2_container_div">
<input name="input_submit_2" class="" value="Submit" type="submit" />
<div class="clear"></div><div id="error-message-input_submit_2"></div></div>
 
<?php } ?>
 
 

 

Il codice è molto simile a quello utilizzato nella versione per Joomla 1.5, con alcuni piccoli aggiustamenti per compatibilità con il core di Joomla 1.6, e svolge le stesse funzioni. Crea le due dropdown per la scelta della tabella da esportare, del separatore dei campi e il tasto di invio.
Anche qui modificando il codice della query che popola la prima dropdown potremo estendere l'operativa a tutte le tabelle del database o solo a quelle create per i form di Chronoforms. Per quest'ultima modalità occorre mantenere la like della query.

Fatto questo possiamo subito fare un primo salvataggio del nostro form cliccando sul bottone in alto a destra con etichetta Salva e Chiudi. Torneremo alla finestra base di Form Manager, figura 5, con la novità che potremo vedere nell'elenco dei form il nostro con il nome che gli abbiamo assegnato. Qui clicchiamo sul link Wizard Edit alla destra nel nostro form.

formmanager_form16

Si apre un nuova finestra, figura 6, che corrisponde a quella del Form Wizard che avevano esaminato all'inizio.

actions_events16

Qui è opportuno soffermarci sugli strumenti che abbiamo a disposizione. Possiamo osservare due aree nella finestra che si è aperta. Nel lato sinistro sotto l'etichetta Drag c'è un riquadro con due finestre sovrapposte, attivate dalle etichette Elements e Actions. Sul lato destro sotto l'etichetta Drop ci sono quattro finestre sovrapposte: Preview, Events, Form Setting e Legend.
Il significato di queste due aree in sintesi può essere questo. Sul lato sinistro Drag ci sono gli strumenti utili per creare il form con gli elementi constitutivi (campi di vario tipo) contenuti nella finestra Elements, e la finestra Actions che contiene invece le utilità che compiono determinate  azioni che possiamo incorporare nel form.
Sul lato destro Drop, le finestre Preview ed Events sono destinatarie la prima degli elementi della finestra Elements e la seconda Events delle azioni contenute nella finestra Actions.
La finestra Form setting è di solo settaggio e non ha particolari problemi perchè ripete il nome del form e il flag di pubblicazione.
La finestra Legend spiega invece il significato delle icone visibili nelle aree.

Per le necessità del nostro obiettivo non useremo la finestra Elements. Infatti abbiamo creato gli elementi del form direttamente caricando il codice personalizzato illustrato sopra. Clicchiamo quindi sull'etichetta Actions ed entriamo nell'area operativa che si apre, visualizzata in modo parziale nella figura 6.
Qui notiamo che contemporaneamente, alla finestra a sinistra Actions, a destra si apre la finestra Events. In essa si notano due aree colorate in verde. On Load ed On Submit. Il significato è che tutto quello che sarà inserito nell'area On Load sarà eseguito al caricamento del form, mentre ciò che sarà inserito nell'area On Submit sarà eseguito dopo l'invio del form.
Queste particolarità danno già l'idea della grande potenza di elaborazione che abbiamo a disposizione con questo nuovo componente. Possiamo infatti inserire le varie azioni ed in particolare le Custom Code (codice personalizzato) in qualsiasi area e nell'ordine temporale di esecuzione più opportuno le finalità dell'applicazione che stiamo creando. Ho detto volutamente applicazione e non form perchè qui siamo ormai in un altro pianeta rispetto al semplice form che invia dati al sito.

Detto questo che mi sembra utile per comprendere il contesto in cui operiamo, torniamo al completamento del nostro form. Nella finestra a sinistra clicchiamo sull'etichetta Show html e tenendo premuto il tasto sinistro del mouse trasciniamo l'azione nell'area verde On Load. Questo abilita il form a caricare il codice che mostra i campi inseriti (le due dropdown e il tasto invio).
Ora invece clicchiamo a sinistra sull'azione Custom Code e con la stessa modalità la trasciniamo a destra dell'area On Submit. Questo predispone le condizioni per far eseguire al nostro form un codice personalizzato dopo l'invio. L'area On submit si mostrerà ora in questo modo, figura 7.

custom_code16

Sono visibili tre icone sulla destra della voce Custom Code. La X rossa serve per rimuovere l'azione inserita, la chiave inglese apre la configurazione dell'azione, le due frecce verdi servono per muovere l'azione prima o dopo altre azioni eventualmente presenti dell'area On Submit.
Nel nostro caso clicchiamo sull'icona di configurazione indicata dalla freccia ed si apre una nuova finestra popup, figura 8.

on_submit16

Qui selezioniamo nel campo Mode l'opzione Controller e nel campo Code inseriamo con copia e incolla il seguente codice che ha la funzione di esportare i dati della tebella selezionata come indicato nell'esempio per Joomla 1.5.

 

 
<?php
// continue PHP here
$app = &JFactory::getApplication();
if ( !$app->isSite() ) { return; }
$mainframe=$app;
 
 
       $database =& JFactory::getDBO();
 
       $separatore= JRequest::getVar('separatore','','post');
if( $separatore=="tab") {$separatore="\t";}
       $tablename = JRequest::getVar('tabella','','post');
       $tables = array( $tablename );
       $result = $database->getTableFields( $tables );
       $table_fields = array_keys($result[$tablename]);
       //unset($table_fields[0],$table_fields[2],$table_fields[17]);
 
       $database->setQuery( "SELECT * FROM ".$tablename."" );
       $datarows = $database->loadObjectList();
       $titcol = 0;
       foreach($table_fields as $table_field){
          if($titcol){$csvline .=$separatore;}
          $csvline .= $table_field;
          $titcol++;
       }
       $csvline .="\n";      
       $datacol = 0;
       $rowcount = 1;
       foreach($datarows as $datarow){
          foreach($table_fields as $table_field){
             if($datacol){$csvline .=$separatore;}
             $csvline .= '"'.addslashes($datarow->$table_field).'"';
             $datacol++;
          }
          $csvline .="\n";
          $datacol = 0;
          $rowcount++;
       }       
       if (ereg('Opera(/| )([0-9].[0-9]{1,2})', $_SERVER['HTTP_USER_AGENT'])) {
          $UserBrowser = "Opera";
       }
       elseif (ereg('MSIE ([0-9].[0-9]{1,2})', $_SERVER['HTTP_USER_AGENT'])) {
          $UserBrowser = "IE";
       } else {
          $UserBrowser = '';
       }
       $mime_type = ($UserBrowser == 'IE' || $UserBrowser == 'Opera') ? 
'application/octetstream' : 'application/octet-stream';
       @ob_end_clean();
       ob_start();
 
       header('Content-Type: ' . $mime_type);
       header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT');
 
       if ($UserBrowser == 'IE') {
          header('Content-Disposition: inline; filename="' . "ChronoForms - "
.$tablename." - ".date("j_n_Y").'.csv"');
          header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
          header('Pragma: public');
       }
       else {
          header('Content-Disposition: attachment; filename="' . "ChronoForms - "
.$tablename." - ".date("j_n_Y").'.csv"');
          header('Pragma: no-cache');
       }
       print $csvline;
       exit();
    ?>
 
 

 

In Action Label potremmo opzionalmente dare un nome all'azione appena configurata. Appena completati gli inserimenti per confermare il tutto dobbiamo cliccare il tasto azzurro Apply in alto a destra del popup. Fatto questo possiamo chiudere il popup cliccando sulla X in altro a destra.
Usciti dal popup dobbiamo salvare il form premendo il tasto Salva e Chiudi in alto a destra.

Per vedere il risultato del lavoro l'amministratore dovrà essere loggato nel frontend di Joomla, quindi potrà accedere al form da una voce di menù creata con le consuete modalità che punti al form appena salvato oppure dal backend di joomla da Form Manager cliccando sul link Frontend View alla destra del nome del form. Figura 5.

Sia che accediamo con la voce di menù o dal backend di Joomla si aprirà il nostro form e vedremo un risultato simile a questo.

form_16

Scegliamo il form da esportare e selezioniamo il separatore di campo e clicchiamo su Invia. Si apre una nuova finestra di servizio simile alla seguente.

finestra_export_16

Clicchiamo su Ok e dopo qualche secondo si aprirà il programma gestore dei fogli di calcolo (Nel mio caso LibreOffice) con un'altra finestra di servizio in cui ci presenterà alcune opzioni, simile alla seguente.

finestra_export_2_16

Scegliamo per Tipo carattere Unicode (UTF 8) e come separatore spunteremo la casella Altri e nel campo a destra inseriremo come separatore quello scelto nel form, cioè la barra vericale. Confermiamo le scelte premendo su OK. A questo punto si apre la pagina del foglio di calcolo che mostra il risultato che volevamo ottenere, ovvero i dati della tabella disponibili nella finestra del foglio di calcolo pronti per tutte le elaborazioni che vorremo fare.

finestra_export_3_16

Qui l'articolo per Joomla 1.5




vales - Valerio Sichi
15.05.2011

http://valesweb.altervista.org

CommentaCommenta questo articolo sul forum