Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

clase prefabricada para smarty

Estas en el tema de clase prefabricada para smarty en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola buenas, Tengo montado smarty para las plantillas en html: <? # smarty # ************************* require_once RUTA_lib_smarty.'Smarty.class.php'; $this->smarty = new Smarty; $this->smarty->template_dir = RUTA_template_smarty; $this->smarty->compile_dir ...
  #1 (permalink)  
Antiguo 02/01/2013, 03:31
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 21 años, 5 meses
Puntos: 4
clase prefabricada para smarty

Hola buenas,

Tengo montado smarty para las plantillas en html:

<?
# smarty
# *************************
require_once RUTA_lib_smarty.'Smarty.class.php';
$this->smarty = new Smarty;
$this->smarty->template_dir = RUTA_template_smarty;
$this->smarty->compile_dir = RUTA_compile_smarty;
$this->smarty->config_dir = RUTA_config_smarty;
$this->smarty->cache_dir = RUTA_cache_smarty;
$this->smarty->caching = true;

# clase translate
# *************************
require_once 'Translate.php';
$translate = new valor_translate();

# asignar variable translate
# *************************
$this->smarty->assign('translate ',$translate );

# plantilla
# *************************
$this->smarty->display('index.tpl');
?>

como interpretarlo en mi html con smarty "{$translate->valor("palabra a traducir")}" la clase?
<? $translate->valor("palabra a traducir"); ?>

Muchisimas gracias.
__________________
------------------------------------------------
La paciencia es el rey de la ciencia
------------------------------------------------

  #2 (permalink)  
Antiguo 02/01/2013, 05:14
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: clase prefabricada para smarty

Una solución elegante seria crear un bloque, te dejo una referencia http://www.smarty.net/docsv2/en/api.register.block.tpl

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #3 (permalink)  
Antiguo 03/01/2013, 00:20
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 21 años, 5 meses
Puntos: 4
Respuesta: clase prefabricada para smarty

Hola buenas,

No me funciona correctamente,

Te pongo el script a ver si me lo puedes corregir:

PONGO UN PEQUEÑO SCRIPT DE LA CLASS TRANSLATE:
Translate.php

<?
class valor_translate
{
private $Bd;
private $crypt;

public $VALOR;
private $VA1;

# Constructor
# ************************************************** ********
function __construct()
{
# Includes
# ************************************************** ************
include_once(RUTA_lib."Bd.php");
include_once(RUTA_lib."Encriptacion.php");

# Class
# ************************************************** ************
$this->Bd = new conectarMySQL(dbdriver,bdhost,dbuser,dbpass,dbsele ct);
$this->Bd->conectar();
$this->crypt = new base64();
}

function valor($VALOR)
{
$this->VALOR = $VALOR;
return stripslashes($this->$VALOR);
}
}
?>

PHP:
<?
require_once RUTA_lib.'Translate.php';
$this->translate = new valor_translate();

# script como se ejecuta la clase translate
$this->translate->valor("Palabra a traducir");

# Smarty
$this->smarty->register_block('translate', $this->translate->valor);
?>

HTML:
{translate}Hello, world!{/translate}
__________________
------------------------------------------------
La paciencia es el rey de la ciencia
------------------------------------------------

  #4 (permalink)  
Antiguo 03/01/2013, 10:43
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: clase prefabricada para smarty

¿Leiste la documentación que te paso @masterpuppet? Tienes que pasarle a register_block un callback donde definas lo que vas a hacer, no le puedes pasar directamente la función que quieres ya que necesita ciertos parámetros especiales...
  #5 (permalink)  
Antiguo 03/01/2013, 11:29
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 21 años, 5 meses
Puntos: 4
Respuesta: clase prefabricada para smarty

Hola Buenas muchas gracias por las respuestas.

Me puedes pasar Un ejemplo sobre el script Que e posteado?
Ya Que no llegó a entenderlo, y lo e hecho.igual Que el tutorial pero veo Que no me funciona.

Muchísimas gracias
__________________
------------------------------------------------
La paciencia es el rey de la ciencia
------------------------------------------------

  #6 (permalink)  
Antiguo 03/01/2013, 12:29
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: clase prefabricada para smarty

Pues en la documentación tienes un ejemplo muy claro, simplemente creas la función, dentro de la función implementas la llamada a tu clase translate, y luego registras la función como un bloque de Smarty.
  #7 (permalink)  
Antiguo 03/01/2013, 12:57
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 21 años, 5 meses
Puntos: 4
Respuesta: clase prefabricada para smarty

Lo.pruebo mañana y te comentó a ver sí todo va ok.

Me hubiese gustado una gran ayuda sobre Un script sobre el script posteado, pero a ver sí a base de pruebas va todo ok.


Me encanta trabajar con smarty.
Muchas gracias
__________________
------------------------------------------------
La paciencia es el rey de la ciencia
------------------------------------------------

  #8 (permalink)  
Antiguo 03/01/2013, 13:03
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: clase prefabricada para smarty

Lo que pasa es que el script que posteas no es correcto, ya se te indicó que debes de crear y registrar una función, y en ninguna parte del código que pones lo haces, así que no se te puede brindar ayuda directamente porque es erroneo para empezar.

Saludos.
  #9 (permalink)  
Antiguo 03/01/2013, 13:13
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: clase prefabricada para smarty

Es dificil dejarlo mas claro que la doc, de todas formas podria ser lago asi:

Código PHP:
Ver original
  1. function do_translation ($params, $content, &$smarty, &$repeat)
  2. {
  3.     static $translator;
  4.     if(null === $translator) {
  5.         $translator = new Translator($params['lang']);        
  6.         ...
  7.     }    
  8.     return $translator->translate($content);            
  9. }
  10.  
  11. // register with smarty
  12. $smarty->register_block('translate', 'do_translation');
Código HTML:
Ver original
  1. {translate lang='es'}Hello, world!{/translate}
__________________
http://es.phptherightway.com/
thats us riders :)
  #10 (permalink)  
Antiguo 04/01/2013, 15:03
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 21 años, 5 meses
Puntos: 4
Respuesta: clase prefabricada para smarty

Muchísimas gracias mañana lo pruebo y os comento, pero una duda Que tengo los 4 argumentos a pasar la función me lo podéis explicar para conocer su concepto?

($params, $content, &$smarty, &$repeat)

sobretodo estos dos argumentos.
&$smarty,
&$repeat
__________________
------------------------------------------------
La paciencia es el rey de la ciencia
------------------------------------------------

  #11 (permalink)  
Antiguo 04/01/2013, 16:08
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: clase prefabricada para smarty

En el manual te lo dice claramente

Leer no duele, creeme.
  #12 (permalink)  
Antiguo 04/01/2013, 23:04
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 21 años, 5 meses
Puntos: 4
Respuesta: clase prefabricada para smarty

Hola buenos días,

Me da error tal como me indicáis, me podéis ayudar?

<?php
require_once RUTA_lib_smarty.'Smarty.class.php';
$smarty = new Smarty;

function do_translation ($params, $content, &$smarty, &$repeat)
{
if($params === "translate")
{
require_once RUTA_lib.'Translate.php';
$translate = new valor_translate($params['lang']);

}
return $translate;
}

// register with smarty
$smarty->register_block('translate', 'do_translation');
?>

Fatal error: Uncaught exception 'SmartyException' with message 'Call of unknown method 'register_block'.' in C:\xampp\htdocs\Comercios_electronicos_1\merca\app \lib\smarty\libs\sysplugins\smarty_internal_templa tebase.php:806 Stack trace: #0 C:\xampp\htdocs\Comercios_electronicos_1\merca\app \config\funciones_smarty.php(17): Smarty_Internal_TemplateBase->__call('register_block', Array) #1 C:\xampp\htdocs\Comercios_electronicos_1\merca\app \config\funciones_smarty.php(17): Smarty->register_block('translate', 'do_translation') #2 C:\xampp\htdocs\Comercios_electronicos_1\merca\app \config\funciones.php(6): require_once('C:\xampp\htdocs...') #3 C:\xampp\htdocs\Comercios_electronicos_1\merca\ind ex.php(7): require_once('C:\xampp\htdocs...') #4 {main} thrown in C:\xampp\htdocs\Comercios_electronicos_1\merca\app \lib\smarty\libs\sysplugins\smarty_internal_templa tebase.php on line 806
__________________
------------------------------------------------
La paciencia es el rey de la ciencia
------------------------------------------------

  #13 (permalink)  
Antiguo 05/01/2013, 04:03
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: clase prefabricada para smarty

Si estas trabajando con Smarty 3 utiliza registerPlugin.

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #14 (permalink)  
Antiguo 05/01/2013, 04:22
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 21 años, 5 meses
Puntos: 4
Respuesta: clase prefabricada para smarty

Ahora me marca otro tipo de error:

<?
require_once RUTA_lib_smarty.'Smarty.class.php';
$smarty = new Smarty;

function do_translation($params, $content, &$smarty, &$repeat)
{
if($params["lang"] == "translate")
{
require_once RUTA_lib.'Translate.php';
// frease Regístrate a pasar
$translate = new valor_translate($params['lang']);

}

// retornar la variable $translate al valor Regístrate
return $translate;
}

$smarty->registerPlugin("function", "translate", "do_translation");
?>

Código HTML:
{translate lang="translate"}Regístrate{/translate}
ERROR:

Fatal error: Uncaught exception 'SmartyCompilerException' with message 'Syntax Error in template &quot;C:\xampp\htdocs\Comercios_electronicos_1\mer ca\templates\cabecera_registrate.html&quot; on line 6 &quot;&quot; unknown tag &quot;translate&quot;' in C:\xampp\htdocs\Comercios_electronicos_1\merca\app \lib\smarty\libs\sysplugins\smarty_internal_templa tecompilerbase.php:657 Stack trace: #0 C:\xampp\htdocs\Comercios_electronicos_1\merc\app\ lib\smarty\libs\sysplugins\smarty_internal_templat ecompilerbase.php(443): Smarty_Internal_TemplateCompilerBase->trigger_template_error('unknown tag "tr...', 6) #1 C:\xampp\htdocs\Comercios_electronicos_1\merca\app \lib\smarty\libs\sysplugins\smarty_internal_templa teparser.php(2388): Smarty_Internal_TemplateCompilerBase->compileTag('translate', Array) #2 C:\xampp\htdocs\Comercios_electronicos_1\merca\app \lib\smarty\libs\sysplugins\smarty_internal_templa teparser.php(3101): Smarty_Internal_Templateparser->yy_r36() #3 C:\xampp\htdocs\Comercios_electronicos_1\merc in C:\xampp\htdocs\Comercios_electronicos_1\merca\app \lib\smarty\libs\sysplugins\smarty_internal_templa tecompilerbase.php on line 657
__________________
------------------------------------------------
La paciencia es el rey de la ciencia
------------------------------------------------

  #15 (permalink)  
Antiguo 05/01/2013, 04:43
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: clase prefabricada para smarty

Talves sea porque lo estas registrando como function cuando debería ser como block
__________________
http://es.phptherightway.com/
thats us riders :)
  #16 (permalink)  
Antiguo 05/01/2013, 06:08
Avatar de syntex  
Fecha de Ingreso: noviembre-2002
Ubicación: Cataluña
Mensajes: 978
Antigüedad: 21 años, 5 meses
Puntos: 4
Respuesta: clase prefabricada para smarty

Todo más Que Perfecto.
Muchísimas gracias a todos

una pregunta, los tipos a pasar me lo podéis explicar?

type*defines the type of the plugin. Valid values are "function", "block", "compiler" and "modifier".
__________________
------------------------------------------------
La paciencia es el rey de la ciencia
------------------------------------------------


Última edición por syntex; 05/01/2013 a las 06:15

Etiquetas: clase, html, prefabricada, smarty, variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:50.