Adrian Posted September 24, 2019 Share Posted September 24, 2019 Hola. Hay alguna manera de editar la factura PDF para que me salga otro campo? Necesito lo siguiente. Ahora me sale esto: Y donde dice producto necesito que salga el campo código ISBN. Es esto posible? Link to comment Share on other sites More sharing options...
Prestafan33 Posted September 24, 2019 Share Posted September 24, 2019 En principio sí que es posible. Mira en /classes/pdf/HTMLTemplateInvoice.php. Seguramente ahí puedas modificarlo. 1 Link to comment Share on other sites More sharing options...
Adrian Posted September 24, 2019 Author Share Posted September 24, 2019 Gracias! Mañana lo miro y te digo algo. Link to comment Share on other sites More sharing options...
Adrian Posted September 25, 2019 Author Share Posted September 25, 2019 (edited) Sabrias que parte tengo que editar @prestafan33? Veo mucho código y no se si sustituir todo los "product" por "isbn" o como sería. Edited September 25, 2019 by Adrian (see edit history) Link to comment Share on other sites More sharing options...
Prestafan33 Posted September 25, 2019 Share Posted September 25, 2019 (edited) Bien, lo he estado mirando con más detenimiento. Creo que el archivo que hay que modificar no es el que te he puesto, sino que es la plantilla PDF, que estaría en /pdf/invoice.product-tab.tpl. Es posible que dentro de tu tema tengas este mismo directorio. Si es así, las modificaciones deberías hacerlas ahí (en /theme/nombre-de-tu-tema/pdf/invoice.product-tab.tpl. Si no tienes ese directorio, deberías copiar el directorio /pdf/ con todo su contenido dentro de la carpeta de tu tema, y luego ya ahí modificar el archivo invoice.product-tab.tpl. Una vez lo tengas ubicado, alrededor de la línea 30 tendrías: <th class="product header small" width="{$layout.product.width}%">{l s='Product' d='Shop.Pdf' pdf='true'}</th> ... y deberías cambiarlo por: <th class="product header small" width="{$layout.product.width}%">{l s='ISBN' d='Shop.Pdf' pdf='true'}</th> y luego en la línea 54: {if $display_product_images} <table width="100%"> <tr> <td width="15%"> {if isset($order_detail.image) && $order_detail.image->id} {$order_detail.image_tag} {/if} </td> <td width="5%"> </td> <td width="80%"> {$order_detail.product_name} </td> </tr> </table> {else} {$order_detail.product_name} {/if} ... modificarlo así: {if $display_product_images} <table width="100%"> <tr> <td width="15%"> {if isset($order_detail.image) && $order_detail.image->id} {$order_detail.image_tag} {/if} </td> <td width="5%"> </td> <td width="80%"> {$order_detail.product_isbn} </td> </tr> </table> {else} {$order_detail.product_isbn} {/if} No lo he probado, pero si en los productos de $order_detail va incluido el ISBN (que creo que sí), debería funcionar. Edited September 25, 2019 by Prestafan33 (see edit history) 1 Link to comment Share on other sites More sharing options...
Adrian Posted September 25, 2019 Author Share Posted September 25, 2019 Gracias Prestafan33. Ahora si que sale la columna ISBN pero por más que pongo un código se queda en blanco. Es algo raro pero por lo menos ya es una avance. Te comento si me sale algo. Link to comment Share on other sites More sharing options...
Prestafan33 Posted September 25, 2019 Share Posted September 25, 2019 1 hour ago, Adrian said: Gracias Prestafan33. Ahora si que sale la columna ISBN pero por más que pongo un código se queda en blanco. Es algo raro pero por lo menos ya es una avance. Te comento si me sale algo. Creo que el nombre del atributo en $order_detail es product_isbn en vez de "isbn" a secas. He actualizado el código arriba (el último bloque). Sólo es cambiar donde había puesto "isbn" por "product_isbn". Mira a ver si así te funciona. 1 Link to comment Share on other sites More sharing options...
Adrian Posted September 25, 2019 Author Share Posted September 25, 2019 (edited) Vale Prestafan33. Eso si que me ha servido! 😅 Ahora una última pregunta, espero no molestarte mucho >.< Sabes donde puedo tocar para poder poner letras en el código ISBN. Estoy intentando "engañar" a prestashop porque en sí no es un código ISBN. Son códigos con números y letras. Sabrias donde modificarlo para que me permita hacer eso? Si me sale eso ya estaría todo Me estas ayudando un montón Edited September 25, 2019 by Adrian (see edit history) Link to comment Share on other sites More sharing options...
Prestafan33 Posted September 25, 2019 Share Posted September 25, 2019 (edited) 15 minutes ago, Adrian said: Ahora una última pregunta, espero no molestarte mucho >.< Sabes donde puedo tocar para poder poner letras en el código ISBN. Estoy intentando "engañar" a prestashop porque en sí no es un código ISBN. Son códigos con números y letras. Sabrias donde modificarlo para que me permita hacer eso? Si me sale eso ya estaría todo En /classes/Product.php, hacia la línea 316, tienes la validación de los campos que componen la clase "producto", concretamente el ISBN está en la línea 335 (en la versión 1.7.5, que es donde lo estoy mirando): 'isbn' => array('type' => self::TYPE_STRING, 'validate' => 'isIsbn', 'size' => 32), si vas a meter algo que sea texto, se podría poner que simplemente validase que sea una cadena alfanumérica y nada más: 'isbn' => array('type' => self::TYPE_STRING, 'validate' => 'isString', 'size' => 32), Si quieres variar la longitud máxima también puedes cambiar el valor de "size". Ten en cuenta que esta modificación se perderá si haces luego una actualización de Prestashop a otra versión. Para que no fuera así habría que hacer un override, extendiendo la clase Product, pero eso ya es un poco más complicado. Edited September 25, 2019 by Prestafan33 (see edit history) 1 Link to comment Share on other sites More sharing options...
Adrian Posted September 25, 2019 Author Share Posted September 25, 2019 Bueno, de momento no tengo pensado hacer ninguna actualización ya que estoy en la version 1.7.4.3 y estoy bastante cómodo y sin problemas. Voy a probar y te digo. Link to comment Share on other sites More sharing options...
Adrian Posted September 25, 2019 Author Share Posted September 25, 2019 De momento me sigue diciendo que no se puede. En mi versión tengo lo mismo que tú pero no en la 300 y pico si no en la línea 100 más o menos. Link to comment Share on other sites More sharing options...
Prestafan33 Posted September 25, 2019 Share Posted September 25, 2019 (edited) Veo que la validación la realiza en más sitios, como en los controladores, y no solo en la clase Product. De modo que tal vez lo más sencillo sea modificar la función "isIsbn", que es la que creo que se utiliza en todas partes. Para ello en /classes/Validate.php, tienes esa función: public static function isIsbn($isbn) { return !$isbn || preg_match('/^[0-9-]{0,32}$/', $isbn); } Lo que hace es comprobar que la cadena sólo contiene números o guiones y que tiene entre 0 y 32 caracteres. Habría que modificar la regex para que realice la validación que quieras. Por ejemplo, si quieres poder incluir también letras (mayúsculas y minúsculas): public static function isIsbn($isbn) { return !$isbn || preg_match('/^[a-zA-Z0-9-]{0,32}$/', $isbn); } Una vez hayas hecho esa modificación, la anterior que te comenté en la clase Product la puedes quitar y dejarlo como estaba. Edited September 25, 2019 by Prestafan33 (see edit history) 1 Link to comment Share on other sites More sharing options...
Adrian Posted September 25, 2019 Author Share Posted September 25, 2019 (edited) Mmmmm parece que no funciona. Me dice que es invalido. Sigo buscando. PD: Me acabo de dar cuenta de que tampoco está detectando que le he puesto 120 carácteres 😢 Edited September 25, 2019 by Adrian (see edit history) Link to comment Share on other sites More sharing options...
Adrian Posted September 25, 2019 Author Share Posted September 25, 2019 return !$isbn || preg_match('/^[a-zA-Z0-9-]{0,120}$/', $isbn); Eso es lo que tengo actualmente Link to comment Share on other sites More sharing options...
Prestafan33 Posted September 25, 2019 Share Posted September 25, 2019 (edited) Los 120 caracteres no te los va a coger a menos que modifiques el campo "isbn" en la tabla de productos de la base de datos, porque tendrá la longitud limitada a 32. Lo de poder introducir letras, con eso que has puesto debería pasar la validación, aunque no sé si en algún otro sitio habrá más comprobaciones adicionales. Edited September 25, 2019 by Prestafan33 (see edit history) 1 Link to comment Share on other sites More sharing options...
Adrian Posted September 25, 2019 Author Share Posted September 25, 2019 Vale, muchas gracias. Miraré que puedo hacer y lo comentaré por aquí. Link to comment Share on other sites More sharing options...
Adrian Posted September 25, 2019 Author Share Posted September 25, 2019 Donde encontraste esa tabla? Disculpas las molestias @Prestafan33 pero es que todos estos temas de "programación" se me escapan por todos lados... Link to comment Share on other sites More sharing options...
Prestafan33 Posted September 25, 2019 Share Posted September 25, 2019 Esa tabla está en la base de datos, es la que se llama ps_product (es posible que tenga otro prefijo diferente de "ps_", eso se elige durante la instalación). 1 Link to comment Share on other sites More sharing options...
Adrian Posted September 25, 2019 Author Share Posted September 25, 2019 (edited) Culpa mia... Estaba buscando en una sola página sin darme cuenta que tenia 7 más. Eso ya esta hecho. Voy a ver si funciona. Sigue sin funcionar. No lo entiendo. Estoy gafado... Y... También he visto que hay más tablas con "isbn" y las estoy cambiando. Veremos. Edited September 25, 2019 by Adrian (see edit history) Link to comment Share on other sites More sharing options...
Adrian Posted September 26, 2019 Author Share Posted September 26, 2019 Pues de momento nada. No lo entiendo Link to comment Share on other sites More sharing options...
Adrian Posted September 26, 2019 Author Share Posted September 26, 2019 (edited) Vale. Si que me funciona desde ayer pero me he equivocado. Yo quiero que me funcione el ISBN de cada combinación. Ahora me funciona el del producto. Producto: (funciona) Combinación: (no funciona) Edited September 26, 2019 by Adrian (see edit history) Link to comment Share on other sites More sharing options...
Prestafan33 Posted September 26, 2019 Share Posted September 26, 2019 Para las combinaciones, tienes que modificar el tamaño del campo "isbn" en la tabla ps_product_attribute. La función de validación que use supongo que sea la misma, por lo que con los cambios de ayer ahí sería suficiente. 1 Link to comment Share on other sites More sharing options...
Adrian Posted September 26, 2019 Author Share Posted September 26, 2019 Mmmmm no, en esa ya lo cambié ayer :s Link to comment Share on other sites More sharing options...
Adrian Posted September 27, 2019 Author Share Posted September 27, 2019 (edited) Vale! Por fin! Solo tenia que cambiar la siguiente configuración! No hacia falta entrar a la BD. src/PrestaShopBundle/Form/Admin/Product/ProductCombination.php Muchas gracias por la ayuda @Prestafan33, de verdad. Edited September 27, 2019 by Adrian (see edit history) Link to comment Share on other sites More sharing options...
Prestafan33 Posted September 27, 2019 Share Posted September 27, 2019 Me alegro que lo hayas resuelto. Ya imaginaba que la validación la estaba realizando en el formulario, ayer estuve mirando los archivos JS del tema admin pensando que estaba ahí, pero no lo localizaba. Pero al final lo has encontrado tú solo, enhorabuena. 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