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...