Jump to content

Recommended Posts

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%">&nbsp;</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 by Prestafan33 (see edit history)
  • Like 1
Link to comment
Share on other sites

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.

  • Like 1
Link to comment
Share on other sites

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 :D

 

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

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 by Prestafan33 (see edit history)
  • Like 1
Link to comment
Share on other sites

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 by Prestafan33 (see edit history)
  • Like 1
Link to comment
Share on other sites

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.

Captura.JPG.46f482b97d51bbf6fbb493ed3e80fd86.JPG

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 by Prestafan33 (see edit history)
  • Like 1
Link to comment
Share on other sites

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

image.png.eb3dfc846d19b5e974882e673d88839a.png

Y...

image.png.002c03a0761d307dcafab5bf419e8210.png

 

También he visto que hay más tablas con "isbn" y las estoy cambiando. Veremos.

Edited by Adrian (see edit history)
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...