Mostrar contenidos CMS en los productos en Prestashop

Si queremos mostrar el contenido de unas de las páginas que hemos creado en la pestaña Preferencias -> CMS en la ficha del producto, podemos hacer lo siguiente.

En este TIP, vamos a tocar clases/controladores original, recordar que lo ideal es hacer un override y nunca tocar una clase y controlador original.

Ejemplo en Prestashop 1.6

Vamos al fichero:

/controllers/front/ProductController.php

Dentro de la función:

public function initContent()

Buscamos la línea: (Sobre la línea 293 por ejemplo en las ultimas variantes actuales de la 1.6)

$this->context->smarty->assign(array(
'stock_management' => Configuration::get('PS_STOCK_MANAGEMENT'),

Y añadimos encima:


$cms_contenido = new CMS(ID CMS, $this->context->language->id, $this->context->shop->id),

Vamos a obtener los datos del CMS con ID 3 (que en nuestro caso es el relativo a Términos y condiciones)

Ahora buscamos la siguiente línea en la misma función


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

Y justo encima añadimos:

'cms_contenido' => $cms_contenido,

Hemos asignado el contenido del array donde almacenamos los valores de la página de contenidos a una variable que vamos a usar luego en el tpl.

Ahora ya podemos hacer uso de la variable “cms_contenido” en el fichero:

/themes/default-bootstrap/product.tpl

Si hacemos un “var_dump” de la variable, podemos ver las opciones que nos permite la variable a la hora de imprimir el ID, contenidos, etc.. del CMS en cuestión.

{$cms_contenido|var_dump}

Por ejemplo:

Imprimir contenido del CMS en la ficha del producto en Prestashop

{$cms_contenido->content}

Imprimir título del CMS en Prestashop

{$cms_contenido->meta_title}

Ah, se me olvidaba indicaros que en este caso hemos tocado la inicio del TIP el controlador original y lo ideal es hacer un override del controlador en:

/override/controllers/front