{"id":2256,"date":"2012-03-17T12:02:58","date_gmt":"2012-03-17T12:02:58","guid":{"rendered":"https:\/\/www.jose-aguilar.com\/blog\/?p=2256"},"modified":"2014-11-20T20:41:52","modified_gmt":"2014-11-20T20:41:52","slug":"crear-un-modulo-para-prestashop","status":"publish","type":"post","link":"https:\/\/www.jose-aguilar.com\/blog\/crear-un-modulo-para-prestashop\/","title":{"rendered":"Crear un m\u00f3dulo para Prestashop"},"content":{"rendered":"<p>Prestashop se basa en el modelo <strong>MVC<\/strong> (Modelo, Vista, Controlador) para gestionar la informaci\u00f3n.<\/p>\n<p><strong>Modelo-&gt;<\/strong> Son todos los objetos que extienden la clase base \u201cObjectModel\u201d, que define las funciones y comportamiento est\u00e1ndar para gestionar las tablas de prestashop y la base para el soporte multilenguaje.<\/p>\n<p><strong>Vista-&gt;<\/strong> Implementada mediante las plantillas de Smarty, que se encargan de gestionar la presentaci\u00f3n de datos en pantalla.<\/p>\n<p><strong>Controlador-&gt; <\/strong>Son las clases que se encargan de la gestion del flujo de datos, recuperan los datos del modelo y los env\u00edan a la vista. Se encuentran en el directorio base de la aplicaci\u00f3n y se corresponden con las p\u00e1ginas principales del proyecto.<\/p>\n<p>Dado que cualquier cambio en esta arquitectura ser\u00eda elevadamente dif\u00edcil de controlar y actualizar con las diferentes nuevas versiones del producto, la soluci\u00f3n se encuentra en crear m\u00f3dulos, que utilizan las funciones y recursos del n\u00facleo de la aplicaci\u00f3n sin interferir en ella.<\/p>\n<p>El objetivo de este art\u00edculo es proporcionar una forma sencilla de crear nuevos m\u00f3dulos para la soluci\u00f3n de comercio electr\u00f3nico Prestashop mediante la creaci\u00f3n de un \u00abpatr\u00f3n de dise\u00f1o\u00bb para la estructura de un m\u00f3dulo.<\/p>\n<p>Prestashop tiene la capacidad de incorporar nuevos m\u00f3dulos a los ya existentes.<\/p>\n<p>La organizaci\u00f3n de Prestashop permite modificar tanto la parte visible (Front end) como la parte de administraci\u00f3n (Back office).<\/p>\n<p>Dentro de la estructura de directorio del proyecto Prestashop, la parte que nos interesa es el directorio \u00abmodules\u00bb. En este directorio tenemos todos los m\u00f3dulos que tiene incorporados nuestra tienda.<\/p>\n<p>Estos m\u00f3dulos se dividen en varios tipos de m\u00f3dulos, hay m\u00f3dulos &#8216; block &#8216; que representan en s\u00ed mismos un tipo de objeto utilizable y tambi\u00e9n hay m\u00f3dulos m\u00e1s \u00abGen\u00e9ricos\u00bb.<\/p>\n<p>Todos los m\u00f3dulos est\u00e1n organizados de la misma manera, haciendo as\u00ed m\u00e1s sencillo crear un nuevo m\u00f3dulo. Se podr\u00eda hablar de un \u00abpatr\u00f3n\u00bb de los m\u00f3dulos Prestashop. Y este es relativamente simple.<\/p>\n<p>Todo m\u00f3dulo incluye como m\u00ednimo un archivo &lt;nombreM\u00f3dulo&gt;.php y otro<br \/>\n&lt;nombreM\u00f3dulo&gt;.tpl. Con estos dos archivos es suficiente para crear un nuevo m\u00f3dulo.<\/p>\n<p>En el directorio de un m\u00f3dulo, se podr\u00eda tambi\u00e9n observar la presencia de un archivo logo.gif que va a ser el icono que se muestre en la tabla de m\u00f3dulos de administraci\u00f3n (Back office).<\/p>\n<p>Encontramos tambi\u00e9n otros archivos (script php) representados con abreviaturas de c\u00f3digos de pa\u00edses representando los idiomas o traducciones del m\u00f3dulo:<\/p>\n<p>es:Espa\u00f1ol<br \/>\nen:Ingl\u00e9s<br \/>\nfr.:Franc\u00e9s<br \/>\nd:Alem\u00e1n<br \/>\nnl:Holand\u00e9s<br \/>\n..<\/p>\n<p>Estos archivos de idiomas, para ser utilizados en las traducciones, deben encontrarse en el directorio ra\u00edz del m\u00f3dulo. Prestashop no los encontrar\u00e1 si se encuentran por ejemplo en los subdirectorios.<\/p>\n<p>A nivel pr\u00e1ctico, lo mejor es construir su m\u00f3dulo con un idioma de \u00abreferencia\u00bb y a trav\u00e9s del Back office utilizar la herramienta de \u00abtraducci\u00f3n\u00bb para editar otros idiomas y guardar sus expresiones traducidas.<\/p>\n<p>En las plantillas, la sintaxis de la llamada es un poco diferente a las expresiones generales:<\/p>\n<pre>{l s = 'la expresi\u00f3n' mod = 'Unmodule'}<\/pre>\n<p>Si no se pone el atributo mod, la expresi\u00f3n no se traducir\u00e1 correctamente.<\/p>\n<h3>Como vamos a construir el c\u00f3digo general de nuestro m\u00f3dulo?<\/h3>\n<p>Nuestra clase m\u00f3dulo va a heredar de la clase Module (prestashop\/clases\/Module.php) y, por tanto, ya tendr\u00e1 unas pocas propiedades y m\u00e9todos desde el principio.<\/p>\n<p>Vamos a mostrar un c\u00f3digo b\u00e1sico para un nuevo m\u00f3dulo:<\/p>\n<pre>&lt;?php\r\nclass UnModule extends Module {\r\n\r\n\u00a0\u00a0 \u00a0public function __construct() {\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$this-&gt;name = 'unmodule';\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$this-&gt;tab = 'front_office_features';\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$this-&gt;version = 1.0;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$this-&gt;author = 'Jose Aguilar';\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0parent::__construct();\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$this-&gt;page = basename(__FILE__, '.php');\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$this-&gt;displayName = $this-&gt;l('Titulo del modulo');\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0$this-&gt;description = $this-&gt;l('Descripcion del modulo');\r\n\u00a0\u00a0 \u00a0}\r\n\r\n   public function install() {\r\n      if(parent::install() == false)\r\n         return false;\r\n      return true;\r\n   }\r\n}\r\n?&gt;<\/pre>\n<p>Como vemos, para crear m\u00f3dulos va a ser imprescindible que tengamos conocimientos en programaci\u00f3n orientada a objetos ya que vamos a tener que trabajar con clases.<\/p>\n<p>Para acceder a la configuraci\u00f3n del m\u00f3dulo, se debe a\u00f1adir el siguiente m\u00e9todo a nuestro m\u00f3dulo:<\/p>\n<pre>public function getContent () {\r\n   \/\/ Instruciones \u2026\r\n}<\/pre>\n<p>Este poco c\u00f3digo, a\u00f1ade en el Back office un enlace hacia la p\u00e1gina de configuraci\u00f3n asociada.<\/p>\n<p>Si se sigue el enlace \u00abConfiguraci\u00f3n &gt;&gt;\u00bb que aparece en el m\u00f3dulo, la p\u00e1gina destino estar\u00e1 vac\u00eda de momento.<\/p>\n<p>Con este poco c\u00f3digo ya conseguimos que en la administraci\u00f3n tengamos disponible nuestro m\u00f3dulo.<\/p>\n<p><a href=\"https:\/\/www.jose-aguilar.com\/blog\/wp-content\/uploads\/2012\/03\/modadmin.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-2313\" title=\"modadmin\" src=\"https:\/\/www.jose-aguilar.com\/blog\/wp-content\/uploads\/2012\/03\/modadmin.png\" alt=\"\" width=\"933\" height=\"100\" srcset=\"https:\/\/www.jose-aguilar.com\/blog\/wp-content\/uploads\/2012\/03\/modadmin.png 933w, https:\/\/www.jose-aguilar.com\/blog\/wp-content\/uploads\/2012\/03\/modadmin-300x32.png 300w\" sizes=\"auto, (max-width: 933px) 100vw, 933px\" \/><\/a><\/p>\n<p>Para que un m\u00f3dulo se \u00aba\u00f1ada\u00bb a una parte de \u00abFront office\u00bb deber\u00e1 referirse a un \u00abgancho\u00bb (Hook) que debe existir en la tabla Prestashop del mismo nombre.<\/p>\n<p>Las tablas de Hook presentes en Prestashop son:<\/p>\n<p>1. payment<br \/>\n2. newOrder<br \/>\n3. paymentConfirm<br \/>\n4. paymentReturn<br \/>\n5. updateQuantity<br \/>\n6. rightColumn<br \/>\n7. leftColumn<br \/>\n8. home<br \/>\n9. header<br \/>\n10. cart<br \/>\n11. authentication<br \/>\n12. addproduct<br \/>\n13. updateproduct<br \/>\n14. top<br \/>\n15. extra<br \/>\n16. deleteproduct<br \/>\n17. productfooter<br \/>\n18. invoice<br \/>\n19. updateOrderStatus<br \/>\n20. adminOrder<br \/>\n21. footer<br \/>\n22. PDFInvoice<br \/>\n23. adminCustomers<br \/>\n24. orderConfirmation<br \/>\n25. createAccount<br \/>\n26. customerAccount<br \/>\n27. orderSlip<br \/>\n28. productTab<br \/>\n29. productTabContent<br \/>\n30. shoppingCart<\/p>\n<p>Podr\u00edamos a\u00f1adir la siguiente funci\u00f3n a nuestro m\u00f3dulo:<\/p>\n<pre>function hookDisplayLeftColumn($params) {\r\n\r\n   return $this-&gt;display(__FILE__, 'unmodule.tpl');\r\n} \r\n\r\nfunction hookDisplayRightColumn($params) {\r\n   return $this-&gt;hookDisplayLeftColumn($params);\r\n}<\/pre>\n<p>Uno de los puntos m\u00e1s importante es la \u201cllamada\u201d, de nuestro m\u00f3dulo a ciertas partes del Front office (en el caso de ser necesario obviamente).<\/p>\n<p>Para hacer un m\u00f3dulo visible en la parte front office, debemos instalar el nuevo m\u00f3dulo y posicionarlo dentro del hook que deseemos siempre teniendo en cuenta que en el caso de este ejemplo solo hemos a\u00f1adido 2 funciones: \u00abhookRightColumn\u00bb y \u00abhookLeftColumn\u00bb, por tanto, este m\u00f3dulo solo podr\u00e1 posicionarse en una de las 2 columnas de la tienda.<\/p>\n<p>Ahora deber\u00edamos crear un archivo .tpl para mostrar nuestro m\u00f3dulo en el front office. Por norma, el archivo debe contener el mismo nombre que el archivo php pero podr\u00edamos llamarle de cualquier forma, mientras hagamos la llamada correcta dentro del archivo .php.<\/p>\n<p>El archivo \u00abunmodule.tpl\u00bb contendr\u00e1 el c\u00f3digo HTML que se visualizar\u00e1 en el Front office.<\/p>\n<p>Para a\u00f1adir estilos o c\u00f3digo CSS a un m\u00f3dulo deberemos a\u00f1adir la siguiente funci\u00f3n al m\u00f3dulo:<\/p>\n<pre>public function hookDisplayHeader($params) {\r\n   $this-&gt;context-&gt;controller-&gt;addCSS($this-&gt;_path.'css\/unmodule.css', 'all');\r\n}\r\n<\/pre>\n<p>Crea un directorio css en el directorio de tu m\u00f3dulo y a\u00f1adir un archivo .css\u00a0 con los estilos que utilizar\u00e1 el m\u00f3dulo.<\/p>\n<p>Y ahora solo faltan ideas para crear nuevas funcionalidades.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Prestashop se basa en el modelo MVC (Modelo, Vista, Controlador) para gestionar la informaci\u00f3n. Modelo-&gt; Son todos los objetos que extienden la clase base \u201cObjectModel\u201d, que define las funciones y comportamiento est\u00e1ndar para gestionar las tablas de prestashop y la base para el soporte multilenguaje. Vista-&gt; Implementada mediante las plantillas de Smarty, que se encargan [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":5817,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[21],"tags":[124],"class_list":["post-2256","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-prestashop","tag-modulos-prestashop"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Crear un m\u00f3dulo para Prestashop - Jose Aguilar Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Crear un m\u00f3dulo para Prestashop - Jose Aguilar Blog\" \/>\n<meta property=\"og:description\" content=\"Prestashop se basa en el modelo MVC (Modelo, Vista, Controlador) para gestionar la informaci\u00f3n. Modelo-&gt; Son todos los objetos que extienden la clase base \u201cObjectModel\u201d, que define las funciones y comportamiento est\u00e1ndar para gestionar las tablas de prestashop y la base para el soporte multilenguaje. Vista-&gt; Implementada mediante las plantillas de Smarty, que se encargan [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.jose-aguilar.com\/blog\/crear-un-modulo-para-prestashop\/\" \/>\n<meta property=\"og:site_name\" content=\"Jose Aguilar Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/joseaguilarblog\" \/>\n<meta property=\"article:published_time\" content=\"2012-03-17T12:02:58+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2014-11-20T20:41:52+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.jose-aguilar.com\/blog\/wp-content\/uploads\/2013\/02\/prestashop3-200x200.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"200\" \/>\n\t<meta property=\"og:image:height\" content=\"200\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Jose Aguilar\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@JoseAguilarBlog\" \/>\n<meta name=\"twitter:site\" content=\"@JoseAguilarBlog\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jose Aguilar\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.jose-aguilar.com\/blog\/crear-un-modulo-para-prestashop\/\",\"url\":\"https:\/\/www.jose-aguilar.com\/blog\/crear-un-modulo-para-prestashop\/\",\"name\":\"Crear un m\u00f3dulo para Prestashop - Jose Aguilar Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.jose-aguilar.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.jose-aguilar.com\/blog\/crear-un-modulo-para-prestashop\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.jose-aguilar.com\/blog\/crear-un-modulo-para-prestashop\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.jose-aguilar.com\/blog\/wp-content\/uploads\/2013\/02\/prestashop3-200x200.jpg\",\"datePublished\":\"2012-03-17T12:02:58+00:00\",\"dateModified\":\"2014-11-20T20:41:52+00:00\",\"author\":{\"@id\":\"https:\/\/www.jose-aguilar.com\/blog\/#\/schema\/person\/e6d485db1e1140866e95971d17105d11\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.jose-aguilar.com\/blog\/crear-un-modulo-para-prestashop\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.jose-aguilar.com\/blog\/crear-un-modulo-para-prestashop\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.jose-aguilar.com\/blog\/crear-un-modulo-para-prestashop\/#primaryimage\",\"url\":\"https:\/\/www.jose-aguilar.com\/blog\/wp-content\/uploads\/2013\/02\/prestashop3-200x200.jpg\",\"contentUrl\":\"https:\/\/www.jose-aguilar.com\/blog\/wp-content\/uploads\/2013\/02\/prestashop3-200x200.jpg\",\"width\":200,\"height\":200},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.jose-aguilar.com\/blog\/crear-un-modulo-para-prestashop\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\/\/www.jose-aguilar.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Crear un m\u00f3dulo para Prestashop\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.jose-aguilar.com\/blog\/#website\",\"url\":\"https:\/\/www.jose-aguilar.com\/blog\/\",\"name\":\"Jose Aguilar Blog\",\"description\":\"Desarrollo Web con PrestaShop, WordPress, PHP, jQuery y Ajax\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.jose-aguilar.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.jose-aguilar.com\/blog\/#\/schema\/person\/e6d485db1e1140866e95971d17105d11\",\"name\":\"Jose Aguilar\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.jose-aguilar.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/abbfef5f1d75260c549d0f2c2842bb697ba1aadff3b2836b39d2590c8a625415?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/abbfef5f1d75260c549d0f2c2842bb697ba1aadff3b2836b39d2590c8a625415?s=96&d=mm&r=g\",\"caption\":\"Jose Aguilar\"},\"description\":\"Director ejecutivo y tecnol\u00f3gico en JA Modules. Experto programador PrestaShop y Experto programador WordPress.\",\"sameAs\":[\"https:\/\/plus.google.com\/114357189801512615537\"],\"url\":\"https:\/\/www.jose-aguilar.com\/blog\/author\/josea902\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Crear un m\u00f3dulo para Prestashop - Jose Aguilar Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"og_locale":"es_ES","og_type":"article","og_title":"Crear un m\u00f3dulo para Prestashop - Jose Aguilar Blog","og_description":"Prestashop se basa en el modelo MVC (Modelo, Vista, Controlador) para gestionar la informaci\u00f3n. Modelo-&gt; Son todos los objetos que extienden la clase base \u201cObjectModel\u201d, que define las funciones y comportamiento est\u00e1ndar para gestionar las tablas de prestashop y la base para el soporte multilenguaje. Vista-&gt; Implementada mediante las plantillas de Smarty, que se encargan [&hellip;]","og_url":"https:\/\/www.jose-aguilar.com\/blog\/crear-un-modulo-para-prestashop\/","og_site_name":"Jose Aguilar Blog","article_publisher":"https:\/\/www.facebook.com\/joseaguilarblog","article_published_time":"2012-03-17T12:02:58+00:00","article_modified_time":"2014-11-20T20:41:52+00:00","og_image":[{"width":200,"height":200,"url":"https:\/\/www.jose-aguilar.com\/blog\/wp-content\/uploads\/2013\/02\/prestashop3-200x200.jpg","type":"image\/jpeg"}],"author":"Jose Aguilar","twitter_card":"summary_large_image","twitter_creator":"@JoseAguilarBlog","twitter_site":"@JoseAguilarBlog","twitter_misc":{"Escrito por":"Jose Aguilar","Tiempo de lectura":"6 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.jose-aguilar.com\/blog\/crear-un-modulo-para-prestashop\/","url":"https:\/\/www.jose-aguilar.com\/blog\/crear-un-modulo-para-prestashop\/","name":"Crear un m\u00f3dulo para Prestashop - Jose Aguilar Blog","isPartOf":{"@id":"https:\/\/www.jose-aguilar.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.jose-aguilar.com\/blog\/crear-un-modulo-para-prestashop\/#primaryimage"},"image":{"@id":"https:\/\/www.jose-aguilar.com\/blog\/crear-un-modulo-para-prestashop\/#primaryimage"},"thumbnailUrl":"https:\/\/www.jose-aguilar.com\/blog\/wp-content\/uploads\/2013\/02\/prestashop3-200x200.jpg","datePublished":"2012-03-17T12:02:58+00:00","dateModified":"2014-11-20T20:41:52+00:00","author":{"@id":"https:\/\/www.jose-aguilar.com\/blog\/#\/schema\/person\/e6d485db1e1140866e95971d17105d11"},"breadcrumb":{"@id":"https:\/\/www.jose-aguilar.com\/blog\/crear-un-modulo-para-prestashop\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.jose-aguilar.com\/blog\/crear-un-modulo-para-prestashop\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.jose-aguilar.com\/blog\/crear-un-modulo-para-prestashop\/#primaryimage","url":"https:\/\/www.jose-aguilar.com\/blog\/wp-content\/uploads\/2013\/02\/prestashop3-200x200.jpg","contentUrl":"https:\/\/www.jose-aguilar.com\/blog\/wp-content\/uploads\/2013\/02\/prestashop3-200x200.jpg","width":200,"height":200},{"@type":"BreadcrumbList","@id":"https:\/\/www.jose-aguilar.com\/blog\/crear-un-modulo-para-prestashop\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/www.jose-aguilar.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Crear un m\u00f3dulo para Prestashop"}]},{"@type":"WebSite","@id":"https:\/\/www.jose-aguilar.com\/blog\/#website","url":"https:\/\/www.jose-aguilar.com\/blog\/","name":"Jose Aguilar Blog","description":"Desarrollo Web con PrestaShop, WordPress, PHP, jQuery y Ajax","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.jose-aguilar.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/www.jose-aguilar.com\/blog\/#\/schema\/person\/e6d485db1e1140866e95971d17105d11","name":"Jose Aguilar","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.jose-aguilar.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/abbfef5f1d75260c549d0f2c2842bb697ba1aadff3b2836b39d2590c8a625415?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/abbfef5f1d75260c549d0f2c2842bb697ba1aadff3b2836b39d2590c8a625415?s=96&d=mm&r=g","caption":"Jose Aguilar"},"description":"Director ejecutivo y tecnol\u00f3gico en JA Modules. Experto programador PrestaShop y Experto programador WordPress.","sameAs":["https:\/\/plus.google.com\/114357189801512615537"],"url":"https:\/\/www.jose-aguilar.com\/blog\/author\/josea902\/"}]}},"_links":{"self":[{"href":"https:\/\/www.jose-aguilar.com\/blog\/wp-json\/wp\/v2\/posts\/2256","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.jose-aguilar.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.jose-aguilar.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.jose-aguilar.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.jose-aguilar.com\/blog\/wp-json\/wp\/v2\/comments?post=2256"}],"version-history":[{"count":0,"href":"https:\/\/www.jose-aguilar.com\/blog\/wp-json\/wp\/v2\/posts\/2256\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.jose-aguilar.com\/blog\/wp-json\/wp\/v2\/media\/5817"}],"wp:attachment":[{"href":"https:\/\/www.jose-aguilar.com\/blog\/wp-json\/wp\/v2\/media?parent=2256"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.jose-aguilar.com\/blog\/wp-json\/wp\/v2\/categories?post=2256"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.jose-aguilar.com\/blog\/wp-json\/wp\/v2\/tags?post=2256"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}