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.

giovedì 14 ottobre 2010

Modificare la posizione dei widget nei form

Lavorando con i form in symfony può capitare di voler modificare la posizione predefinita dei campi del form (generati nell'ordine in cui compaiono nelle tabelle).


E' possibile riordinare i widget con un comando molto semplice. Se ad esempio abbiamo una tabella Utenti con Nome, Cognome,Telefono, Indirizzo e vogliamo spostare il numero di telefono dopo l'indirizzo e il cognome prima del nome basta usare questo codice

//UtenteForm.class.php
public function configure() 
{ 
$this->getWidgetSchema()->moveField('nome', sfWidgetFormSchema::AFTER, 'cognome');
$this->getWidgetSchema()->moveField('telefono', sfWidgetFormSchema::AFTER, 'indirizzo');
}

venerdì 24 settembre 2010

Come inserire codice php, html, javascript ... formattato in un post di Blogger

Già dal primo post mi sono scontrato con la necessità di aggiungere dei frammenti di codice. Il normale utilizzo del tag <pre> rende la lettura di grossi blocchi di codice al più difficoltosa.
Per fortuna esiste SyntaxHighlighter, uno script veramente utile e di semplicissima implementazione che permette di visualizzare il codice con la sintassi evidenziata, i numeri di riga e tutto quello che permette una maggiore leggibilità dello stesso.
Lo script può essere usato in qualsiasi ambiente (non esclusivamente blogger) ed esistono già plugin per alcune delle piattaforma blog più diffuse.
Per inserirlo in blogger è sufficiente aggiungere al modello ( Design / Modifica HTML ) subito prima del tag </body>

<!-- Inizio SyntaxHighlighter -->
<link href='http://IL TUO DOMINIO/styles/SyntaxHighlighter.css' rel='stylesheet' type='text/css'/>  
<link href='http://IL TUO DOMINIO/styles/shCoreDefault.css' rel='stylesheet' type='text/css'/>  
<script src='http://IL TUO DOMINIO/scripts/shCore.js' type='text/javascript'/>  
<!-- Elenco brushes, in questo caso per CSS, JavaScript, SQL, XML e PHP --> 
<script src='http://IL TUO DOMINIO/scripts/shBrushPhp.js' type='text/javascript'/>
<script src='http://IL TUO DOMINIO/scripts/shBrushCss.js' type='text/javascript'/>  
<script src='http://IL TUO DOMINIO/scripts/shBrushJScript.js' type='text/javascript'/>  
<script src='http://IL TUO DOMINIO/scripts/shBrushSql.js' type='text/javascript'/>  
<script src='http://IL TUO DOMINIO/scripts/shBrushXml.js' type='text/javascript'/>  
  
<script class='javascript'>  
SyntaxHighlighter.config.bloggerMode = true;
SyntaxHighlighter.all();
</script>
<!--FINE SyntaxHighlighter -->  

Gli script/CSS fanno riferimento alle cartelle che contengono i file e che devono essere esterni a Blogger (che non fornisce uno spazio web dove uplaodare files oltre a Picasa). E' possibile scaricare i files dalla pagina di download di SyntaxHighlighter o usare quelli gentilmente offerti in hosting gratuito dal creatore dello script (in questo caso sostituire a IL TUO DOMINIO il percorso alexgorbatchev.com/pub/sh/current )

A questo punto non resta che inserire nei nostri post il codice da formattare usando il marcatore <pre> con una sintassi simile (in questo caso per un blocco php).

<pre class="brush:php">
<?php
echo('Ciao mondo');
?>
</pre>

Sarà lo script, una volta caricato, ad occuparsi della conversione! facile, rapido ed indolore.
L'unico accorgimento richiesto è l'utilizzo di &lt; e &gt; al posto di < e > all'interno del codice (basta fare il "copia/incolla" del codice nell'editor WYSIWYG di blogger).

Per maggiori opzioni/funzionlità fare riferimento alla pagina di configurazione di SyntaxHighlighter

giovedì 23 settembre 2010

Usare TinyMCE con Symfony

Dato che normalmente nei miei progetti utilizzo TinyMCE come editor WYSIWYG ho deciso di usarlo anche in una applicazione che sto sviluppando per symfony. Cercando su google ho trovato un widget interessante: sfWidgetFormTextareaTinyMCE, facente parte del plugin sfFormExtraPlugin che promette con pochi passaggi, ad esempio quelli evidenziati in questo post in inglese,di utilizzare con semplicità tinyMCE.

Ho provato il plugin e l'ho disinstallato, l'idea di creare un widgetd customizzato per la gestione delle aree di testo mi è sembrato inutile. TinyMCE ha infatti un'utilizzo molto semplice, basato su un javascript esterno e uno script di configurazione. Dato che in symfony è semplice abilitare/disabiltiare gli script trovo inutile farlo con un widget.

Per usare TinyMCE è infatti sufficiente:
  1. scaricare TinyMCE dall'area download del sito 
  2. Scompattarlo nella cartella web/js del progetto (senza esempio, basta la sottocartella tiny_mce)
  3. Inserire nel template/layout (a seconda di dove dovrà essere utilizzato) il codice seguente

<?php use_javascript('tiny_mce/tiny_mce.js') ?>  
<?php use_javascript('tiny_mce_myconfig.js') ?>    

dove tiny_mce_myconfig.js è un file contenente la configurazone di tinyMCE (vedi documentazione) ad esempio:

tinyMCE.init({  
      mode : "textareas",  
      theme : "simple"  
 });  

per un'interfaccia minima


Volendo è possibile definire gli script direttamente nel file view.yml dell'applicazione (es. frontend) con la sintassi

javascripts:  [tiny_mce/tiny_mce.js, tiny_mce_myconfig.js]

Molto più semplice che installare un plugin e definire un widget no ?

martedì 21 settembre 2010

Ok, il primo passo è fatto

E' un po' di tempo che mi diletto con l'idea di aprire un blog dove inserire piccoli trucchi (ed a volte ovvietà) che, da utente inesperto del framework Symfony, avrei voluto scoprire più facilmente.

Symfony è veramente un prodotto eccellente, ma si rivolge ad una fascia di pubblico un po' troppo elitaria. La documentazione ad esempio è ben fatta ed estensiva ma difetta di esempi, e spesso un esempio vale più di 1000 parole.

Via via che imparo nuove cose su questo software penso "questa me la devo segnare da qualche parte"... ed ora sono pieno di foglietti e files txt sul desktop, senza contare i preferiti troppo lunghi e caotici.

"Perchè non usare un blog ?" mi sono detto. Almeno queste note e link possono servire anche ad altri... ed eccomi qua a scrivere.

Pausa finita... torno a programmare :)