Ver Mensaje Individual
  #6 (permalink)  
Antiguo 16/12/2011, 20:04
Avatar de zerpico_01
zerpico_01
 
Fecha de Ingreso: enero-2008
Ubicación: Wilde - Avellaneda -
Mensajes: 421
Antigüedad: 16 años, 3 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 -