Jump to content

Mostrar Un Modulo Dependiendo Del Producto


chinchoso

Recommended Posts

Buenas. Llevo mucho tiempo detras de esto pero no consigo arreglarlo. Tengo una tienda en la que una serie de articulos deben mostrar un logotipo en la pagina de producto, y el resto de productos no mostrarla. Con el modulo contenbox coloco el logotipo en el hook que quiero pero se me muestra en todos los productos. Para solucionarlo modifico el tpl del contentbox añadiendo el codigo:

 

{if $smarty.get.id_product == 1 OR $smarty.get.id_product == 2 ..........} asi añadiendo id de producto uno por uno.

 

Todos los productos que deben mostrar el logotipo pertenecen a la misma categoria padre. Tambien su referencia esta entre la 5000000 en adelante. La idea seria poder añadir el codigo de forma que todos los productos que pertenezcan a la categoria padre X muestren el logo, o tambien, que todos los productos cuya referencia sea 50000000 o superior muestren el logo.

El caso es que he probado cambiando el parametro id_product por id_category_parent y otras tantas cosas, y no consigo que funcione.

A ver si me podeis echar una mano con esto. Me trae de cabeza. Un saludo.

Link to comment
Share on other sites

Hazlo mejor asi

en el .php principal del modulo, busca esta parte

public function genericHookMethod()

Debajo añade esto

$products = new Product((int)Tools::getValue('id_product'), false, $this->context->language->id);

Un poco mas abajo, busca esta parte

$this->context->smarty->assign(
array( 'content' => $pre_content.$content_query['content_text'].$pos_content )
);

Y lo dejas asi

$this->context->smarty->assign(array(
'content' => $pre_content.$content_query['content_text'].$pos_content,
'product' => $products,
		
));

Ahora ya desde el .tpl del modulo ya se puede acceder a todas las variables, id, reference,....

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

Algo debo estar haciendo mal porque no me funciona.

He editado el fichero contentbox.php y he modificado las lineas que me comentabas. Luego he ido al fichero template.tpl y he sustituido la linea:

 

{if $smarty.get.id_product ==1}

 

por

 

{if $smarty.get.reference > 500000}

 

pero no se muestra el modulo en ninguno de los articulos cuya referencia sea de esa en adelante. Alomejor es que no estoy modificando el fichero adecuado no?

Link to comment
Share on other sites

Bueno, pues sigo con las pruebas. Algo he conseguido hacer pero aun no funciona del todo ( estoy aprendiendo y voy bastante lento). Lo estoy haciendo de otra manera diferente, por si a alguien le sirve o se le ocurre como mejorarlo.

 

 

He modificado el archivo ProductController.php donde esta la linea

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

he añadido lo siguiente

$this->setTemplate(_PS_THEME_DIR_.'product.tpl');
if($this->product->id_category_default==7){
$this->setTemplate(_PS_THEME_DIR_.'product1.tpl');}

todos los articulos donde quiero que aparezca el banner estan categoria por defecto 7. De esta forma los articulos que estan asi me muestran el product1.tpl y el resto me muestran el product.tpl normal. He creado el fichero product1.tpl y estoy intentando mostrar bajo el "add to cart" una imagen (aunque aun no lo he conseguido ).

 

La posicion donde quiero insertar la imagen (o si pudiera ser codigo html) la he encontrado. Os seguire contando, o si se os ocurre alguna cosa para ayudarme, os lo agradeceria.

Un saludo.

Link to comment
Share on other sites

Con lo que estas haciendo condicionaras TODO el contenido de la pagina de producto, no ya el banner del modulo con su contenido.

 

Con lo que te puse al principio no necesitas  el smarty.get, puedes acceder directamente desde el .tpl del modulo a cualquier variable del objeto Product, ejemplo

$product->id_category_default
Edited by ventura (see edit history)
Link to comment
Share on other sites

Disculpa mi ignorancia. Esto es lo que aparece en el tpl del modulo

{*
*  @author    Miguel Costa for emotionLoop
*  @copyright emotionLoop
*}
{$content|escape:nofilter}

Si quisiera que se mostrara el modulo en todos los productos donde el id_category_default sea el 7 lo que deberia poner es (creo):

$product->id_category_default==7
{*
*  @author    Miguel Costa for emotionLoop
*  @copyright emotionLoop
*}
{$content|escape:nofilter}

Pero no funciona. Algo me falta. Seguramente error de novato, pero bueno, si me pudieras especificar lo que deberia poner te lo agradeceria.

Link to comment
Share on other sites

Todo lo que aparecere entre

{*

*}

es codigo comentado que no se aplica en el funcionamiento del archivo .tpl, se utiliza para como en este caso para mostrar creditos o deshabilitar codigo.

 

Luego:

{$content|escape:nofilter}

es la variable que incluye todo el contenido que se incluye en el editor de del modulo en el backoffice 

 

Para condicionar ese contenido a un parametro, puedes utilizar un condicional como lo estabas haciendo pero de esta manera

{ if $product->id_category_default==7} {$content|escape:nofilter} {/if}
  • Like 1
Link to comment
Share on other sites

  • 1 month later...

Buenas,

Mi nombre es Liberto y a razon de este post estoy trasteando con el modulo contentbox y me gustaria saber como puedo ponerle un codigo de ejemplo cuando se instala el modulo, algo parecido a lo que hace este modulo:

 
private function createExampleCookie($id_shop)
{
$cookielaw = new CookielawClass();
$cookielaw->id_shop = (int)$id_shop;
foreach (Language::getLanguages(false) as $lang)
{
 
$cookielaw->body_paragraph[$lang['id_lang']] = 'Este sitio web utiliza cookies propias y de terceros para recopilar información con la finalidad de mejorar nuestros servicios, así como el análisis de sus hábitos de navegación. Si continua navegando, supone la aceptación de la instalación de las mismas. El usuario tiene la posibilidad de configurar su navegador pudiendo, si así lo desea, impedir que sean instaladas en su disco duro, aunque deberá tener en cuenta que dicha acción podrá ocasionar dificultades de navegación de página web.';
}
 
return $cookielaw->add();
}
 
La idea es que por defecto al instalar el modulo contentbox ya tenga el codigo que yo quiero puesto para no tener que pegarlo despues.
 
Gracias.
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...