Página PHP en Prestashop 1.7

Crear página PHP en Prestashop 1.7

Lo primero es que no estamos hablando de crear páginas de contenidos en la pestaña Preferencias -> CMS (Diseño -> Páginas).

Empecemos  🙂

Aunque se puede hacer mediante módulo, nosotros lo vamos hacer a mano, que si bien no es lo más indicado, supongo que a más de alguno os puede venir bien.

Hace unos 5 años, hicimos un ejemplo basado en Prestashop 1.5, ahora lo vamos hacer basado en Prestashop 1.7

El primer paso es crearnos un controlador, al que vamos a llamar “NadieController.php

Lo vamos a guardar en el directorio “/controllers/front”

¿Qué contenido va a tener el fichero “NadieController.php”?


<?php
class NadieControllerCore extends FrontController
{
public $php_self = 'nadie';

public function initContent()
{
$this->context->smarty->assign(
array(
'variableSmarty1' => 'Prueba 1',
'variableSmarty2' => 'Prueba 2',
)
);

parent::initContent();
$this->setTemplate('nadie');
}

}

  • Identificación página
    Entre otras cuestiones, no permite identificar a la página, como también por ejemplo cuando accedemos al controlador vía web, el valor del parámetro. (mismo nombre que la página, si el controlador es “nadieController…”, aquí indicamos ‘nadie’)

    public $php_self = 'nadie';
    
  • Heredamos de FrontController
    class NadieControllerCore extends FrontController
    
  • Función que viene del FrontController, y que se ejecuta nada más ejecutar el controlador.
    public function initContent()
    
  • Preparamos variables para usarlas en el TPL (plantilla)
    $this->context->smarty->assign(
    array(
    'variableSmarty1' => 'Prueba 1',
    'variableSmarty2' => 'Prueba 2',
    )
    
  • Llamada al método padre:
    parent::initContent();
    
  • Asignamos nombre de la plantilla
    “nadie” tiene que estar en “/themes/tuplantilla/templates/” (con extensión tpl), es decir “nadie.tpl
    En setTemplate, escribimos el nombre de la plantilla (nadie.tpl) sin necesidad de colocar la extensión.

    $this->setTemplate('nadie');
    

Una vez preparado el Controlador, vamos a crear el fichero “nadie.tpl” o mejor dicho la plantilla de impresión.

Nuestro contenido será el siguiente:

{extends file='page.tpl'}
{block name='page_title'}
<span class="sitemap-title">{l s='Pagina Nadie' d='Shop.Theme'}</span>
{/block}
{block name='page_content_container'}
<section>
{$variableSmarty1}
{$variableSmarty2}
</section>
{/block}

Bloque estructura – (plantilla)

{extends file='page.tpl'}

Bloque Titulo:

{block name='page_title'}
<span class="sitemap-title">{l s='Pagina Nadie' d='Shop.Theme'}</span>
{/block}
Bloque Titulo

Bloque Contenido:


{block name='page_content_container'}
<section>
{$variableSmarty1}
{$variableSmarty2}
</section>
{/block}

Estamos mostrando el contenido del valor de las variables “variableSmarty1” y “variableSmarty2” que antes habíamos declarado en el controlador.

Imprimiendo variables Smarty

 

Por último, vamos a definir los metatitulos, metadescripción y url amigable de la página de “Nadie”

Vamos a la pestaña Parámetros de la tienda -> Tráfico & SEO, y en el botón “+” añadimos nuestra página.

Nueva página

Nos saldrá un formulario donde seleccionamos la página “nadie”

Definiendo metas y urls amigables para una nueva página en Prestashop

Y definimos el metatitulo, metadescripción, url amigable, etc..

Definiendo datos SEO para la página de Nadie

Ahora para entrar a la dirección, podemos entrar así:

tutienda.com/nadie

Depende así:

tutienda.com/index.php?controller=nadie

Además veremos que aparece el metatitulo y metadescripción, tal como hemos configurado:

Mostrando titulo y descripción SEO

Y con esto y un bizcocho, terminamos por hoy.

Bizcocho de Prestashop

Documento realizado bajo Prestashop 1.7.1.0

17 comentarios sobre “Crear página PHP en Prestashop 1.7”

    1. Un placer

      PD: Comenta la solución a tu problema por si algún usuario le pasa lo mismo 🙂

  1. A mi me da el fallo [Debug] This page has moved, supongo que es que no tengo una de las dos páginas en el directorio correcto

    1. Vale, ya sale, pero el problema en mi caso es que la dirección para que aparezca no es “index.php?controller=nadie” sino simplemente “nadie”, el por que es un misterio insondable para mí

      1. Cuando creas la URL amigable (último paso del tutorial) accedes directamente por la URL amigable, si has definido que la URL amigable es “juan”, accedes directamente mediante tuweb.com/juan

        1. Muchas gracias Víctor, tus manuales son de lo mejor que he visto.
          Ahora tengo que aprender a guardar datos del nadie.tpl en el nadiecontroller.php y compartir los datos de product.tpl a este nuevo nadie.tpl o al nadiecontroller.php.
          Solo repetirte mi mas sincero agradecimiento por el gran trabajo que realizas. Muchas gracias

  2. Hola. Algo hago mal. Me da este error:
    PHP Fatal error: Class ‘NadieController’ not found in /var/www/html/classes/controller/Controller.php on line 190

    Qué puede ser? Gracias!

    1. Hola,

      El error que menciona significa que: El fichero “NadieController.php” no ha sido encontrado.

      ¿Lo has subido al directorio indicado en la guía (/controllers/front/)?

      Si se encuentra subido en su directorio indicado en la guía y te aparece el error mencionado, prueba eliminar la caché de Prestashop en la pestaña Parámetros Avanzados -> Rendimiento

      O elimina manualmente los ficheros:
      /app/cache/dev/class_index.php y /app/cache/prod/class_index.php manualmente (se regeneran automáticamente, no te preocupes)

  3. Buenas, excelente el tutorial, me sirvió bastante. Lo que quiero aclarar es que en la clase del controlador de la siguiente manera:

    class NadieControllerCore extends FrontController

    debe ir así

    class NadieController extends FrontController

    es decir, se debe corresponder con el nombre del archivo, quizás eso generó el error a los demás

    Saludos, a seguir aportando a la comunidad 🙂 lml

    1. Hola Jorso,

      Que yo recuerde cuando hice la guía funcionaba con =>

      class NadieControllerCore extends FrontController

      Siendo el nombre del fichero => NadieController.php (Lo de Core solo se añade al final del nombre de la clase del controlador, pero el fichero debe tener el nombre sin la palabra Core)

      Fíjate que los otros controladores que vienen creados por defecto en el directorio => /controllers/front/ vienen con dicha estructura.

      En la denominación del controlador al definir la clase todos terminan en “Core”. Luego el nombre propiamente del fichero es sin la palabra “Core”

      Otra cosa es que haya cambiado el comportamiento recientemente y no funcione, cosa que me extrañaría.

  4. Tested in May 2019 on PrestaShop 1.7.4 – still WORKS! Victor – hat off for this solution and your write up. The only source on the Internet that actually helped me achieve what I wanted, thanks to your solution of creating a custom PrestaShop using .tpl files and new controller. Thank you very much sir!

Los comentarios están cerrados.