sfGuard e sfSimpleBlog… e le chiavi importate.

Se stai cercando, su un’installazione fresca di symfony, di far funzionare i due plugin sfGuardPlugin e sfSimpleBlogPlugin ti potrebbe capitare di incorrere nel seguente errore:

[…] Attempt to set foreign key to nonexistent table, sf_guard_user […]

soprattutto se stai seguendo la documentazione. Ciò è dovuto probabilmente al fatto che nel tuo propel.ini la seconda riga

propel.packageObjectModel

è impostata a false. Mettila a true, e molto probabilmente, facendo il rebuild del modello, incorrerai in:

Execution of target “om-template” failed for the following reason: /usr/share/php5/symfony/lib/vendor/propel-generator/build-propel.xml:470:1: No package found for database “” in generated-schema.xml. The propel.packageObjectModel property requires the package attribute to be set for each database.

A questo punto controlla che il file schema.yml dentro la cartella config/ del tuo progetto sia vuoto: se lo è, cancella il file, e finalmente comincia a lavorare.

Javascript & Ajax? eval()!

Oggi dovevo eseguire del codice Javascript nel risultato di una chiamata ajax. Il template è fatto circa così:

1
2
3
4
5
6
<?php echo __('Aggiungi prodotto') ?><input type="button" value="+" onclick="addprod()" />
<?php echo javascript_tag("
  function addprod() { 
    alert('ciao')
  }
") ?>

Se chiamato “direttamente”, questo template funziona e visualizzerà correttamente l’alert. Ciò non si verificherà invece se il template in questione è il risultato di una chiamata Ajax. Come spiega il buon Sergio Pereira, ciò dipende dal fatto che il codice Javascript nel risultato di una chiamata ajax viene valutato (tramite la funzione eval()) per cui il template deve essere riscritto nel seguente modo:

1
2
3
4
5
6
<?php echo __('Aggiungi prodotto') ?><input type="button" value="+" onclick="addprod()" />
<?php echo javascript_tag("
  addprod = function() { 
    alert('alora')
  }
") ?>

in modo che la funzione venga creata.

Angoli arrotondati? Nifty!

Ti piace lo stile “web 2.0”? Beh, allora non potrai esimerti dall’arrotondare gli angoli dei tuoi elementi preferiti. L’ottimo plugin sfNiftyPlugin è un helper che permette di usare la libreria Javascript di Alessandro Fulciniti, Nifty Corners Cube, la quale appunto si occupa di arrotondare gli angoli dei tuoi elementi senza usare immagini. Una volta installato il plugin basta includere l’helper con il solito [code][/code] Dopodiché la semplice chiamata [code][/code] si occuperà della magia.

Buon arrotondamento!

sfSimpleCMS e sfMediaLibrary

sfMediaLibrary è un ottimo plugin per la gestione degli assets, ovvero immagini, PDF, ec… In pratica basta installarlo e ci si trova un modulo nel backend con la gestione di cartelle e sottocartelle per poter organizzare i propri documenti.

La cosa diventa particolarmente interessante quando si sta giocando con sfSimpleCMS, in quanto il plugin di cui sopra ha un’interessante funzione di interazione con tinyRTE. In pratica, se vuoi dare al tuo cliente un sito (realizzato tramite i due plugin in questione) e fornirgli la possibilità di caricare documenti direttamente al rich text editor, basta aggiungere al file plugins/sfSimpleCMSPlugin/lib/slotType/sfSimpleCMSSlotRichText.class.php la linea:

[code]’tinymce_options’ => ‘file_browser_callback:”sfMediaLibrary.fileBrowserCallBack”‘[/code]

come opzione aggiuntiva dell’array $options.

Calendario nel risultato di una chiamata Ajax

Oggi dovevo utilizzare l’helper input_date_tag all’interno di un template che di fatto era il risultato di una chiamata Ajax.
Dato che normalmente non ho mai avuto problemi con quell’helper mi è risultato strano l’errore Javascript “Calendar is not defined”; dopo un attimo di ricerca ho capito che in tale frangente i Javascript e i css non vengono inclusi automaticamente (come invece avviene di solito), per cui ho dovuto aggiungerli nel file di configurazione del modulo view.yml:

  stylesheets:    [/sf/calendar/skins/aqua/theme.css]
  javascripts:    [/sf/calendar/calendar.js, /sf/calendar/lang/calendar-it.js, /sf/calendar/calendar-setup.js]

et voilà, il calendario funziona di nuovo.