Jump to content

[TUTORIAL] DEVFOREVER - Ajouter pictogrammes valeurs caratéristiques


Recommended Posts

Bonjour à tous,

je trouvais utile d'ajouter un pictogramme sur les valeurs des caractéristiques, de cette manière on peut afficher une fiche produit avec un ensemble de pictogrammes, cette possibilité n'est réalisable qu'en modifiant Prestashop et je vous explique ici comment réaliser ces modifications :

1 - Fichier "defines.inc.php" du dossier "config", nous allons ajouter cette ligne :

define('_PS_PICTO_IMG_DIR_',        _PS_IMG_DIR_.'picto/');



ATTENTION : parallèlement à cette modification, nous allons créer un dossier "picto" dans le dossier "img" du site et lui attribuer les droits en écriture CHMOD 777.

2 - Fichier "Product.php" du dossier "classes", on va chercher la fonction "getFrontFeaturesStatic", et ajouter un champ dans la liste select, la fonction deviendra ceci après modification :

static public function getFrontFeaturesStatic($id_lang, $id_product)
{
   return Db::getInstance()->ExecuteS('
   SELECT name, value, pf.id_feature, fvl.id_feature_value
   FROM '._DB_PREFIX_.'feature_product pf
   LEFT JOIN '._DB_PREFIX_.'feature_lang fl ON (fl.id_feature = pf.id_feature AND fl.id_lang = '.intval($id_lang).')
   LEFT JOIN '._DB_PREFIX_.'feature_value_lang fvl ON (fvl.id_feature_value = pf.id_feature_value AND fvl.id_lang = '.intval($id_lang).')
   WHERE pf.id_product = '.intval($id_product));
}



3 - Fichier "AdminFeaturesValues.php" du dossier "votreAdmin/tabs/" :

a - juste avant :

parent::__construct();



nous allons ajouter

$this->fieldImageSettings = array('name' => 'logo', 'dir' => 'picto');



b - dans la fonction "displayForm", nous allons chercher la FORM et ajouter ceci dans ses propriétés :

enctype="multipart/form-data"



ce qui donne

<form action="'.$currentIndex.'&submitAdd;'.$this->table.'=1&token;='.Tools::getValue('token').'" method="post" enctype="multipart/form-data">



c - nous allons maintenant intégrer l'image dans le formulaire à l'aide du code suivant entre 2 div :

echo '


'.$this->l('Logo:').'
';
           $this->displayImage($this->getFieldValue($obj, 'id_feature_value'), _PS_PICTO_IMG_DIR_.$this->getFieldValue($obj, 'id_feature_value').'.jpg', 350, NULL, Tools::getValue('token'));
echo '
<input type="file" name="logo" />

'.$this->l('Upload pictogramme logo from your computer').'
';



le mieux étant de l'intégrer juste avant :

   <input type="submit" value="'.$this->l('   Save   ').'" name="submitAdd'.$this->table.'" class="button" />



ce qui donne un pied de formulaire équivalent à ceci :

$features = Feature::getFeatures($this->_defaultFormLanguage);
foreach ($features AS $feature)
   echo 'getFieldValue($obj, 'id_feature') == $feature['id_feature']? ' selected="selected"' : '').'>'.$feature['name'].'';
echo '
 *
';
//AJOUTER PAR BVINCE
echo '


'.$this->l('Logo:').'
';
           $this->displayImage($this->getFieldValue($obj, 'id_feature_value'), _PS_PICTO_IMG_DIR_.$this->getFieldValue($obj, 'id_feature_value').'.jpg', 350, NULL, Tools::getValue('token'));
echo '    
<input type="file" name="logo" />

'.$this->l('Upload pictogramme logo from your computer').'
';
//******************
echo '
           <input type="submit" value="'.$this->l('   Save   ').'" name="submitAdd'.$this->table.'" class="button" />

* '.$this->l('Required field').'

</form>';



Et voilà, à partir de là, votre back office permet maintenant de mettre une image sur la valeur de la caractéristique...

Nous devons maintenant passer à l'étape affichage en Front Office des différentes images disponibles pour chaque valeur de caractéristique affectées à un produit.

35263_sEX8EJHlRKonjL8MxHFo_t

35264_CMqpze5Tis00YiOMuTaV_t

Link to comment
Share on other sites

4 - Fichier "product.php" à la racine de votre site

Nous allons chercher ce groupe de lignes :

$features = $product->getFrontFeatures(intval($cookie->id_lang));
$attachments = $product->getAttachments(intval($cookie->id_lang));



et on va coller ce code juste après :

if(sizeof($features))
   foreach($features as $key=>$feature)
       if(is_file(dirname(__FILE__).'/img/picto/'.$feature['id_feature_value'].'.jpg'))
           $features[$key]['imageLink'] = __PS_BASE_URI__.'img/picto/'.$feature['id_feature_value'].'.jpg';



ceci permettra d'envoyer au smarty les informations nécessaires concernant l'image affectée à la valeur de la caractéristique.

5 - Fichier "product.tpl" dans votre thème

Sous le code

{if $have_image}
getImageLink($product->link_rewrite, $cover.id_image, 'large')}" {if $jqZoomEnabled}class="jqzoom" alt="{$link->getImageLink($product->link_rewrite, $cover.id_image, 'thickbox')}"{else} title="{$product->name|escape:'htmlall':'UTF-8'}" alt="{$product->name|escape:'htmlall':'UTF-8'}" {/if} id="bigpic" width="{$largeSize.width}" height="{$largeSize.height}" />
{else}
name|escape:'htmlall':'UTF-8'}" />
{/if}



on va ajouter

{if $features}

           <!-- product's features -->

           {foreach from=$features item=feature}
               {if $feature.imageLink}

               {/if}
           {/foreach}


{/if}



ce qui va permettre d'afficher sous votre photo produit, l'ensemble des pictos concernant le produit.

Annexe 1 : Présentation du Back Office
Annexe 2 : Présentation du Front Office

Link to comment
Share on other sites

  • 4 weeks later...

Bonjour,

je rencontre 2 problèmes en voulant intégrer ce code :

1. dans la Back Office, j'ai le message suivant lorsque je veux télécharger une image :

"Clef de sécurité incorrecte"

2. dans le front office, j'ai un message d'erreur lorsque je veux voir un produit :

Fatal error: Smarty error: [in /home/ispcp/www/virtual/des-voiles-et-moi.com/htdocs/themes/prestashop/product.tpl line 117]: syntax error: unrecognized tag: $feature.name|escape:'htmlall':'UTF-8 (Smarty_Compiler.class.php, line 446) in /home/ispcp/www/virtual/des-voiles-et-moi.com/htdocs/tools/smarty/Smarty.class.php on line 1095

Pourriez-vous m'éclairer ?

merci.
a+

ethan

PS 1.3.5

Link to comment
Share on other sites

  • 4 weeks later...

Quelqu'un aurait-il une autre solution ? existerait-il un module faisant cela ?

Quelqu'un serait-il prêt à programmer un module de ce genre ? Je suis prêt pour acheter un module faisant apparaître des images dans les caractéristiques.

Merci pour vos réponses.

Ethan

Link to comment
Share on other sites

  • 5 months later...
  • 9 months later...

Je me permet de remonter ce topic car j'ai vraiment besoin d'integrer cette fonction sur mon site.

 

Je suis bloqué à cette partie ;

 

4 - Fichier "product.php" à la racine de votre site

 

Nous allons chercher ce groupe de lignes :

 

Mon problème est que ce fichier est vide dans la version 1.4.6, je ne sais donc pas comment déclarer au smarty les images.

 

Si quelqu'un pourrait m'aider, merci.

Link to comment
Share on other sites

J'ai finalement trouver le fichier et ajouter les lignes, mais dans la fiche produit, rien n'apparait.

 

Je pense que ça à un lien avec $feature.imageLink, mais je ne connais pas grand chose en php et je ne trouve pas ce qui cloche..

Link to comment
Share on other sites

En supprimant cette ligne du code cité plus haut

 

 

if(is_file(dirname(__FILE__).'/img/picto/'.$feature['id_feature_value'].'.jpg'))

 

j'arrive à voir les images, seulement j'ai autant d'image que de caracteristique, alors que je n'ai attribué qu'une image.

Il me faudrait une condition du type "pour chaque image" au lieu de" pour chaque caracterstique".

 

J'espere être assez clair, il est tard ;)

Link to comment
Share on other sites

Si je comprend bien mon problème, en gardant cette ligne :

 

if(is_file(dirname(__FILE__).'/img/picto/'.$feature['id_feature_value'].'.jpg'))

 

ça ne fonctionne pas.

 

En l'enlevant, j'ai autant de balise image que de caractéristique, même si je n'ai attribuer aucune image.

 

Donc cette fameuse ligne de code sert à créer la variable imageLink seulement pour les caractéristique dont une image à était attribué.

 

Je suppose qu'il n'y à pas grand chose à modifier pour rendre tout ça fonctionnel si seulement un connaisseur pouvait juste me modifier ce code.

Link to comment
Share on other sites

  • 6 months later...
  • 3 months later...
  • 2 weeks later...

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