morgoth Posted April 4, 2014 Share Posted April 4, 2014 Buenas! Os comento un "problema" que estoy teniendo únicamente con los productos personalizados. Os pongo un poco en situación a ver si me podéis dar una explicación del por qué pasa porque no lo entiendo (partimos que mis conocimientos de programación de plantillas es muy limitado). He implementado el siguiente enlace para que guarde los textos de la personalización del producto en el momento de añadir el producto al carrito. http://www.prestashop.com/forums/index.php?/topic/76874-how-to-remove-save-button-for-customized-fields/page__view__findpost__p__962978 Hasta aquí todo bien. Incluso he hecho alguna modificación en la plantilla "product.tpl" para mover la ubicación del cuadro de texto. El problema que tengo, incluso antes de modificar la plantilla por temas de ubicaciones de datos, es que cuando entro en un producto que tiene personalización, la columna de categorías desaparece. Mejor dicho, se queda el título pero el contenido (todas las categorías) desaparecen. A la que vuelvo a entrar en un producto diferente que no tiene personalización, todo vuelve a la normalidad. He podido detectar que en el product.tpl, apartado "// Combinations".... si a la línea addCombination({$idCombination|intval}, new Array({$combination.list}), {$combination.quantity}, {$combination.price}, {$combination.ecotax}, {$combination.id_image}, '{$combination.reference|addslashes}', {$combination.unit_impact}, {$combination.minimal_quantity}, '{$combination.available_date}', specific_price_combination); Le añado la variable "available_date" del siguiente modo: addCombination({$idCombination|intval}, new Array({$combination.list}), {$combination.quantity}, {$combination.price}, {$combination.ecotax}, {$combination.id_image}, '{$combination.reference|addslashes}', {$combination.unit_impact}, {$combination.minimal_quantity}, available_date, specific_price_combination); Las categorías aparecen perfectamente pero entonces pierdo la funcionalidad de guardar el texto personalizado en el momento de añadir al carrito. Esta versión todavía no la tengo en productivo y estoy trabajando en una versión local, hasta que consiga solucionar este problema. Por lo que si necesitáis ver algo (pantallazo para ver el detalle de las categorías que no se ven o cualquier cosa) os lo facilitaré sin problemas. ¿Sabéis por qué pasa esto? Yo no consigo entenderlo. Muchas gracias! Link to comment Share on other sites More sharing options...
tamu secreto Posted April 5, 2014 Share Posted April 5, 2014 Pues esto en el post que mensicona esta mal, observe hay dos aperturas (( : {foreach from=$combinations key=idCombination item=combination} addCombination( ({$idCombination|intval}, new Array({$combination.list}), {$combination.quantity}, {$combination.price}, {$combination.ecotax}, {$combination.id_image}, '{$combination.reference|addslashes}', {$combination.unit_impact}, {$combination.minimal_quantity}); {/foreach} en su ejemplo, pruebe quitando las comillas simples. de todos modos es extraño que se haga un blucle a addCombination de esta forma, creo que deberia aplicar el foreach al conetenido de addCombination, de ser valido obvio. saludos Link to comment Share on other sites More sharing options...
morgoth Posted April 5, 2014 Author Share Posted April 5, 2014 Pues esto en el post que mensicona esta mal, observe hay dos aperturas (( : {foreach from=$combinations key=idCombination item=combination} addCombination( ({$idCombination|intval}, new Array({$combination.list}), {$combination.quantity}, {$combination.price}, {$combination.ecotax}, {$combination.id_image}, '{$combination.reference|addslashes}', {$combination.unit_impact}, {$combination.minimal_quantity}); {/foreach} en su ejemplo, pruebe quitando las comillas simples. de todos modos es extraño que se haga un blucle a addCombination de esta forma, creo que deberia aplicar el foreach al conetenido de addCombination, de ser valido obvio. saludos Muchas gracias por contestar "tamu secreto". Efectivamente quitando las comillas como indicas la columna de "categorías" ha vuelto a aparecer para el producto personalizado, pero entonces pierdo varias funcionalidades como por ejemplo la de guardar el texto personalizado en el momento que se añade al carrito. Link to comment Share on other sites More sharing options...
tamu secreto Posted April 6, 2014 Share Posted April 6, 2014 Pues seria mas sencillo ayudarlo si me explica que desea hacer El codigo que expone el post a que hace referencia tiene algunos errores incluso no se si encuadran las condicionales. observe que otro error es este: {foreach from=$customizationFields item='field' name='customizationFields'} {assign var="key" value="pictures_`$product->id`_`$field.id_customization_field`"} DEBRIA SER {foreach from=$customizationFields item='field' name='customizationFields'} {assign var="key" value="pictures_{$product->id}_{$field.id_customization_field}"} Si lo que busca es mostrar todo el contenido de la personalizacion en el box del carrito en PS 1.4.x , pues: habra el archivo blockcart.tpl ubicado en modules/blockcart , busque en ese archivo esto : <!-- Customizable datas --> añada justo despues de eso esto: {if isset($customizedDatas.$productId.$productAttributeId)} <p><b style="color:#000">{l s='Personalizados' mod='blockcart'}</b></p> {foreach from=$customizedDatas.$productId.$productAttributeId item='customization' key='customizationId'} {foreach from=$customization.datas key='type' item='datas'} {if $type == $CUSTOMIZE_FILE} <ul class="customizationUploaded"> {foreach from=$datas item='data'} <li><img src="{$pic_dir}{$data.value}_small" alt="" class="customizationUploaded" /></li> {/foreach} </ul> {elseif $type == $CUSTOMIZE_TEXTFIELD} <ul class="typedText">{counter start=0 print=false} {foreach from=$datas item='data'} {assign var='customizationFieldName' value="Text #"|cat:$data.id_customization_field} <li>{$data.name|default:$customizationFieldName}{l s=':'} {$data.value}</li> {/foreach} </ul> {/if} {/foreach} {/foreach} {/if} ahora si lo que quiere es cargar todo al momento de añadir al carrito, pues solo debe adicionar los campos de formularios dentro del formulario que envia a la cesta. No hace falta todo lo que indican en ese post. Obviamente, lo que le indico solo funcionara en archivos tpl, originales sin modificaciones anteriores. saludos Link to comment Share on other sites More sharing options...
morgoth Posted April 6, 2014 Author Share Posted April 6, 2014 Pues seria mas sencillo ayudarlo si me explica que desea hacer El codigo que expone el post a que hace referencia tiene algunos errores incluso no se si encuadran las condicionales. observe que otro error es este: {foreach from=$customizationFields item='field' name='customizationFields'} {assign var="key" value="pictures_`$product->id`_`$field.id_customization_field`"} DEBRIA SER {foreach from=$customizationFields item='field' name='customizationFields'} {assign var="key" value="pictures_{$product->id}_{$field.id_customization_field}"} Si lo que busca es mostrar todo el contenido de la personalizacion en el box del carrito en PS 1.4.x , pues: habra el archivo blockcart.tpl ubicado en modules/blockcart , busque en ese archivo esto : <!-- Customizable datas --> añada justo despues de eso esto: {if isset($customizedDatas.$productId.$productAttributeId)} <p><b style="color:#000">{l s='Personalizados' mod='blockcart'}</b></p> {foreach from=$customizedDatas.$productId.$productAttributeId item='customization' key='customizationId'} {foreach from=$customization.datas key='type' item='datas'} {if $type == $CUSTOMIZE_FILE} <ul class="customizationUploaded"> {foreach from=$datas item='data'} <li><img src="{$pic_dir}{$data.value}_small" alt="" class="customizationUploaded" /></li> {/foreach} </ul> {elseif $type == $CUSTOMIZE_TEXTFIELD} <ul class="typedText">{counter start=0 print=false} {foreach from=$datas item='data'} {assign var='customizationFieldName' value="Text #"|cat:$data.id_customization_field} <li>{$data.name|default:$customizationFieldName}{l s=':'} {$data.value}</li> {/foreach} </ul> {/if} {/foreach} {/foreach} {/if} ahora si lo que quiere es cargar todo al momento de añadir al carrito, pues solo debe adicionar los campos de formularios dentro del formulario que envia a la cesta. No hace falta todo lo que indican en ese post. Obviamente, lo que le indico solo funcionara en archivos tpl, originales sin modificaciones anteriores. saludos Hola, Lo que quiero conseguir es que en los productos personalizados, la información se guarde automáticamente en el momento de darle al botón de Añadir al Carrito. Cuando comentas: ahora si lo que quiere es cargar todo al momento de añadir al carrito, pues solo debe adicionar los campos de formularios dentro del formulario que envia a la cesta. Cómo puedo hacer eso? Muchas gracias por la ayuda. Link to comment Share on other sites More sharing options...
tamu secreto Posted April 6, 2014 Share Posted April 6, 2014 Primero yo no se mucho de esto, y sobre todo me cuesta explicar, asi que tratare de darle un rumbo, luego usted tendra que hacerlo o buscar la forma. Tiene que enteder como funciona un formulario, mas que nada atributo “action” del mismo. No es logico hacer lo que muestran en el post que usted indica, ya que en la pagina producto.tpl hay varios formularios y cada uno posee su propia accion. en el directorio controller seguramente encontrara el validador que se encarga de recibir los datos de la personalizacion, y que rellena el atributo action del formulario de personalizados de la pagina producto.tpl Ahora para hacer lo que usted necesita (es solo una idea mia) debe respectar la estructura de validacion de prestashop, para ello lo mas logico seria que respecte el sentido comun de la arquitectura de product.tpl , esta esta da mas o menos asi: 1- si hay personalizados para el producto, se los muestra 2- si el cliente desea la personalizacion, debe enviarla antes de cargar el producto al carrito. 3- una vez guadada la personalizacion el cliente puede cargar el producto a la cesta y conjuntamente se cargan los datos de la personalizacion Ahora una forma de respetar esto seria utilizando ajax o jquery para enviar los datos de la personalizacion, de esta manera cuando el cliente carga su personalizacion no sera necesario guardarlas por que mediante ajax o jquery ya han sido guardados . o sea cuando le de al boton adicionar al carrito se cargaran los datos de la personalizacion, de esta manera se evita el paso de guardar. en conclusion, a mi enteder es la mejor opcion, pero recuerde que no entiendo mucho de esto saludos Link to comment Share on other sites More sharing options...
morgoth Posted April 6, 2014 Author Share Posted April 6, 2014 Gracias por ayuda tamu secreto. Link to comment Share on other sites More sharing options...
Recommended Posts