Jump to content

Utilizar Una Clase Php En Product.tpl


Recommended Posts

Estoy intentando utilizar una clase creada en php dentro de product.tpl pero en cuanto intento usarla con {php}{/php} me da error 500. Es un prestashop 1.6.1.2

 

La otra opción es meter la clase en product.php y llamarlo desde el product.tpl pero eso no se como lo puedo hacer. El código es algo así. Como lo puedo hacer y que me aconsejáis?

 

-- product.php --

class NuevaClase
{
 ******
}
 
-- product.tpl --
$clase = new NuevaClase();
$string = 'Todo el texto';
echo $clase->process($string);
Link to comment
Share on other sites

Prestashop usa el patron MVC. De forma que en el Controlador (ProductController)  puedes hacer las llamadas necesarias de PHP y poner el resultado en la vista vía smarty

 

Esto es, en  initContent()

 

Calculas

 

$tu_variable='Hola';

 

$this->context->smarty->assign(array('tu_variable'=>$tu_variable....

 

 

Luego en product.tpl accedes a esa variable. Si es un String pues simplemente lo metes en el html,

p.ej

 

<h4>{$tu_variable}</h1>

 

sino puedes tratar el array o la estructura de datos vía el lenguaje smary

 

http://doc.prestashop.com/display/PS16/Theme+templates+and+Smarty

 

 

 

Siempre se recomienda usar overrides y no tocar el código directamente

 

http://doc.prestashop.com/display/PS16/Controllers+within+PrestaShop

 

Poder efectivamente se puede llamar desde la vista a clases. Suelen ser llamadas a métodos estáticos que son puramente utilidades, no debería llamarse a ningún método de negocio (llamada a BBDD)

 

P.ej

 {if Tools::strlen($category->description) > 350}
Link to comment
Share on other sites

  • 6 months later...

Hola! Se que este tema ya lleva unos meses, pero creo que lo anterior está relacionado con lo que necesito.

 

Quiero mostrar los productos nuevos, únicamente de una categoría.

Pienso que debo filtrar desde NewProductsController, donde tengo lo siguiente:

$nb_products = (int)Product::getNewProducts(
$this->context->language->id,
(isset($this->p) ? (int)$this->p - 1 : null),
(isset($this->n) ? (int)$this->n : null),
true
);
Creo que algo así podría funcionar: 
{if Product::getNewProducts($product->id_category) == 50}
La pregunta es: 
Estoy bien con el proceso? 
Que debo cambiar o como lo puedo hacer?
 
Agradezco su ayuda.
Link to comment
Share on other sites

Sobreescribe la funcion en un override añadiendo debajo de esta parte

$sql->leftJoin('manufacturer', 'm', 'm.`id_manufacturer` = p.`id_manufacturer`');

esto

$sql->where('product_shop.`id_category_default` != 88');

Seria para los productos que tengan asignada ese id de categoria (88) como categoria por defecto.

Link to comment
Share on other sites

Muchas gracias, funciona perfecto.

Solo una aclaración, la consulta '... != 88' muestra los que no pertenecen a la categoría con id=88, con '...=88' muestra las que pertenecen solo a esta categoría.

 

Ahora el lío es pasar esa variable de un php a otro. -_-

Link to comment
Share on other sites

Si, perdona te entendi mal ,pensaba que querias excluir en vez de asociar.

Has sobreescrito la funcion principal, ahora por ejemplo en el modulo de nuevos productos tendras  la misma asociacion de productos que en el controller

Link to comment
Share on other sites

Voy a tratar de explicar todo este tema:  :blush:

Tengo un módulo que me muestra todas las categorías (allcategory.tpl y allcategory.php)

En este incluyo new-products.tpl, este a su vez llama a los controladores de paginación y filtro, y los muestra en un include de product-list.tpl

 

Lo que intento hacer es:

Al clickear la categoría me envía una variable con el id de la misma ($id_category), se ejecuta en el mismo, o sea que lo recibe allcategory.php

 

La cuestión es: 

Como hago para pasarla a product.php y usarla como variable de filtrado en el WHERE?

 

Agradezco toda tu ayuda ventura !

 

-------------------

 

Creo saber como lo puedo pasar, pero necesito algo de ayuda.

Tengo en el controller: 

$product = Product::getNewProducts(

            $this->context->language->id, 
            (int)$this->p - 1, 
            (int)$this->n, 
            false, 
            $this->orderBy, 
            $this->orderWay
        );  
 
Y en la clase getNewProducts
Y en Recibe los siguientes parámetros:
$id_lang,
$page_number = 0,
$nb_products = 10,
$count = false,
$order_by = null,
$order_way = null,
Context $context = null)
 
Y en la Le puedo agregar:
$idcat
 

Sí es así, como puedo setearlo en la llamada del Controller?

 

Gracias de nuevo!

Edited by 27medios (see edit history)
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...