Jump to content

[Resolu] Une Condition Sur Un Produit Used Dans Le Header.tpl


redhouane

Recommended Posts

Bonsoir,

Je débute avec prestashop et donc avec smarty et ses variables bzaroides que j'arrive à peine à comprendre.

Mon problème est simple à expliquer à priori, je veux exploiter la condition d'un produit d'occasion {if $product->condition == 'used'} pour afficher un header customisé que j'ai réalisé spécialement pour les produits d'occasion.

J'ai essayé de faire cette condition comme dans cet exemple au niveau du header.tpl :

 

 

{if $product->condition == 'used'}

<div id="header2">

<div class="container_9 clearfix">

<div style="float:left;">

<a id="header_logo" href="{$base_dir}" title="{$shop_name|escape:'htmlall':'UTF-8'}">

<img class="logo" src="{$img_dir}logo2.png" alt="{$shop_name|escape:'htmlall':'UTF-8'}"/>

</a>

</div>

{else}

<div id="header">

<div class="container_9 clearfix">

<div style="float:left;">

<a id="header_logo" href="{$base_dir}" title="{$shop_name|escape:'htmlall':'UTF-8'}">

<img class="logo" src="{$img_dir}logo.png" alt="{$shop_name|escape:'htmlall':'UTF-8'}"/>

 

</a>

 

</div>

{/if}

 

Le site ne veut même pas démarrer après avoir écrit ce code, ça sent la grosse bêtise de débutant à mon avis.... ^ ^"

ps: cette condition marche au niveau de product.tpl pour afficher tout ce que je veux sur ce même tpl

Merci d'avoir lu :)

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

dsl pour le double post rapide, mais je ne trouve pas le fichier FrontController.php ou du moins le bon !

le chemin : /override/classes/controller/FrontController.php et ça contient ça seulement :

<?php

 

class FrontController extends FrontControllerCore

{

 

}

Merci

Link to comment
Share on other sites

oh mon dieu il est vide :blink: (non je plaisante c'est normal et c'est tant mieux c'est l'override)

le fichier est à l'adresse /classes/controller/FrontController.php, copie la fonction init dans le fichier override correspondant (celui qui est vide) pour avoir:

 

 

<?php

class FrontController extends FrontControllerCore

{
public function init()
{
/*
* Globals are DEPRECATED as of version 1.5.
* Use the Context to access objects instead.
* Example: $this->context->cart
*/
global $useSSL, $cookie, $smarty, $cart, $iso, $defaultCountry, $protocol_link, $protocol_content, $link, $css_files, $js_files, $currency;
[b]// suite du contenu de la fonction init ...[/b]
}

}

 

fait les changements dont tu as besoin et normalement ça devrait être bon.

 

 

Tu sais un peu programmer en php et smarty ?

Link to comment
Share on other sites

Je ne comprends pas vraiment ce que vous voulez dire par

copie la fonction init dans le fichier override correspondant (celui qui est vide) pour avoir:

 

 

<?php

class FrontController extends FrontControllerCore

{
public function init()
{
/*
* Globals are DEPRECATED as of version 1.5.
* Use the Context to access objects instead.
* Example: $this->context->cart
*/
global $useSSL, $cookie, $smarty, $cart, $iso, $defaultCountry, $protocol_link, $protocol_content, $link, $css_files, $js_files, $currency;
[b]// suite du contenu de la fonction init ...[/b]
}

}

 

 

J'ai copié la fontion init dans le frontcontroller.php vide du dossier overide mais le site a planté, d'ailleurs je ne comprends même pas à quoi sert cette fonction ^^"

Et pour répondre à la question concernant la programmation je dirai oui pour php mais pas en POO, du coup toute aide serai la bienvenue :P merciii

Link to comment
Share on other sites

Bonjour, j'ai trouvé la solution il y a quelques jours et j'ai oublié de la communiquer pour clore le sujet, donc voilà il faut rajouter la valeur de la condition du produit de la base de donnée, au niveau de Override/classes/Product.php

public static function getCondition($id_product)
	{
			$sql = 'SELECT  `condition`
							FROM `'._DB_PREFIX_.'product`
							WHERE `id_product` ='.$id_product;
			return Db::getInstance()->getValue($sql);
	}

et la récupérer au niveau des controllers : Classes/Controller/FrontController.php

$condition='';
[font=arial, sans-serif][size=3]				if ($id_product = (int)Tools::getValue('id_product'))
			{
					$condition = Product::getCondition($id_product);
			}
[font=arial, sans-serif][size=3]				$this->context->smarty->assign(array(
					// Usefull for layout.tpl
					'condition' => $condition,
Link to comment
Share on other sites

  • 1 year later...

Bonjour a vous

 

Merci pour ce topic, je suis sur un probleme similaire a celui de redhouane

 

Je veux creer un block module comme homefeatured mais au lieu d'afficher les produits phares par catégories, j'aimerais afficher les produits par leur état

 

J'ai une idée du code à écrire mais je ne sais pas ou le mettre.

 

En lisant ce topic, j'ai procédé de la manière suivante:

 

J'ai crée deux fichier Product.php et FrontController.php que j'ai placé respectivement dans les dossiers

/override/classes/Product.php 

/override/classes/controller/FrontController.php

 

Tout en respectant les syntaxes de class avec les extends

 

A ce niveau j'ai essayé mon module homeState qui est basé sur le même code que homeFeatured a l'exception 

de la récupération de la valeur dans la fonction install(), ou j'écris a la ligne 53

 

Configuration::updateValue ('HOME_FEATURED_CAT', Db::getInstance()->getValue($sql));

 

Mais ca ne fonctionne pas non plus, j'ai eu un bogg du système, et j'ai réinstaller ma boutique par la suite.

 

Quelqu'un aurai une idée de ce qu'il faut faire? Pourquoi ce que j'ai fait n'a pas fonctionné?

 

Merci.

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...