Posts Tagged ‘smarty template engine’

Smarty: reemplaçar diversos textes en una cadena de text

divendres, octubre 4th, 2013

Si des de Smarty volem fer vàries substitucions en una cadena abans demostrar-la podem encadenar modificadors:

{$variable|replace: 'cadena a cercar':'el que hi posarem'}

Per exemple, partint d’aquesta constant definida des de PHP:

define("INDEX_GIMCAMA","La gimcama comença des de ###ORIGEN_CIUTAT_NOM### (###ORIGEN_PAIS###) - ###ORIGEN_CIUTAT_CODI### a ###DESTINACIO_CIUTAT_NOM### (###DESTINACIO_PAIS###) - (###DESTINACIO_CIUTAT_CODI###) i costa ###PREU### ###SIMBOL_MONEDA###");

Aquest és un petit truc per a pàgines multi-llengua, en que les cadenes es defineixen en diferents idiomes, i s’inclou l’arxiu pertinent (require_once).

I tenim present que hem passat a la plantilla de Smarty les variables pertinents des de PHP:

$smarty->assign('s_origen_ciutat_nom', 'Barcelona');
$smarty->assign('s_origen_pais', 'Catalunya');
$s_codi_moneda = 'CAT';  // Aquí hi aniria EUR, USD... en aquests moments polítics en que Europa no s'ha decantat clarament del costat de la Democràcia, perquè no pensar a fer un nou Estat amb moneda pròpia? ;)
$smarty->assign('s_codi_moneda', $s_codi_moneda);
$smarty->assign('i_decimals', 2);
// etc...

Llavors a la TPL (plantilla) faríem:

{$smarty.const.INDEX_GIMCAMA|replace: '###ORIGEN_CIUTAT_NOM###':$s_origen_ciutat_nom|replace: '###ORIGEN_PAIS###':$s_origen_pais|replace: '###ORIGEN_CIUTAT_CODI###':$s_origen_ciutat_codi|replace: '###DESTINACIO_CIUTAT_NOM###':$s_destinacio_ciutat_nom|replace: '###DESTINACIO_PAIS###':$s_destinacio_pais|replace: '###DESTINACIO_CIUTAT_CODI###':$s_destinacion_ciutat_codi|replace: '###SIMBOL_MONEDA###':$s_simbol_moneda|replace: '###PREU###':{$s_preu|money_format:$s_codi_moneda:$i_decimals}}"

Fixeu-vos com al final reemplaço ###PREU### pel preu amb el modificador (modifier) money_format, passant-li |money_format per a que em doni format amb decimals i separadors de milers, i així acabar-ho de brodar.

Català-Catalunya English-USA Traduir a l'Anglès. Translate to English Compartir: La TafaneraIndependènciaCatosfera|FacebookTwitterFriend Feed|googleDeliciousDiggTechnoratiredditmixxyahoolivestumbleuponsimpy

Afegir l’hora a una plantilla Smarty

dimecres, juliol 10th, 2013

Si heu d’afegir l’hora a una plantilla d’Smarty és molt fàcil:

 

Hora local: {$smarty.now|date_format:"%Y-%m-%d %H:%M:%S"}
Català-Catalunya English-USA Traduir a l'Anglès. Translate to English Compartir: La TafaneraIndependènciaCatosfera|FacebookTwitterFriend Feed|googleDeliciousDiggTechnoratiredditmixxyahoolivestumbleuponsimpy

Smarty Debug

divendres, maig 11th, 2012

Si programeu plantilles (templates) d’Smarty hi ha una comanda que us anirà molt bé:

{debug}

Si poseu aquesta comanda al principi de la plana, obre una finestra nova amb les variables declarades i els seus valors.

Català-Catalunya English-USA Traduir a l'Anglès. Translate to English Compartir: La TafaneraIndependènciaCatosfera|FacebookTwitterFriend Feed|googleDeliciousDiggTechnoratiredditmixxyahoolivestumbleuponsimpy

PHP: Afegir arrays

dijous, gener 19th, 2012

Suposem que tenim un array amb codis postals.

Pe:

$st_codis_postals = array('08021' => 'Barcelona',

25520 => 'El Point de Suert (Lleida)',

17452 => 'Massanes (Girona)',

// I així successivament

);

Llavors volem afegir una entrada en la primera posició, ja que una plantilla d’Smarty utilitzarà l’array per a mostrar un combo.

Si afegim la clau 0, el que tindríem és:

‘08021’ => ‘Barcelona’,

25520 => ‘El Pont de Suert (Lleida)’,

17452 => ‘Massanes (Girona)’,

0 => ‘Triï la població’

Però les funcions que podem utilitzar per a fer un merge entre arrays o fer a afegir a la primera posició provoquen una reordenació de les claus numèriques.

Per tant no les podem fer servir, i fer servir un bucle per a això és exagerat i ineficient.

La solució, bastant simple, és fer:

$st_array_definitiva = array(0 => ‘Triï la població’) + $st_codis_postals;

Això farà la feina.

Només heu de vigilar de no tenir claus repetides ja que + afegeix les claus que no estan repetides.

Català-Catalunya English-USA Traduir a l'Anglès. Translate to English Compartir: La TafaneraIndependènciaCatosfera|FacebookTwitterFriend Feed|googleDeliciousDiggTechnoratiredditmixxyahoolivestumbleuponsimpy

Emprar JQuery i Smarty

dimecres, gener 11th, 2012

JQuery és empradísism a Internet per a desenvolupar la part visual, coneguda com Front-End, i Smarty és un sistema de plantilles que s’empra molt en programació en PHP.

JQuery empra una nomenclatura tipus:

<script> 
    $('metode_pagament').click(
        function() { 
            $('capa_tarjeta').appendTo('#capa_tipus_pagament'); 
        }
      ); 
</script>

Aquest codi dins una plantilla d’Smarty, coneguda com tpl, provocarà un error ja que els corxets { } són emprats per Smarty per a indicar on comença codi que executa Smarty, i com JQuery o Javascript empren els corxets { } això confondrà a l’intèrpret, retornant un error.

Això se soluciona facilment obrint una etiqueta d’Smarty {literal}:

{literal}
<script> 
    $('metode_pagament').click(
        function() { 
            $('capa_tarjeta').appendTo('#capa_tipus_pagament'); 
        }
      ); 
</script>
{/literal}

Amb això funcionarà el vostre codi.

Català-Catalunya English-USA Traduir a l'Anglès. Translate to English Compartir: La TafaneraIndependènciaCatosfera|FacebookTwitterFriend Feed|googleDeliciousDiggTechnoratiredditmixxyahoolivestumbleuponsimpy

PHP: smarty : solució html_select_date encoding utf-8

divendres, gener 28th, 2011

El sistema de plantilles (templates) smarty ofereix la possibilitat de generar automàticament uns controls combo box per a seleccionar dates (dia, mes, anys).

Els mesos són mostrats en funció de la configuració d’idioma indicada al servidor.

Gener, Febrer, Març, Abril, Maig, Juny, Juliol, Agost, Setembre, Octubre, Novembre, Desembre

Com podem comprovar Març conté un caràcter ce trencada ç.

Aquest caràcter, que també apareix en portuguès,  es mostrarà com un caràcter estrany en el combo de selecció.

Passarà el mateix amb qualsevol idioma que contingui algun caràcter no estàndard en el nom del mes.

Per a solucionar-ho forçarem el tipus de codificació (encoding) com a UTF-8.

Això ho farem dient:

{html_select_date|utf_8_encoding

display_days=false

display_years=false

...

}

Enlloc del simple

{html_select_date
Català-Catalunya English-USA Traduir a l'Anglès. Translate to English Compartir: La TafaneraIndependènciaCatosfera|FacebookTwitterFriend Feed|googleDeliciousDiggTechnoratiredditmixxyahoolivestumbleuponsimpy