danielgap Posted January 25, 2016 Share Posted January 25, 2016 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 More sharing options...
tuk66 Posted January 25, 2016 Share Posted January 25, 2016 {php}{/php} no es compatible. {php}{/php} is not supported. Link to comment Share on other sites More sharing options...
Enrique Gómez Posted January 30, 2016 Share Posted January 30, 2016 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 More sharing options...
deltahel Posted July 30, 2016 Share Posted July 30, 2016 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 More sharing options...
ventura Posted July 30, 2016 Share Posted July 30, 2016 La funcion getNewProducts se define en la classe Product.php. Puedes sobreescribir la funcion añadiendo en la consulta un where que excluya los productos asociados a una determinada categoria Link to comment Share on other sites More sharing options...
deltahel Posted August 5, 2016 Share Posted August 5, 2016 Efectivamente la función getNewProducts está dentro Product.php, pero exactamente donde puedo agregar el WHERE? Link to comment Share on other sites More sharing options...
ventura Posted August 5, 2016 Share Posted August 5, 2016 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 More sharing options...
deltahel Posted August 6, 2016 Share Posted August 6, 2016 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 More sharing options...
ventura Posted August 6, 2016 Share Posted August 6, 2016 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 More sharing options...
deltahel Posted August 6, 2016 Share Posted August 6, 2016 (edited) Voy a tratar de explicar todo este tema: 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 August 6, 2016 by 27medios (see edit history) Link to comment Share on other sites More sharing options...
deltahel Posted August 6, 2016 Share Posted August 6, 2016 Me autorespondo: Si era así! jajajajja Muchas gracias por tu ayuda ventura ! Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now