Prestashop 1.5, crear nueva página

Enlanzando con Prestashop, crear una nueva página en 1.4 veamos como crear una página en prestashop para versiones 1.5

  1. Crear el php en el directorio raiz, en nuestro caso lo llamaremos “mipagina.php”. Salvo que haya que realizar algo bastante especial basta con un require del archivo de configuración e invocar al controlador de la página, algo así:
    1. <?php
    2. require(dirname(__FILE__).'/config/config.inc.php');
    3. Tools::redirect('index.php?controller=mipagina'.((count($_GET) || count($_POST)) ? '&'.http_build_query(array_merge($_GET, $_POST), '', '&') : ''), __PS_BASE_URI__, null, 'HTTP/1.1 301 Moved Permanently');
    4. ?>
  2. Definir la página en nuestra zona Admin, para lo que tendremos que ir a Preferencias -> SEO & URLs -> Añadir Nuevo.
    Una vez en el formulario de alta seleccionamos nuestro php, título y metas:
    Crear página en prestashop
  3. Crear el controlador, “MiPaginaController.php” dado que es nuevo podemos colocarlo en el directorio de controladores “controllers/front/”.

    Hay que tener en cuenta que el controlador tendrá gran parte de la lógica de la página, además de definir los archivos de media (css y js) extras que se cargan y el .tpl que muestra el resultado. Por ejemplo, también es el controlador el que controla si es necesario estar autenticado, por ejemplo

    Veamos un controlador con un contenido básico:

    1. <?php
    2. class MiPaginaControllerCore extends FrontController
    3. {
    4.     public $php_self = 'mipagina'; 
    5.     //definimos los archivos media que queremos cargar
    6.     public function setMedia()
    7.     {
    8.         parent::setMedia();
    9.         Tools::addCSS(_THEME_CSS_DIR_.'mipagina.css');
    10.         Tools::addJS(_THEME_JS_DIR_.'mipagina.js');
    11.     }
    12.    
    13.     public function process()
    14.     {
    15.         parent::process();
    16.        
    17.         //definimos la variable que queremos mostrar
    18.         $mivariable = "Hola Mundo";
    19.        
    20.         //declaramos las variables para smarty
    21.         self::$smarty->assign(array(
    22.             'mivariable ' => $mivariable
    23.         ));
    24.     }
    25.    
    26.     public function displayContent()
    27.     {
    28.         parent::displayContent();
    29.         //definimos el tpl que muestra la página
    30.         self::$smarty->display(_PS_THEME_DIR_.'mipagina.tpl');
    31.     }
    32. }
    33. ?>
  4. Dependiendo de la lógica a implementar deberíamos definir una nueva clase, en nuestro ejemplo no es necesario.
  5. Nos faltaría crear el tpl correspondiente “mipagina.tpl” en nuestro tema y los archivos css y js de la página los requiere. Veamos el contenido del tpl para mostrar nuestra variable:
    1. <!--mostramos (o no) las breadcumbs-->
    2. {include file="$tpl_dir./breadcrumb.tpl"}
    3. <!--mostramos nuestra variable-->
    4. <p>{$mivariable}</p>

Listo, ya tenemos nuestra página en funcionamiento. Ahora ya podemos hacer maldades.

La única lógica del ejemplo es la definición de la variable, pero se puede hacer cualquier cosa, aunque deberíamos diferenciar muy bien que debe hacer el controlador y que las clases, pero eso será otro día.

nota: Si sólo queremos crear una página de contenido (texto e imágenes) no es necesario hacer todo esto, basta con utilizar la funcionalidad de “CMS” que lleva prestashop

Autor: Juan Castells

Compártelo!!


7 respuestas a “Prestashop 1.5, crear nueva página”

  1. Frese dice:

    Gracias por la rápida respuesta, Juan. Podrías “dibujar” por líneas generales el código para la 1.6, me refiero a la opción del lammar en el controller un php separado. Y si tienes tiempo de crear un tutorial para ello (“como ejecutar PHP en PrestaShop”), he visto muchas peticiones parecidas en su foro y sin repuesta para la 1.6 !

    THKs a lot

    • Para llamar a un php desde un controlador lo normal sería utilizar un include() o como mucho un require(), como en cualquier php que intentes incluir en otro, da igual la versión.
      Gracias por la sugerencia, cuando tenga tiempo intentaré hacerlo.

      saludos.

      • Frese dice:

        Gracias por la respuesta, Juan.

        Pensando en hacerlo más sencillo: tal y como un CSS o un JS en tu ejemplo de arriba ¿puedo, desde el Controlador, llamar un archivo PHP externo (pero siempre en el mismo dominio) y ejecutarlo como si estuviera dentro del controlador?

        • Si lo que pretendes es que se ejecute un php y se vea directamente el resultado en la página no se puede, prestashop está diseñado en capas y en la capa de presentación no se puede ejecutar php, bueno, algo muy básico en los tpls se puede porque smarty lo permite pero no es conveniente. Como mucho podrías hacer el include que comentaba en el controlador, sacar todo el resultado del php externo a una variable y pasárselo al tpl para que lo mostrara.
          Estoy pensando otra posibilidad, alguna vez he utilizado ajax en el propio html generado para que haga una petición asíncrona a un php. Si te interesa dímelo y te mando un correo explicándotelo

          • Frese dice:

            Muchas gracias por tu disponibilidad, al final he renunciado. Era un script PHP que tenía en otra página, en su lugar usaré una función interna de PrestaShop por default. No me gusta la idea pero no me queda más remedio.

            De nuevo gracias por tu ayuda y por compartir, Juan.

            Te has ganado un pequeño cliente cuando tenga que customizar.

            Un saludo

  2. Frese dice:

    Hola Juan, tengo que ejecutar un script PHP en una página creada según tus indicaciones (gracias por tú post), sin embargo no me funciona. He puesto el código PHP en el template (.tpl) y también lo he probado en mipagina.php. Podrías indicar cómo se ejecuta un script PHP en un página de PrestaShop ?

    Gracias

    • Hola

      Lo que necesites ejecutar de php deberías hacerlo en el controlador (en este ejemplo sería MiPaginaController.php) Si tienes otro php ya preparado con el código lo puedes llamar desde el controlador o puedes poner directamente el código en él (funtión process). Puedes utilizar todas las clases y objetos de prestashop, incluso podrías crearte una clase propia si lo deseas.

Deja un comentario

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