Foros del Web » Programando para Internet » PHP »

smarty no muestra valores del php

Estas en el tema de smarty no muestra valores del php en el foro de PHP en Foros del Web. estoy tratando meterme de lleno con smarty y php, aunque php sea un poco confuso, estoy haciendo un modulo prestashop Código PHP: public function  hookPayment ( ...
  #1 (permalink)  
Antiguo 15/12/2011, 11:37
 
Fecha de Ingreso: febrero-2011
Ubicación: San Jose
Mensajes: 14
Antigüedad: 13 años, 9 meses
Puntos: 0
smarty no muestra valores del php

estoy tratando meterme de lleno con smarty y php, aunque php sea un poco confuso, estoy haciendo un modulo prestashop

Código PHP:
public function hookPayment($params)
    {
        if(!
$this->active)
            return ;       
        
        global 
$smarty$cookie$cart;        
        
        
$smarty->assign(array(
        
'cart' => $cart,
        
'logged' => $cookie->isLogged(),
        
'hash' =>  codificarHash($cart->id$cart->getTotalCart(true,3),
                                       
time(), $cart->id),
        
'customerName' => ($cookie->logged 
                           
$cookie->customer_firstname.' '.$cookie->customer_lastname 
                           
false)
        ) );        
        
        return 
$this->display(__FILE__,'/pago.tpl');
    }
//hookPayment 
el pago.tpl es:

Código HTML:
<div style="background: #ffffff ;  width: 150px; height: 90;">
          <a href="{$base_dir}modules/pago/pago_page.php" 
             title="Click this link"><img src="{$base_dir}/modules/pago/img/pago.png" style="width: 200px; height: 100px;" /> </a>
          </div> 
pago_page.php es:

Código PHP:
<?php

    
global $smarty;

    include(
'../../config/config.inc.php' );
    include(
'../../header.php');
    
    
$smarty->display(dirname(__FILE__).'/pago_page.tpl');
    
    include(
'../../footer.php');
    
?>
y pago_page.tpl es:
Código HTML:
<div id="formConfirmar">
    <form name="autorizationForm" method="post" class="std"          
         action="pago?accion=confirmar"> 
        <table >
            <tr>            
                <td style="float: right;">
                    Username:
                </td>                    
                <td>
                    <input type="text"  name="username" 
                           value="{$customerName}" id="username" />
                </td>
            </tr>
            <tr>
                <td style="float: right;">
                    key_id:
                </td>
                <td>
                    <input type="text"  name="key_id" 
                           value="{$cart->secure_key}" id="key_id" />
                </td>
            </tr>
            <tr>
                <td style="float: right;">
                    hash:
                </td>
                <td>
                    <input type="text"  name="hash" 
                           value="{$hash}" id="hash" />
                </td> 
todas las variables asignadas a la global $smarty se muestran en el .tpl menos la hash, ya comprobe el metodo codificarHash y funciona correctamente.
¿Alguien sabe que estoy haciendo mal? ayudenme porfa
  #2 (permalink)  
Antiguo 15/12/2011, 13:16
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 9 meses
Puntos: 288
Respuesta: smarty no muestra valores del php

y que devuelve codificarHash()
mostranos el resultado con un var_dump()
  #3 (permalink)  
Antiguo 15/12/2011, 15:59
 
Fecha de Ingreso: febrero-2011
Ubicación: San Jose
Mensajes: 14
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: smarty no muestra valores del php

Cita:
Iniciado por Patriarka Ver Mensaje
y que devuelve codificarHash()
codificarhash() retorna un string

Cita:
Iniciado por Patriarka Ver Mensaje
mostranos el resultado con un var_dump()
string 'b4c9edf48e2c78cd39a6809656276e5a' (length=32)
  #4 (permalink)  
Antiguo 16/12/2011, 00:43
Avatar de zerpico_01  
Fecha de Ingreso: enero-2008
Ubicación: Wilde - Avellaneda -
Mensajes: 421
Antigüedad: 16 años, 10 meses
Puntos: 13
Respuesta: smarty no muestra valores del php

Pues simple no la estas pasando al tpl

mira prestashop funciona con hookPayment (ganchos)
la funcion esta correcta pero si miras estas cargando el hash al

return $this->display(__FILE__,'/pago.tpl');

y no al pago_page.tpl ( como deberia ser)

por otra parte seria mejor cagar todo en la class principal del modulo y desde los php llamar al objeto.

y por ultimo no se que version de prestashop utilizas pero usar {$base_dir} no es lo mejor.



saludos

PD: dime para que version de prestashop es el modulo?? asi puedo ayudarte...

Y POR ULTIMO ESTO NO VA ACA VA EN PREFABRICADAS!! te lo digo por lo van a mover de un momento a otro...
__________________
Es duro fracasar en algo, pero es mucho peor no haberlo intentado. - Si crees todo lo que lees, mejor no leas -
  #5 (permalink)  
Antiguo 16/12/2011, 09:52
 
Fecha de Ingreso: febrero-2011
Ubicación: San Jose
Mensajes: 14
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: smarty no muestra valores del php

Cita:
Iniciado por zerpico_01 Ver Mensaje
Pues simple no la estas pasando al tpl

mira prestashop funciona con hookPayment (ganchos)
la funcion esta correcta pero si miras estas cargando el hash al

return $this->display(__FILE__,'/pago.tpl');

y no al pago_page.tpl ( como deberia ser)
entiendo lo que dices lo que pasa es que pense que si todos los valores se muestran en el pago_page.tpl aun pasando por pago.tpl tambien hash deberia llegar, no se si pasa algo diferente por llamar una funcion

Cita:
Iniciado por zerpico_01 Ver Mensaje
por otra parte seria mejor cagar todo en la class principal del modulo y desde los php llamar al objeto.
dices que esta parte esta mal
Código HTML:
<a href="{$base_dir}modules/pagocredomatic/pago_page.php" > 
y lo entiendo si estuviera trabajando con java servlets seria algo asi
Código HTML:
<a href="{$base_dir}modules/pagocredomatic/pago?accion='hagaAlgo'" > 
pero no se como hacer eso con php con costos hago lo que vez

Cita:
Iniciado por zerpico_01 Ver Mensaje
y por ultimo no se que version de prestashop utilizas pero usar {$base_dir} no es lo mejor.
la version de prestashop es la ultima 1.4.6.2, lo de {$base_dir} no lo sabia que me recomiendas ??

Cita:
Iniciado por zerpico_01 Ver Mensaje
Y POR ULTIMO ESTO NO VA ACA VA EN PREFABRICADAS!! te lo digo por lo van a mover de un momento a otro...
y que puedo hacer al respecto

y muchas gracias por la ayuda te lo agradezco mucho

Última edición por yason; 16/12/2011 a las 14:28
  #6 (permalink)  
Antiguo 16/12/2011, 20:04
Avatar de zerpico_01  
Fecha de Ingreso: enero-2008
Ubicación: Wilde - Avellaneda -
Mensajes: 421
Antigüedad: 16 años, 10 meses
Puntos: 13
Respuesta: smarty no muestra valores del php

mira es dificil ayudarte sin saber que tipo de modulo necesitas, voy a darte un ejemplo rapido con los parametros que tu post.

Dentro de la classe que debe tener el mismo nombre que el modulo pones:

Código PHP:
public function hookPayment($params){
        if (!
$this->active) return ;
        
/* moneda activada */
        
if (!$this->_checkCurrency($params['cart'])) return ;
        
/* en este caso solo llamamos a smarty */
        
global $smarty;
        
/* pasamos las rutas para links e imagenes*/
        
$smarty->assign(array(
            
'this_path' => $this->_path,
            
'this_path_ssl' => Tools::getShopDomainSsl(truetrue).__PS_BASE_URI__.'modules/'.$this->name.'/'
        
));
        return 
$this->display(__FILE__,'/pago.tpl');
    } 
de ese modo pasas los links y rutas para las imagenes.

ahora en el archivo "pago.tpl"

nota:
usamos los css por defecto de prestashop
tambien las sentencias para que puedas traducir el modulo al idioma que desees, recorda que mod='debe ir el nombre del modulo, y este mobre debe ser igual al directorio que contiene los archivos y a su vez debe tener el mismo nombre la classe principal.
asi que entoces en pago.tpl va:

Código HTML:
<p class="payment_module">
	<a href="{$this_path_ssl}pago_page.php" title="{l s='CLICK PARA ABONAR CON' mod='aca mete el mombre del modulo'}">
	<!-- img debe estar dentro del directorio del modulo con la imagen pago.png-->
		<img src="{$this_path}/img/pago.png" alt="paga con modulo de pago etcc..." />
		{l s='Paga con medio nombre....' mod='aca nombre del modulo'}
	</a>
</p> 

ahora creamos dentro de la classe principal lo que se ejecutara en pago_page.php

regresa a la clase principal y coloca justo despues de lo que colocamos primero:

Código PHP:
public function execPayment($cart){
        if (!
$this->active) return ;
        
/* verifica que tenga una moneda realcionada desde pago/divisas */
    
if (!$this->_checkCurrency($cart)) Tools::redirectLink(__PS_BASE_URI__.'order.php');
    
    
/* para pasar el id del carro */
    
    /* ahora si enviamos los datos del cliente y todo lo que necesites
*/
        
global $cookie$smarty;
        
$smarty->assign(array(
            
'cart' => (int)($cart->id), 
            
'customerName'     => Tools::safeOutput(($cookie->logged $cookie->customer_firstname false)),
            
'customerLastname'   => Tools::safeOutput(($cookie->logged $cookie->customer_lastname false)),
/* como no se como debes crear tu hash lo hago como lo hiciste vos */
/* $cart->getTotalCart(true,3) <-- no se usa en versiones 1.4.x.x de prestashop */
            
'hash' =>  codificarHash((int)($cart->id), $cart->getOrderTotal(trueCart::BOTH),time(),(int)($cart->id)),
/* por si necesitas cargar imagenes en el tpl usa */
            
'this_path' => $this->_path,
            
'this_path_ssl' => Tools::getShopDomainSsl(truetrue).__PS_BASE_URI__.'modules/'.$this->name.'/'
        
));
        return 
$this->display(__FILE__'pago_page.tpl');
    } 

ahora vamos crear el contenido de tu archivo "pago_page.php"
Fijate que en NOMBREDETUCLASSEPRINCIPAL debe ir el nombre de la classe que lleva el mismo nombre que el directorio del modulo


Código PHP:

/* protegemos el archivo*/
$useSSL true;
include(
dirname(__FILE__).'/../../config/config.inc.php');
include(
dirname(__FILE__).'/../../header.php');
include(
dirname(__FILE__).'/NOMBREDETUCLASSEPRINCIPAL.php');
/* verificamos que el usuario este logueado */
if (!$cookie->isLogged(true)) Tools::redirect('authentication.php?back=order.php');
$NOMBREDETUCLASSEPRINCIPAL = new nombredetuclasseprincipal();

/** llamamos a function execPayment que se encargara de cargar todo :-)  */
echo $NOMBREDETUCLASSEPRINCIPAL->execPayment($cart);
include_once(
dirname(__FILE__).'/../../footer.php'); 
ahora vamos a crear el contenido "pago_page.tpl"
la action del formuario lo hacemos por parametros predefinidos de prestashop, como seguridad limpiamos las variables con escape htmlall, podes usar otras.

Código HTML:
<div id="formConfirmar">
    <form name="autorizationForm" method="post" class="std" action="{$request_uri}"> 
                    Username:
                </td>                    
                <td>
 <input type="text"  name="username" value="{$customerName|escape:'htmlall':'UTF-8'}} {$customerLastname|escape:'htmlall':'UTF-8'}}" id="username" />
                </td>
            </tr>
            <tr>
                <td style="float: right;">
                    key_id:
                </td>
                <td>
                    <input type="text"  name="key_id" 
                           value="{$cart|escape:'htmlall':'UTF-8'}}" id="key_id" />
                </td>
            </tr>
            <tr>
                <td style="float: right;">
                    hash:
                </td>
                <td>
                    <input type="text"  name="hash" 
                           value="{$hash|escape:'htmlall':'UTF-8'}}" id="hash" />
                </td> 

por ultimo antes del cierre de la classe o sea antes del ultimo "}" tendria que ir esto:

Código PHP:
private function _checkCurrency($cart)
    {
        
$currency_order = new Currency((int)($cart->id_currency));
        
$currencies_module $this->getCurrency((int)$cart->id_currency);
        
$currency_default Configuration::get('PS_CURRENCY_DEFAULT');
        
        if (
is_array($currencies_module))
            foreach (
$currencies_module AS $currency_module)
                if (
$currency_order->id == $currency_module['id_currency'])
                    return 
true;
    } 
saludos!!

PD: Pues si te sirve de algo yo hago modulo de pago para prestashop !
__________________
Es duro fracasar en algo, pero es mucho peor no haberlo intentado. - Si crees todo lo que lees, mejor no leas -
  #7 (permalink)  
Antiguo 19/12/2011, 10:02
 
Fecha de Ingreso: febrero-2011
Ubicación: San Jose
Mensajes: 14
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: smarty no muestra valores del php

Cita:
Iniciado por zerpico_01 Ver Mensaje
si te sirve de algo yo hago modulo de pago para prestashop !
se nota que conoces bien ese ambiente muchas gracias por las correciones...
será montarlas en el modulo y te comento,
  #8 (permalink)  
Antiguo 25/12/2011, 01:17
Avatar de zerpico_01  
Fecha de Ingreso: enero-2008
Ubicación: Wilde - Avellaneda -
Mensajes: 421
Antigüedad: 16 años, 10 meses
Puntos: 13
Respuesta: smarty no muestra valores del php

pues en si estoy aprendiendo
buscame en el foro prestashop como Tamu
seria mas sencillo ayudarte si tienes un manual tecnico de la pasarela que deseas implementar.

saludos y feliz NAVIDAD!!
__________________
Es duro fracasar en algo, pero es mucho peor no haberlo intentado. - Si crees todo lo que lees, mejor no leas -
  #9 (permalink)  
Antiguo 30/12/2011, 08:38
 
Fecha de Ingreso: febrero-2011
Ubicación: San Jose
Mensajes: 14
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: smarty no muestra valores del php

oye muchas gracias por la ayuda he aprendido mucho con el tuto de tu respuesta...
no se como funciona lo de los puntos pero te mereces 100

feliz año nuevo
  #10 (permalink)  
Antiguo 01/01/2016, 13:35
 
Fecha de Ingreso: enero-2016
Mensajes: 1
Antigüedad: 8 años, 10 meses
Puntos: 0
no muestra el contenido del tpl

Tengo una duda con prestashop:
Cuando intento acceder a un módulo en concreto (por ejemplo Blockbestseller, y uso el comando include para acceder a su contenido, no aparece los productos, sin embargo si este módulo lo incluyo en un hook y accedo por ejemplo con {$HOOK_HOME_TAB_CONTENT} funciona correctamente. Alguien sabe si es posible solucionar esto?

Etiquetas: muestra, 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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 11:43.