Jump to content

[SOLUCIONADO] Pasar variable de Smarty a JS


Recommended Posts

¡Hola a todos!

Quería ver si me podéis echar una mano. Necesito que a la hora de ver los atributos en el producto, cuando es una textura al pasar el ratón por encima se me vea en el bloque de al lado en grande. Haciendo pruebas con una imagen cualquier funciona correctamente pero no cuando lo intento hacer con las variables que forman las imágenes de textura por lo que creo que lo que me ocurre es que no me están pasando bien al codigo JS.

Siendo el código que forma la imagen este:

<img src="{$img_col_dir}{$id_attribute|intval}.jpg" alt="{$colors.$id_attribute.name|escape:'html':'UTF-8'}" title="{$colors.$id_attribute.name|escape:'html':'UTF-8'}" width="20" height="20"  />

Las tengo declaradas tal que así pero no hay forma, ¿alguna ayuda? :/

var imgdir = "{$img_col_dir}";
var imgatt = "{$id_attribute|intval}";

 

Edited by Nalena (see edit history)
Link to comment
Share on other sites

1 hour ago, Nalena said:

¡Hola a todos!

Quería ver si me podéis echar una mano. Necesito que a la hora de ver los atributos en el producto, cuando es una textura al pasar el ratón por encima se me vea en el bloque de al lado en grande. Haciendo pruebas con una imagen cualquier funciona correctamente pero no cuando lo intento hacer con las variables que forman las imágenes de textura por lo que creo que lo que me ocurre es que no me están pasando bien al codigo JS.

Siendo el código que forma la imagen este:


<img src="{$img_col_dir}{$id_attribute|intval}.jpg" alt="{$colors.$id_attribute.name|escape:'html':'UTF-8'}" title="{$colors.$id_attribute.name|escape:'html':'UTF-8'}" width="20" height="20"  />

Las tengo declaradas tal que así pero no hay forma, ¿alguna ayuda? 😕


var imgdir = "{$img_col_dir}";
var imgatt = "{$id_attribute|intval}";

 

Pero ese TPL con el JS dónde está? En un fichero tuyo que lo añades desde un hook? Seguramente esa variable Smarty todavía no esté asignada cuando procesas el TPL y tengas que hacer tú la asignación.

Link to comment
Share on other sites

Yo uso 2 opciones,

esta en los TPL

<script>
  var $tokendb = '{$tokendbup}';
</script>

Antes en el php modulo 

$this->context->smarty->assign('tokendbup', $tokendbup);

Tambien sirve si pones en el tpl

{addJsDef $tokendbup=$tokendbup}

Esta no lo he probado, pero creo que es para variables de texto que se pueden traducir

{addJsDefL name=customizationIdMessage}{l s='Customization #' mod='blockcart' js=1}{/addJsDefL}

 

Esta segunda opcion la uso para añadirla al Backoffice del prestashop, añadiendo el codigo en el fichero php del modulo

public function hookActionAdminControllerSetMedia()
    {
Media::addJsDef(array('$tokendbup' =>  $tokendbup));
}

 

Edited by gusman126 (see edit history)
Link to comment
Share on other sites

He visto lo que quieres hacer

  • Vas a usar un modulo desarrollado por ti?

Vas a necesitar añadir todas las variables a tu modulo y asignarlas

  • o vas a modificar los ficheros product.tpl y los demás para hacer lo que quieres?

comprueba los nombres de las variables en el mismo fichero que estas usando y añade el script para asignarlas y usarlas en javascript o jquery

 

Link to comment
Share on other sites

¡Hola! Antes que nada mil gracias a los dos por contestar.

Realmente no pretendo hacer ningun módulo, o espero no necesitarlo, en principio pensaba que sería algo sencillo pero igual se complica la cosa...

Realmente estaba añadiendo el par de línas de JS en el archivo product.tpl Como comenté, si pongo una imagen cualquiera me la toma, pero no con las variables que forman los atributos de texturas por lo que supongo que el código JS no me anda tomando bien las variables.

Este código está en el archivo product.tpl y dejo en negrita las variables en cuestión:

<img src="{$img_col_dir}{$id_attribute|intval}.jpg" alt="{$colors.$id_attribute.name|escape:'html':'UTF-8'}" title="{$colors.$id_attribute.name|escape:'html':'UTF-8'}" width="20" height="20"  />

Y arriba del archivo simplemente pongo el código:
 

// Funciona
document.getElementById("test").innerHTML='<img src="http://localhost/ps16119/themes/modern_fashion/img/test.jpg" width="250" height="250"/>';

// Así no
var imgdir = "{$img_col_dir}";
var imgatt = "{$id_attribute|intval}";
document.getElementById("test").innerHTML='<img src="' + imgdir + imgdiratt +'.jpg" width="20" height="20"';

Realmente no sé si el código estará mejor o peor, pero la primera parte funciona jajajaja

Link to comment
Share on other sites

Añade el siguiente codigo en el fichero /themes/classic/templates/catalog/_partials/product-cover-thumbnails.tpl

Despues de probar en product.tpl y otro, en este tambien ha funcionado bien product-details.tpl

 

<script>
window.onload = function()
{
$(document).ready(function() {   
var imgdir = "{$img_col_dir}";
var imgatt = "{$id_attribute|intval}";
document.getElementById("test").innerHTML='<img src="' + imgdir + imgatt +'.jpg" width="20" height="20"';
});
}
</script>

Recuerda añadir el elemento "test" , cuadro o donde quieras que se muestre

 

Pero esto no va ha hacer que al pasar por el raton haga algo

Edited by gusman126 (see edit history)
Link to comment
Share on other sites

Vale, entonces si quiero que se muestre con el mouseover teniendo este código:

<img src="{$img_col_dir}{$id_attribute|intval}.jpg" onmouseover="show()" />

Añado el código conforme me diste pero llamando a la función...

window.onload = function() {
 $(document).ready(show() {
...
  });
 }
 

Y... debería de funcionar pero no T.T

Link to comment
Share on other sites

pues ni idea, eso ya deberas hacer pruebas directamente en la consola, 

Teniendo las variables en la memoria del explorador puedes hacer pruebas directamente añadiendo el codigo en la consola, es lo que yo hago cuando necesito ver si un codigo java funciona sin tener que ir al fichero y cambiando cada 2x3 y actualizando

 

 

 

Link to comment
Share on other sites

hace 3 minutos, Nalena dijo:

Bueno, lo anterior está arreglado, era fallo mio 😕 Estando el código bien pruebo con las variables y nada, pruebo con una ruta completa bien :( Seguiré dando vueltas a ver qué puedo hacer... Mil gracias por la ayuda!

pues deberas comprobar si esta leyendo y aplicando bien las variables, usa un console.log()

Link to comment
Share on other sites

No, si es que el problema está ahí, al hacerlo simplemente me muestra "{$img_col_dir}"; {$id_attribute|intval}"; :( Por lo que no sé si tengo que declarar esas variables en otro sitio, de diferente forma o qué narices pasa u.u 

Link to comment
Share on other sites

Usando 

<script>
window.onload = function()
{
$(document).ready(function() {   
var imgdir = "{$img_col_dir}";
var imgatt = "{$id_attribute|intval}";
console.log('Aqui la variable imgdir->'+imgdir+'<-');
console.log('Aqui la variable imgatt->'+imgatt+'<-');
});
}
</script>

me muestra en la consola

image.png.3eb1066de8dae7daa78193c5508d5ae0.png

Link to comment
Share on other sites

Si no... alguien sabe de algún módulo que haga lo que necesito?

Os adjunto imagen para ser un poco más gráfica. Básicamente es que cuando el cliente deje el ratón sobre alguno de los atributos se muestre en grande al lado (dónde puse el cuadrado por ej) 😕 Algo que funciona perfectamente con una imagen cualquiera pero no usando las variables u.u

sin-titulo-1969839.png

Link to comment
Share on other sites

Un modulo no va a ser posible, tendras que pedir que lo hagan , 

Es algo muy especifico ademas de tener que añadir una caja en un sitio en concreto de la plantilla .

Has pensado en hacer mas grande el cuadro que se muestra la imagen ?

Tendrias que cambiar codigo CSS para que se viera bien en horizontal, pero puede ser una solucion

image.png.5fa95e84a1a64b9e137642acbb7bb6a7.png

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...