Como añadir una página extra en Prestashop

Prestashop ya dispone de muchas páginas para poder crear y diseñar tu tienda pero en ocasiones especiales o extraordinarias puede resultar útil saber como crear una nueva página extra a las ya existentes en Prestashop 1.5.x.

Por ejemplo, imagina que deseas crear otro formulario a parte del que ya existe de contacto (contact-form) con otros campos. Como lo harías?

Una opción es pensar en crear una página CMS añadiendo el código HTML del formulario. Ok, perfecto tenemos el código HTML del formulario pero, como controlamos el envío?

Para estos casos, es necesario crear una nueva página con su controlador y su vista (archivo .tpl) en la plantilla activa.

Lo primero que tendremos que hacer es añadir un nuevo archivo en la raiz del Prestashop con el siguiente contenido:

<?php

require(dirname(__FILE__).'/config/config.inc.php');
Tools::displayFileAsDeprecated();

Tools::redirect('index.php?controller=newpage'.((count($_GET) || count($_POST)) ? '&'.http_build_query(array_merge($_GET, $_POST), '', '&') : ''), __PS_BASE_URI__, null, 'HTTP/1.1 301 Moved Permanently');

Casi todos los archivos que hay en la raiz tienen este mismo contenido. En este caso, lo único que varía es el parámetro controller=newpage.

En este caso, estamos creando una página con el nombre de «newpage».

Ahora tendremos que añadir su controlador. En controllers/front/ crearemos un nuevo archivo con el siguiente contenido:

<?php

class NewpageControllerCore extends FrontController
{
    public $php_self = 'new-page';
    public $ssl = true;

    public function postProcess()
    {

    }

    public function setMedia()
    {
        parent::setMedia();
        $this->addCSS(_THEME_CSS_DIR_.'new-page.css');
        $this->addJS(_THEME_JS_DIR_.'new-page.js');
    }

    public function initContent()
    {
        parent::initContent();

        $this->setTemplate(_PS_THEME_DIR_.'new-page.tpl');
    }
}

Y lo guardaremos con el siguiente nombre: NewpageController.php.

Estamos creando la clase que controlará la información de nuestra página. Todos los controladores heredan los métodos y atributos de FrontController.

La función postProcess() se puede utilizar para recibir los datos de un formulario por ejemplo.

La función setMedia() es interesante utilizarla cuando vamos necesitar ejecutar javascript o añadir estilos.

La función initContent() es una de las más importantes y su principal objetivo es enlazar con la plantilla donde estará nuestro HTML. En esta función crearemos las variables smarty necesarias para trasladar al archivo .tpl.

En el archivo .tpl tendremos la vista de nuestra página. Será contenido HTML con variables smarty si fuera necesario.

En nuestro ejemplo crearemos un nuevo archivo llamado new-page.tpl que añadiremos en la raiz de la plantilla que estemos utilizando con el siguiente contenido:

{capture name=path}{l s='New Page'}{/capture}
{include file="$tpl_dir./breadcrumb.tpl"}

<p>YOUR CODE FOR NEW PAGE</p>

Tan solo es un ejemplo sencillo donde tan solo estamos añadiendo el breadcumb y el contenido de la página.

newpage

Para acceder a esta nueva página que hemos creado podríamos hacerlo a través una url como la siguiente:

http://www.your-shop.com/index.php?controller=new-page

jj
Si queremos añadirle url amigable, tan solo tenemos que ir a la administración de la tienda e ir a Preferencias -> SEO y URLS y pulsar en añadir nueva página. Nos encontraremos con un formulario donde aparecerá nuestra nueva página donde podremos configurar sus metas:

newpage2

Guardando este formulario añdiendo al menos el nombre de la página y su url reescrita podremos acceder a nuestra nueva página con la siguiente URL:

http://www.your-shop.com/new-page

Si te ha servido este tutorial hazte fan de la página de facebook del blog Jose Aguilar

Autor
Escrito por Jose Aguilar - Director ejecutivo y tecnológico en JA Modules. Experto programador PrestaShop y Experto programador WordPress.
Te ha servido? Valora esta entrada!
(6 votos, promedio: 5 de 5)
Comparte en las redes sociales
¿Buscas trabajo de programador?

29 respuestas a “Como añadir una página extra en Prestashop”

  1. Albert dice:

    Buenas Jose, tengo una tienda de informática hecha con prestashop 1.7, y tengo un formulario de reparaciones con ticket en html
    y quisiera saber como puedo añadirlo a mi tienda prestashop.

    Me seria de gran ayuda!
    gracias!

  2. RUTH dice:

    Hola Jose

    Gracias por el aporte lo probare en mi página web y ya les contare que tal me ha ido

    UN saludo

  3. Alejandro dice:

    Buenas tardes José, le escribo porque necesito la herramienta » editor de texto de página de inicio para prestashop 1.6. Quisiera saber como puedo obtenerla.

    • Jose Aguilar dice:

      Hola,

      El editor de textos para la página de inicio es un módulo gratuito que deberías encontrar en el apartado de módulos de tu tienda para instalarlo o activarlo.

      Saludos

  4. Joss dice:

    Hola Victor , gracias porla ayuda , estaria bien saber si el proceso es el mismo para ps 1.7
    gracias por la web

  5. Jorge dice:

    Hola
    Quiero hacer eso que indicas exactamente pero en la versión 1.7.1.2
    ¿Podrias actualizar el Tutorial?

  6. Reinaldo dice:

    Hola amigo, hago los pasos pero al momento de ejecutar me sale la pagina totalmente en blanco, que podrá ser?

  7. hugo dice:

    Buenas noches, después de actualizar mi tienda online, intento actualizar los cms ya creados, pero me encuentro con el problema que la sección contenido de la página, no tiene los iconos para agregar imágenes, alinear a la izquierda y demás. Los textos me aparecen en formato html. Como puedo tener de nuevo la caja con todos los iconos?. Gracias

  8. Marta dice:

    Muchas gracias por compartir tu conocimiento con los demás, en más de una ocasión me has salvado de un apuro.

    Yo estoy usando la versión 1.6.1.3 y como al compañero al seguir el segundo y tercer paso y despues añadir la página en SEO y URLs me da el error: He seguido los pasos pero me sale el mismo error, en la mísma línea

    Fatal error: Class ‘paginaejemploController’ not found in C:\AppServ\www\pfitosanitarios\classes\controller\Controller.php on line 135

    Si pudieras orientarme estarñia aun más agradecida.

    Un saludo

  9. rodrigo dice:

    Buenas, estoy intentándolo y no consigo que me aparezca, dentro de SEO&URLS no me aparece el controlador…
    ¿Sabes por qué puede ser?

    Gracias.

  10. Jose Carlos Florez dice:

    He seguido los pasos pero me sale este error
    Fatal error: Class ‘paginaejemploController’ not found in C:AppServwwwtdaclassescontrollerController.php on line 135

    • Jose Aguilar dice:

      Hola buenas tardes,

      No sabemos en que versión de prestashop lo estarás probando pero este tutorial es para prestashop 1.5.x. En prestashop 1.6.x es distinto.

      sAludos

  11. Juan dice:

    Hola
    yo como queria una variante del sitemap lo que hice fue duplicar y renombrar pero … aunque me coje el controller y tal no me muesta el contenido osea llego a hacerlo todo pero a la hora de cargar el contenido me tira 404

    ¿pude olvidad algo?

  12. Alejandro dice:

    Hola, tengo la version 1.6.0.9… esto servirá para esta versión?

    • Jose Aguilar dice:

      HOla, si que debería funcionar pero debes omitir el primer paso. Simplemente creando el controlador debería funcionar. Saludos

  13. Jesus dice:

    Hola, disculpa como podria crear una nueva pagina con un formulario pero para una version mas reciente como la 1.6 muchas gracias

    • Jose Aguilar dice:

      Hola, creando un controlador nuevo y su tpl. Para hacerlo bien puedes guiarte del controllers/front/ContactController.php y su contact-form.tpl de la plantilla en uso.

  14. lalo castañeda dice:

    hola, podrias decirme donde se encuentran los archivos raiz de prestashop 1.6.8 que ya no estan en la posicio que te nian en la version 1.5 muchas gracias

  15. lalo castañeda dice:

    Hola Jose un saludo
    mi consulta es la siguiente
    quiero añadir una pagina extra en prestashop 1.6.8 pero creo no se por donde empesar el tuto ue muestras no me funciona podrías ayudarme con la información para esta versión de prestashop.

    • Jose Aguilar dice:

      En prestashop 1.6 ahora se hace de otra forma. En prestashop 1.6 suelo hacer módulos que añaden páginas via controlador del módulo pero añadir una página de esta forma todavía no hemos tenido que hacer.

      Saludos

  16. Eric dice:

    Tio eres un crack de todos los tutoriales que he buscado por internet el tuyo es el unico que no me ha dado error a la hora de crear mi página externa de prestashop, chapo tio, Muchaaaas Gráciaaas!

  17. Verónica dice:

    Hola muy buenas, lo primero felicitarte por el blog, he entrado hace un rato y la verdad es que tienes información muy útil. Me ha gustado mucho.

    Necesito una pequeña ayuda. Necesito crear una nueva página, y gracias a éste artículo me ha quedado claro, pero… ¿Existe la manera de que cuando acceda a esa página, los módulos de la derecha e izquierda se oculten(menu lateral, tiendas, etc…)?

    Necesito que se muestre la cabecera, y el footer, y en el centro el contenido de mi página a todo lo que da…

    ¿Es posible?

    Mil gracias por compartir tus conocimientos. Un saludo

    • Jose Aguilar dice:

      HOla buenas tardes,

      Bueno no se si habrá otra forma, pero la forma más rápida es hacerlo via maquetación. Puedes ocultar las columnas de la siguiente forma:

      #nombredetupage #left_column { display:none; }
      #nombredetupage #right_column { display:none; }

      Y luego center_column hacerlo ancho 100%:

      #nombredetupage #center_column { width:100%; }

      Y ya lo tendrías,
      Espero haberte ayudado,
      Saludos

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.