nersolar Posted July 14, 2016 Share Posted July 14, 2016 Buenos dias. Estoy modificando la plantilla de mi prestashop y necesito un poco de ayuda sobre un tema ya que no domino el Javascript El tema es: Quiero que me muestre un div u otro div dependiendo de la combinación del producto que elija el cliente. sabemos que prestashop cambia la imagen del producto dependiendo de la combinacion, eso se puede aplicar tambien a que muestre un div u otro, supongo, el problema es que no domino javascript y no se como modificar el product.js para que cuando cambie de combinación me muestre un div u otro. alguien me puede ayudar? Link to comment Share on other sites More sharing options...
nersolar Posted July 14, 2016 Author Share Posted July 14, 2016 Nadie sabe un poco de javascript? Link to comment Share on other sites More sharing options...
Diefco Posted July 14, 2016 Share Posted July 14, 2016 Cuando cambia de producto,en el DOM agrega alguna clase especial para ese producto o así? algo con lo que distinguir el que cambio el producto y mas... por el producto con el que quieres agregar otra cosa... Link to comment Share on other sites More sharing options...
nersolar Posted July 14, 2016 Author Share Posted July 14, 2016 Cuando cambia de producto,en el DOM agrega alguna clase especial para ese producto o así? algo con lo que distinguir el que cambio el producto y mas... por el producto con el que quieres agregar otra cosa... No entiendo bien que quieres decir. pero creo que quizas no me explico bien, voy a intentar explicarme mejor: Cuando cambias una combinación de un producto en la pagina cambian varias cosas, la url, la imagen del producto ( en caso que tenga otra diferente ) la referencia, el precio .... yo lo que quiero es que cuando apretas una combinación muestre un div cambiando el Style="display:none" de ese div. por ejemplo Apretando la combinacion numero 1: <div id="caracteristicas1" > HE ELEGIDO ESTA COMBINACIÓN </div> <div id="caracteristicas2" style="display:none"> no he elegido esta combinacion </div> <div id="caracteristicas3" style="display:none;"> no he elegido esta combinacion </div> Apretando la combinacion numero 2: <div id="caracteristicas1" style="display:none"> no he elegido esta combinacion </div> <div id="caracteristicas2" > HE ELEGIDO ESTA COMBINACIÓN </div> <div id="caracteristicas3" style="display:none;"> no he elegido esta combinacion </div> Apretando la combinacion numero 3: <div id="caracteristicas1" style="display:none"> no he elegido esta combinacion </div> <div id="caracteristicas2" style="display:none;"> no he elegido esta combinacion </div> <div id="caracteristicas3" > HE ELEGIDO ESTA COMBINACIÓN </div> Link to comment Share on other sites More sharing options...
ventura Posted July 14, 2016 Share Posted July 14, 2016 puedes hacerlo con jquery desde \themes\tu_tema\js\product.js alli tienes la funcion findCombination desde alli puedes añadir un condicional con la id de la combinacion o la referencia para que se muestre el div al seleccionarla $('#caracteristicas1').show() 2 Link to comment Share on other sites More sharing options...
nersolar Posted July 15, 2016 Author Share Posted July 15, 2016 puedes hacerlo con jquery desde \themes\tu_tema\js\product.js alli tienes la funcion findCombination desde alli puedes añadir un condicional con la id de la combinacion o la referencia para que se muestre el div al seleccionarla $('#caracteristicas1').show() Muchas gracias por la respuesta, pero sigo sin conseguir lo que quiero. podrias ayudarme un poquito mas? para usar la id de la combinacion he pensado en utilizar idCombination pero al ponerlo dentro de una table en el product.tpl no me muestra nada para mostrar las id de combinaciones he hecho esto: <table> <thead> <td>Referencia</td> <td>id de caombinacion</td> </thead> <tbody> {foreach from=$combinations key=num item=combination} <tr> <td>{$combination.reference|escape:'html':'UTF-8'}</td> <td>{$combination.idCombination}</td> </tr> {/foreach} </tbody> </table> incluso he intentado con $combination a solas, pero me devuelve String,string,string string .... $combination.idCombination no me devuelve nada $combination.idsAttributes no me devuelve nada pero bueno ... pasando de eso al final he pensado en poner el $combination.reference que me devuelve la referencia de la combinacion ( cosa que es muy engorrosa porque tendria que poner un monton de codigo en el product.js ) he intentado poner esto en el product.js, pero no funciona, porque no tengo ni idea de javascript .... function findCombination() { if (combination['reference'] = BL1310) { $('#caracteristicas1').show() } } esto me da problemas porque nisiquiera me cambia la referencia cuando estoy dentro del producto ... Siento ser tan ignorante en este tema, pero agradecería un poquitin más de ayuda por fabor. muchas gracias. Link to comment Share on other sites More sharing options...
ventura Posted July 15, 2016 Share Posted July 15, 2016 algo asi, ho haria falta display:none en el div del .tpl //9 ejemplo de idCombination seleccionado selectedCombination['idCombination'] = combination['idCombination']; if(selectedCombination['idCombination']== 9){ $('#caracteristicas1').show(); } else { $('#caracteristicas1').hide() } para ver el id de la combinacion en el div $('#caracteristicas1').html(selectedCombination['idCombination']).show(); 1 Link to comment Share on other sites More sharing options...
nersolar Posted July 15, 2016 Author Share Posted July 15, 2016 algo asi, ho haria falta display:none en el div del .tpl //9 ejemplo de idCombination seleccionado selectedCombination['idCombination'] = combination['idCombination']; if(selectedCombination['idCombination']== 9){ $('#caracteristicas1').show(); } else { $('#caracteristicas1').hide() } para ver el id de la combinacion en el div $('#caracteristicas1').html(selectedCombination['idCombination']).show(); Muchissimas gracias por tu atención Disculpa mi gnorancia para aplicar el codigo que me facilitas, pero no me funciona por muchas vueltas que le doy, he provado 1000 maneras distintas de aplicar el codigo pero ... no puedo ver ni el numero de combinacion seleccionado en el <div id="caracteristicas1" style="display:none;">hola</div> que tengo puesto en el product.tpl he puesto $('#caracteristicas1').html(selectedCombination['idCombination']).show(); dentro de function findCombination() en el archivo product.js. y tampoco me funciona esto porque dejan de funcionar las combinaciones .... selectedCombination['idCombination'] = combination['idCombination']; if(selectedCombination['idCombination']== X){ $('#caracteristicas1').show(); } else { $('#caracteristicas1').hide() } dentro de la función function findCombination(). Link to comment Share on other sites More sharing options...
ventura Posted July 15, 2016 Share Posted July 15, 2016 Creo que no he llegado a enterar del todo, de la finalidad de lo que quieres hacer, o de la limitacion que quieres hacer. Te pongo ejemplo, si quieres limitar un contenido de un dv u otro elemento en determinada combinacion, edita el product.js, en esta parte //get the data of product with these attributes quantityAvailable = combination['quantity']; debajo añade esto para condicionar a la combinacion con id (id 1 por ejemplo) pero que te permita visualizar en las demas su id para poder adaptar el codigo selectedCombination['idCombination'] = combination['idCombination']; if (selectedCombination['idCombination'] == 1){ $('#show_div_content').text('contenido del div en la combinacion ').append(selectedCombination['idCombination']).show(); } else { $('#show_impact_price').text('contenido del div en otra combinacion').append(selectedCombination['idCombination']).show(); el resultado si añades un div nombrado como en el js sera el de la imagen, <div id="show_div_content"></div> hazlo asi para ir probando y hacer lo que necesitas 1 Link to comment Share on other sites More sharing options...
nersolar Posted July 15, 2016 Author Share Posted July 15, 2016 Creo que no he llegado a enterar del todo, de la finalidad de lo que quieres hacer, o de la limitacion que quieres hacer. Te pongo ejemplo, si quieres limitar un contenido de un dv u otro elemento en determinada combinacion, edita el product.js, en esta parte //get the data of product with these attributes quantityAvailable = combination['quantity']; debajo añade esto para condicionar a la combinacion con id (id 1 por ejemplo) pero que te permita visualizar en las demas su id para poder adaptar el codigo selectedCombination['idCombination'] = combination['idCombination']; if (selectedCombination['idCombination'] == 1){ $('#show_div_content').text('contenido del div en la combinacion ').append(selectedCombination['idCombination']).show(); } else { $('#show_impact_price').text('contenido del div en otra combinacion').append(selectedCombination['idCombination']).show(); el resultado si añades un div nombrado como en el js sera el de la imagen, <div id="show_div_content"></div> hazlo asi para ir probando y hacer lo que necesitas muchas gracias por tu ayuda, probaré a ver que tal me va con eso. La finalidad de lo que yo quiero es que cuando aprieten sobre una combinación aparezca un div, debajo en la descripción del producto con las características técnicas del producto, se que hay un apartado donde puedes poner características del producto, pero según las combinaciones de los productos que yo tengo cambian, y dentro de un producto hay diferentes potencias por ejemplo. por eso te decía de cambiar un div por otro, porque yo puedo programar en un *.tpl un div con tooodas las características para cada combinación, y según la combinación que elija el cliente quiero que se vea un div u otro. Link to comment Share on other sites More sharing options...
nersolar Posted July 18, 2016 Author Share Posted July 18, 2016 (edited) FUNCIONA!!! Finalmente funciona correctamente! he puesto este codigo selectedCombination['idCombination'] = combination['idCombination']; if(selectedCombination['idCombination']== 321){ $('#caracteristicas1').show(); } else { $('#caracteristicas1').hide() } para ver la ID de la combinación he utilizado: else { $('#show_impact_price').text('Numero de la combinacion:').append(selectedCombination['idCombination']).show(); } Ahora a ver como me lo monto para no poner 50 mil condicionantes en el product.js .... Edited July 18, 2016 by nersolar (see edit history) Link to comment Share on other sites More sharing options...
ventura Posted July 18, 2016 Share Posted July 18, 2016 No entiendo el codigo que has puesto, estas mezclando jquery con js cuando puedes hacerlo todo con jquery simple. Hazlo mejor con condicionales if/else if/ else http://www.w3schools.com/js/js_if_else.asp Link to comment Share on other sites More sharing options...
nersolar Posted July 18, 2016 Author Share Posted July 18, 2016 (edited) No entiendo el codigo que has puesto, estas mezclando jquery con js cuando puedes hacerlo todo con jquery simple. Hazlo mejor con condicionales if/else if/ else http://www.w3schools.com/js/js_if_else.asp EIII perdona he editado el mensaje anterior en vez de poner un nuevo mensaje .... Lo siento ahora que lo he conseguido en principio podría ir haciendo algo así .... pero no se si hay alguna forma mas eficiente, ideas tengo, pero no se como ponerlo en practica, por ahora voy tirando con esto: El problema esta en que tengo 50 mil condicionantes y 50 mil divs .... if(selectedCombination['idCombination']==521|| selectedCombination['idCombination']==520){ $('#caracteristicas2').hide(); $('#caracteristicas3').hide(); $('#caracteristicas4').hide(); $('#caracteristicas5').hide(); $('#caracteristicas6').hide(); $('#caracteristicas7').hide(); $('#caracteristicas8').hide(); $('#caracteristicas9').hide(); $('#caracteristicas10').hide(); $('#caracteristicas1').show(); } else { $('#caracteristicas1').hide(); $('#caracteristicas2').hide(); $('#caracteristicas3').hide(); $('#caracteristicas4').hide(); $('#caracteristicas5').hide(); $('#caracteristicas6').hide(); $('#caracteristicas7').hide(); $('#caracteristicas8').hide(); $('#caracteristicas9').hide(); $('#caracteristicas10').hide(); $('#show_impact_price').text('esto es el else').append(selectedCombination['idCombination']).show(); } Edited July 18, 2016 by nersolar (see edit history) Link to comment Share on other sites More sharing options...
nersolar Posted July 18, 2016 Author Share Posted July 18, 2016 De hecho tendría que añadir unos 5000 condicionantes y unos 96 div diferentes, los div son el máximo de combinaciones dentro de un producto y los 5.000 son aproximadamente el numero de productos multiplicado por el numero de combinaciones que tengo ... Link to comment Share on other sites More sharing options...
ventura Posted July 18, 2016 Share Posted July 18, 2016 Puedes hacerlo con arrays que es mas limpio if (in_array(selectedCombination['idCombination'], ['500','501','502','503','504','505','506'])) Para preparar (separadores) arrays largos puedes utilizar herramientas de este tipo http://delim.co/# O delimitar por rangos if (selectedCombination['idCombination'] >= 100 && selectedCombination['idCombination'] <= 500) para IDs del 100 a 500 por ejemplo 1 Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now