martedì 6 settembre 2011

Marinelli 3, Drupal 7: HTML entities mostrate in titolo e descrizione dei banner

Oggi ho cominciato a creare del nuovo contenuto in un sito in Drupal che ho rinnovato aggiornanto a D7 e installando il bellissimo tema Marinelli (7.x-3.0-beta11)
Dopo aver creati i primi banner, ho notato che alcuni caratteri nei titoli e nelle descrizioni venivano mostrati come HTML entities (ad esempio & #039; per il simbolo di singolo apice).

Mi sono addentrato nel codice e ho sistemato il problema in un modo un po' spartano.
Leggendo della funzione t() del bootstrap.inc di Drupal ho scoperto il significato dei parametri che precedono i nomi delle variabili in quella funzione:
  • !variable: Inserted as is. Use this for text that has already been sanitized.
  • @variable: Escaped to HTML using check_plain(). Use this for anything displayed on a page on the site. 
La generazione del titolo e della descrizione nel codice del tema è fatta usando il parametro @. Sfortunatamente da qualche altra parte nel codice, quelle stesse stringhe sono già oggetto di check_plain(). La seconda applicazione di check_plain() è la causa della conversione a codici HTML dei simboli contenuti nelle stringhe.

La mia soluzione è stata quindi rimpiazzare il parametro @ con il parametro ! nelle chiamate alla funzione t() eseguite nella funzione marinelli_banner_markups()
Questa funzione è contenuta nel file marinelli/logics/banners.inc

Eccovi il codice modificato:

'alt' => t('!image_desc', array('!image_desc'=>$banner['image_description'])),
'title'   => t('!image_title', array('!image_title'=>$banner['image_title'])),

...

'longdesc' => t('!image_desc', array('!image_desc'=>$banner['image_description']))

Keep on hackin' ;-)

2 commenti:

  1. ciao scusami se ti scoccio avrei una domanda da farti.
    Pure io sto utilizzando il Marinelli come tema per un sito però ho un problema, non riesco a campiare il colore di sfondo del thema. Io ho cercato di vedere i vari css della directory ma non sono riuscito a trovare quello interessato.
    Grazie per l'aiuto lo apprezzerei molto

    Giovanni

    RispondiElimina
  2. Ciao Giovanni,
    grazie per il commento, fa sempre piacere che un post sia utile a qualcuno!

    Per quanto riguarda lo sfondo, il css in cui è impostato è layout.css (body.marinelli), ma non importa molto perchè ti basta ricolorare l'immagine .gif da 5x5 pixel
    marinelli/img/backgrounds/body.gif

    Il colore del contorno della pagina è impostato sempre in layout.css sotto #pageBorder

    Per scoprire dove sono settati i vari parametri senza impazzire ti consiglio di usare i Developer Tools inclusi nel menu Strumenti di Chrome/Chromium oppure l'ottima estensione Firebug di Firefox ;-)

    Fammi sapere se hai risolto!

    Buona giornata,
    Andy

    RispondiElimina