Pagine

giovedì 25 novembre 2010

Tabella con righe di colore alternato in Symfony

Creare dinamicamente una tabella con righe di colore alternato è estremamente semplice, solo che richiede il copia/incolla dello stesso codice ogni volta che si vuole usare. Sfruttando gli helper di symfony è possibile definirne uno perché si occupi da solo del problema.

class HtmlList
{
  public static function Alternate($one, $two)
  {
    self::$alternateRow = !self::$alternateRow;
    return self::$alternateRow ? $one : $two;
  }
  
  public static function PariDispari(){
   return self::Alternate('pari','dispari');
  }
 
  private static $alternateRow = true;
}

Per richiamarlo (dopo aver definito l'helper nella pagina) basta usare la sintassi

...
<table><tbody>
<?php foreach ($righe as $riga): ?>
<tr class="<?php echo HtmlList::PariDispari(); ?>">
<td>....</td> <td>....</td> </tr>
<?php endforeach; ?>
</tbody> </table>
....

e naturalmente definire le classi pari e dispari in un css, con sfondi di colore diverso.

Per impostare la classe in un caso particolare useremo invece

...
<table><tbody>
<?php foreach ($righe as $riga): ?>
<tr class="<?php echo HtmlList::Alternate('bianco','nero'); ?>">
<td>....</td> <td>....</td> </tr>
<?php endforeach; ?>
</tbody> </table>

giovedì 18 novembre 2010

Passare parametri, variabili, valori ad un form symfony

A volte è necessario passare dei parametri ad un form per aggiungere dinamicità non legata al modello. Ho fatto una certa fatica a trovarlo nella documentazione, spero quindi di semplificare il lavoro di altri.

Quando creiamo l'istanza del form usiamo

$parametro='pippo';
$form = new mioform(array(),array('parametro'=>$parametro));

Nella configurazione del form è possibile recuperarlo come opzione

public function configure()
{
$parametro=$this->getOption('parametro');
.
.
.
}

venerdì 5 novembre 2010

Il form è stato modificato, sei sicuro di voler uscire ?

Quante volte abbiamo visto questo simpatico messaggio javascript che ci avverte che, lasciando la pagina, perderemo tutto il lavoro fatto. Se non abbiamo un sistema di "salvataggio bozze" come blogger un alert di questo tipo è estremamente utile per i nostri utenti.

Ho trovato un post interessante che spiega come fare.

Naturalmente Murphy vuole che lo script che trovi non vale mai nel caso particolare. Ho subito avuto due problemi:

  • Lo script non funziona con le textarea tinyMCE
  • Lo script chiede la conferma anche nel caso l'utente prema il pulsante "Salva" del form (a meno che il salvataggio non sia gestito via ajax).

Lavorandoci un po' ho trovato la soluzione, questo lo script che ho usato

var formModificato = false;
var submitting     = false;

window.onbeforeunload = function() {
   if (formModificato && !submitting){
      return 'ATTENZIONE!'+'\n'+
             'Sono state apportate delle modifiche ad un modulo ma non sono state salvate!';
   }
}

jQuery(function(){
   formmodificato=false;
   
// Cambio lo stato della variabile se si accede ad un elemento del form

   $('form input, form textarea, form select, form checkbox, form radio').focus(function(){

      formModificato = true;

   }); 
      
   // Cambio lo stato della variabile se l'utente sta inviando il form
   
   $('form').submit(function(){

      submitting = true;

   });   
});

per gestire le textarea tinymce invece basta aggiungere nella definizione dell'editor

setup : function(ed) {
ed.onClick.add(function() {
formModificato=true;
})

per ottenere l'effetto voluto! non è un post relativo a Symonfy ma spero che vi sia ugualmente utile.