Campo extra en categoría Prestashop 1.6 o inferiores

En este post os quiero explicar como añadir un campo extra en las categorías, yo lo que quiero añadir es un textarea con funciones de negrita,subrayado…, pero este tutorial os valdrá para otros campos, como un input simple.

Empezamos, primero de todo nos dirigimos a \override\classes\Category.php(si no existe lo creáis), así no modificaremos la clase original y para futuras actualizaciones de prestashop no perderemos lo que vamos hacer. Pero se podría hacer perfectamente en classes\Category.php, pero de una manera diferente.
En el archivo Category.php añadiremos esto:

class Category extends CategoryCore {

    //put your code here
    public $extra_description;
    public function __construct($id_category = null, $id_lang = null, $id_shop = null)
    {
            
            self::$definition['fields']['extra_description'] = array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isString');
            parent::__construct($id_category, $id_lang, $id_shop);
    }
    
}

Lo que estamos añadiendo es el campo extra_description, en la array padre que es Category.php, de classes.(si vais alli dentro de fields, podreis comprobar tiene un array, esta es la que estamos incluyendo nuestro extra_description)

Ahora vamos a nuestro phpmyadmin, buscamos la tabla ps_category_lang y en ella nos dirigimos a estructura y añadimos un campo nuevo llamado extra_description tipo TEXT, guardamos y ya podemos cerrar phpmyadmin.

Captura

Nos dirigimos ahora hacia \controllers\admin\AdminCategoriesController.php y añadiremos nuestro textarea,el código de abajo lo tendréis que añadir debajo del textarea anterior(podeis buscar ctrl+f o cmd+f y buscar textarea, si os fijais lleva una estructura cada campo de array(), entonces nuestro nuevo array lo metemos detras de la array(description), ), con el código siguiente:

array(
    'type' => 'textarea',
   'label' => $this->l('Extra Description:'),
   'name' => 'extra_description',
   'autoload_rte' => true,
   'lang' => true,
   'rows' => 10,
   'cols' => 100,
   'hint' => $this->l('Invalid characters:').' <>;=#{}'
),

Con esto ya tenemos en nuestro panel de administración nuestro textarea con funciones de subrayar, negrita …

Captura1
Ahora solo nos queda mostrarlo entonces nos dirigimos a \themes\default\category.tpl y copiamos el siguiente código,donde queramos mostrar este nuevo campo:

{if $category->extra_description}
{$category->extra_description}
{/if}

En esta imagen podemos observar el resultado:

Captura3

Espero que os haya gustado, cualquier cosa no dudéis en comentar. Os dejo los archivos para que los podáis descargar  

Saludos y gracias.

Summary
Review Date
Author Rating
51star1star1star1star1star

Comentarios:

  1. Juan Carlos

    Hola buenas noches!!
    Excelente artículo!! Pero no me quedado muy claro el último paso. Dónde hay que copiar exactamente el código siguiente? En que línea?

    {if $category->extra_description}
    {$category->extra_description}

    {/if}

    un saludo!!

    Responder
    1. David Gutiérrez Autor

      Hola Juan Carlos, lo tendrías que copiarlo en el category.tpl en cualquier parte por ejemplo lo puedes poner debajo de la otra descripción o debajo de la lista de los productos, cualquier zona del category.tpl valdría. Solamente te tienes que ir guiando por las etiquetas html.

      Cualquier cosa me dices, espero que te haya solucionado la duda.

      Responder
  2. Maria

    Todo bien, pero no logro que se guarde lo que escribo en la descripción extra, no da ningún error pero cuando vuelvo a entrar en la categoría lo que he escrito no aparece, vamos que está en blanco como si no he escrito nada. Sabrías decirme que me está pasando.
    Un saludo;

    Responder
  3. David Gutiérrez Autor

    En principio tendría que funcionaros sin ningún problema. Si puedes ser más concreto con el problema lo revisamos.

    Saludos.

    Responder
  4. Javier

    Hola David, excelente aportación, pero a mi me pasa igual, no consigo que se guarde en la bbdd.

    Y entonces en la pagina da un error:
    Notice: Undefined property: Category::$extra_description in /home/floresveronica/public_html/tools/smarty/sysplugins/smarty_internal_templatebase.php(171) : eval()’d code on line 98
    Gracias, Javier

    Responder
  5. Pau

    Buenas! He seguido tu tutorial y tengo un problemilla…. no me crea el campo textarea en el backend.
    La versión de presta es 1.6.1.4
    En el front end si que parece que ha creado algo ya que ha creado una separación donde yo le he asignado el camp extra_description

    Responder
    1. David Gutiérrez Autor

      Es raro, porque esta probado en todas las versiones y me ha funcionado, realiza todos los pasos de nuevo a ver si te has dejado algo.

      Saludos

      Responder
  6. Miguel

    Hola!
    Muchas gracias por este tutorial
    Mi problema es el mismo que comentan, escribo en el campo extra_description de la categoría pero cuando vuelvo a entrar no hay nada, no se guarda. Mi problema es que no tengo en cache ningún archivo class_index.php por lo que no se que hacer

    Responder
    1. David Gutiérrez Autor

      Debería salir-le un archivo en cache/class_index.php en todos los prestashop esta. Si no prueba a crear el cache por si lo tienes desactivado o algo, pero ya le digo es raro.

      Saludos

      Responder
  7. Ana

    Buenas tardes,

    lo primero felicidades por el post.
    Tengo una duda, porque yo no quiero que la extra descripción me aparezca debajo de la descripción normal, si no debajo de los productos de esa categoría.
    Tendría que hacerlo como módulo nuevo, no como ampliación del que ya existe?

    Gracias y un saludo

    Responder
  8. Ana

    Perdona David, estoy un poco espesa, me he contestado sola a la pregunta tonta que he hecho nada más abrir el archivo category.tpl

    De nuevo felicidades por el artículo 😉

    Responder
  9. Cesar

    Hola David, llevaba tiempo buscando está solución y menos mal que he dado con un web y este enlace desde el foto de Prestashop, el caso es que he creado el campo de descripción extra en el backend pero cuando relleno algo de texto y le doy al guardar no me guarda lo que habia puesta.

    Tengo el mismo problema comentado arriba no tengo ningun archivo en cache/class_index.php, utilizo PS 1,6.0.9 con un tema diferente al default y tengo la cache activada, alguna solución??, gracias por este gran tuto 🙂

    Responder
  10. César

    Hola David, lo he intentado todo y nada, no se guarda lo que escribo en el campo de descripción estra dentro del backoffice, no tengo ningun archivo en cache/class_index.php así que lo he creado, despues desactive la cache y la volvi a activar y por ultimo borre el archivo creado anteriormente, pero nada no funciona, he hecho todo pero seguramente estaré fallando en algo, alguna sugerencia???

    Mil gracias.
    César

    Responder
    1. David Gutiérrez Autor

      No entiendo porque no te sale el archivo class_index.php, debería salirte :S Podrías empezar los pasos de nuevo o miramos de alguna manera que te pueda ayudar.

      Saludos

      Responder
  11. Joana García

    Hola David!!

    Primero quiero darte las gracias por el trabajo que te has tomado creando ese campo. Menuda ayuda!!!
    Quiero decirte aunque que me ha costado lo mío (no soy programadora ni nada parecido) he podido instalarlo y que funcione correctamente, pero se me ha generado una duda:

    ¿Cuando haya alguna actualización nueva de prestashop, todas esas modificaciones seguirán ahí? Me daría algo si en la próxima actualización me encuentro que no ha servido de nada todo lo que he hecho.

    Muchísimas gracias por tu tiempo.

    Un saludo.

    Responder
    1. David Gutiérrez Autor

      Hola Joana,

      El botón de actulizar en prestashop es bastante peligroso. De todas maneras si lo haces en el controlador directamente si se borrara. Si lo haces dentro de la carpeta /override/, nada que hagas en esta carpeta se borrara.

      Lo que se suele hacer es poner todo en override.

      De todas maneras te recomiendo tener cuidado con el botón actualizar

      Responder
  12. Sergio

    Buenas, he seguido paso a paso lo que has comentado y funciona a la perfección con Prestashop 1.6.1.3 !!

    Estaba buscando una manera de añadir contenido para google en las categorías y esto sirve de fábula!

    MUCHAS GRACIAS

    Saludos David!

    Responder
  13. Jose Suarez Ochoa

    El problema esta que al principio de Category.php tienen que agregar <?php. Quedaria asi el fichero:

    self::TYPE_HTML, ‘lang’ => true, ‘validate’ => ‘isString’);
    parent::__construct($id_category, $id_lang, $id_shop);
    }

    }

    Responder
  14. Abel

    Buenas tardes,
    En primer lugar, muchas gracias por el post David !!
    Me gustaría saber como poder incorporar texto (descripción) diferente en cada categoría de Prestashop, para poder describir con detalle de lo que trata cada categoría y que además sirva para el posicionamiento de SEO.
     
    No sé si esto que comentas del “campo extra en la categoría”, se refiere exactamente a lo que necesito.
     
    He leído en otros post sobre el módulo “content box”, pero solo sirve para la página de inicio.
     
    Utilizo la versión 1.6.1.2 de Prestashop

    Responder
    1. David Gutiérrez Autor

      Así es Abel, con esto no te haría falta utilizar ningún modulo, si necesitas cualquier cosa para tu tienda me dices o por temas de seo.

      Actualmente estoy llevando un ecommerce así que cualquier cosa me dices!

      Responder
  15. Abel

    Muchas gracias David,
    Estoy siguiendo todos tus pasos, y ya me aparece en las categorías el campo “extra description” para introducir el texto. Pero todo lo que escribo en este nuevo campo, cuando vuelvo a entrar no hay nada.
    He mirado el post que otros usuarios tenían el mismo problema, y he borrado el archivo de cache “class_index.php” tal y como indicas, pero sigue sin quedarse grabado lo que escribo.

    Responder
    1. David Gutiérrez Autor

      Has probado de mirar si esta en la bbdd? prueba también a limpiar todo el cache a parte de eliminar el class_index.php

      Responder
  16. Abel

    Hola David, no entiendo a que te refieres si está en la base de datos? el que?
    Si que he borrado todo el cache a parte de eliminar el class_index.php
    Puede ser porque he puesto al final de todo del archivo category.tpl el siguiente código?
    {if $category->extra_description}
    {$category->extra_description}
    {/if}

    Responder
    1. David Gutiérrez Autor

      En la base de datos es donde almacena todos los datos, deberias ir a la tabla ps_category y ver si se guarda correctamente ahi.

      Si se guarda es algo del fichero .tpl, puede ser cache, intenta eliminarla en las preferencias.

      Saludos

      Responder
  17. Abel

    Perdona David, que mis conocimientos en todo esto son un poco escasos. Cuando voy a la tabla ps_category para ver si está guardado correctamente, en que apartado se mira esto una vez dentro de la tabla ps_category?

    Responder
  18. Abel

    Ah ok David, es que estaba mirando mal la tabla, ya que la correcta es la ps_category_lang verdad? Ahi veo que en la columna extra_description está vacía, no se ha guardado nada.
    Como lo puedo arreglar David? Que paso he hecho mal?

    Responder
    1. David Gutiérrez Autor

      Has probado de limpiar cache? yo me he descargado el fichero de descarga que hay al final del tutorial y me ha funcionado correctamente 🙁

      No entiendo porque no te va a ti…

      Responder
  19. Marcos

    David,

    Tengo el mismo problema, escribo en la caja de extra descripcion en el backoffice en la categoria y no se salva
    Le doy a salvar pero vuelvo a entrar y no esta.

    Que version tienes tu?

    Felicidades por el post.

    Responder
  20. alfonso

    Buenas, funciona perfectamente gracias!!!

    Os aconsejo que os bajéis el archivo colgado y vais copiando el código de ahí, la primera vez lo he hecho siguiendo el tutorial y no me guardaba en la bbdd ni me mostraba en el frontend.

    Gracias!!!

    Responder
  21. Jose

    Buenos tardes,

    Me ha costando un poquito pero al final he conseguido siguiendo su tutorial activar categorías extendidas, mil gracias.
    Pero creo que hay algo que no ha debido de quedar bien del todo, le cuento:

    Tanto descripción corta como extendida me aparece en todas las páginas de la categoría, es decir si la categoría tiene 10 páginas, me aparece en las 10.
    No se si es así o he hecho al mal, yo creo recordar que antes unicamente mostraba la descripción corta de la categoría en la página 1, en el resto no se mostraba.

    No es algo que me moleste, lo que no se es si influirá en temas de Seo, si tiene fácil solución y me puede indicar se lo agradecería.

    Gracias!

    Responder
    1. David Gutiérrez Autor

      Hola Jose,

      En principio por temas seo no tendría ningún problema si le has dicho que la canonical es la página principal. Ya que unicamente debera indexar la página principal, es decir, la canonical. Por ejemplo si tuvieras indexadas páginas de tu sitio podrías verlo con site:dominio.com, aquí te salen todas las páginas que tiene tu sitio. Si hay alguna que sea dominio.com/categoria?p=2 … es que google esta indexando, entonces puede ser que no tengas las canonical puestas o que Google aun no lo ha visto.

      Si necesitas ayuda puedo hacer un tutorial.

      Saludos,

      Responder
  22. Jose

    Gracias David,
    Si que tengo canonical, así que lo dejaré tal y como ha quedado.

    Muchas gracias, me ha sido de gran ayuda este post.

    Responder

Deja un comentario

Tu dirección de correo electrónico no será publicada.