Jump to content

[RESOLU] Ajout champ text Fiche produit (Back Office et Front Office)


Recommended Posts

Bonjour,

Malgré mes recherches sur le forum , je n'ai pas trouvé de post qui me donne toutes les infos.

Ce que je veux faire :
-> ajouter un champ texte supplémentaire de description pour les produits
-> ce champ est renseigné en Back Office et s'affiche en Front office bien entendu.

Version utilisée : PrestaShop v.1.3 RC 6

Voilà ce que j'ai fait déjà :

Modif classes/product.php (déclaration de ma variable $equipement)
ligne 147 :

    public        $equipement;


ligne 262 : function get Fields()

$fields['equipement'] = pSQL($this->equipement);



Modif admin/tabs/AdminProducts.php

ligne 1912

echo '

'.$this->l('Description:').'
';

   foreach ($this->_languages as $language)

   echo '

<textarea class="rte" cols="100" rows="20" id="equipement_'.$language['id_lang'].'" name="equipement_'.$language['id_lang'].'">'.$this->getFieldValue($obj, 'equipement').'</textarea>
';

echo ' 
';



Dans la table ps_products :

J'ai crée un champ 'equipement' en "TEXT" / utf8_general_ci

Et dans mon fichier product.tpl
J'appelle l'affichage de mon champ comme ca :
{$product->equipement}


Ce qui marche :

Si je rempli à la main le champ "equipement" en base de donnée , il s'affiche bien en
Back Office et en Front office.

Mais si je modifie le texte en Back-office et que je sauvegarde , la modif n'est pas enregistrée en Base de donnée.

Il y a donc un truc que je loupe.

Une petite idée ?

Merci

Link to comment
Share on other sites

Bon première correction (dites moi si je me trompe)

Le champ "equipement" (dans mon cas) pouvant contenir du HTML une petite modif est à faire :
Dans classe/product.php (ligne 262 environ) :

$fields['equipement'] = pSQL($this->equipement);


il faut ajouter le 'true' sinon tout le code HTML est nettoyé

$fields['equipement'] = pSQL($this->equipement,true);



Par contre je n'arrive toujours pas à écrire les modif faites en BO dans la base de donnée.

Help ! please ;)

Link to comment
Share on other sites

Bon alors... J'ai trouvé..

A noter que cela ne s'applique qu'à la version Version 1.3.0.9
comme je ne suis pas un expert , ne faites pas ces modifs sur votre boutique en production.
Faites un essai en local avant.
Vous pouvez appeller votre champ comme vous le souhaitez , le miens pour l'exemple est equipement

Donc les modifs pour :

-> ajouter un champ text pouvant contenir du HTML en plusieurs langues

-> editable en Back Office avec l'editeur tinyMCE

-> qui s'affiche dans product.tpl



IMPORTANT : Ne pas faire la modif juste après ,postée précédemment :

$fields['equipement'] = pSQL($this->equipement,true);



Dans votre base donnée
ajoutez dans la table ps_products_lang un champ TEXT , classement utf8_general_ci , NULL (ici 'equipement')

Dans class/Product.php :

En début vers la ligne 147 :

public        $equipement;


dans la fonction getTranslationsFieldsChild()
après :

$fields[$language['id_lang']]['description_short'] = (isset($this->description_short[$language['id_lang']])) ? pSQL($this->description_short[$language['id_lang']], true) : '';


ajoutez :

$fields[$language['id_lang']]['equipement'] = (isset($this->equipement[$language['id_lang']])) ? pSQL($this->equipement[$language['id_lang']], true) : '';



Après

protected $fieldsValidate = array(
       'id_tax' => 'isUnsignedId',
       'id_manufacturer' => 'isUnsignedId',
        .... couper pour pas faire trop long ....
       'active' => 'isBool',
       'ean13' => 'isEan13',



ajouter :

'equipement' => 'isCleanHtml'



Dans

protected $fieldsValidateLang = array(
       'meta_description' => 'isGenericName', 'meta_keywords' => 'isGenericName',
       'meta_title' => 'isGenericName', 'link_rewrite' => 'isLinkRewrite', 'name' => 'isCatalogName',
       'description' => 'isString', 'description_short' => 'isString', 'available_now' => 'isGenericName', 'available_later' => 'IsGenericName');



ajoutez :

'equipement' => 'isString'




Dans admin/tabs/AdminProduct.php :

ajoutez vers la ligne 1912:

echo '  
'.$this->l('Equipement :').'
';
       foreach ($this->_languages as $language)
           echo '        
                               <textarea class="rte" cols="100" rows="20" id="equipement_'.$language['id_lang'].'" name="equipement_'.$language['id_lang'].'">'.htmlentities(stripslashes($this->getFieldValue($obj, 'equipement', $language['id_lang'])), ENT_COMPAT, 'UTF-8').'</textarea>
';
       echo '        
';



Dans votre fichier product.tpl de votre thème actif :
ajoutez là ou vous voulez que ce champ s'affiche

{if $product->equipement}{$product->equipement}{/if}



Voilà , j'éspère que celà fonctionnera pour vous , chez moi celà fonctionne.

Link to comment
Share on other sites

De rien , je t'avoue que j'ai tellement galéré pour y arriver que ca fait plaisir
de partager le truc et faire gagner du temps.

Merci pour l'info du isCleanHtml ( à voir si c plus sur avec ou sans)
Je crois que le isCleanHtml permet de vérifier qu'il n'y a pas de mauvais code injecté.. (à confirmer)

Link to comment
Share on other sites

Hello,

En fait j'ai ajouté un champ avec editeur de texte, c'est pour cela que ça ne marchait pas avec isCleanHtml.
J'ai également réussi à ajouter un champ personnalisé dans la fiche catégorie dans le BO. Je publierai un tuto dès que j'aurai un peu de temps.

Link to comment
Share on other sites

  • 1 month later...

bonjour, je viens d'essayer en suivant le tuto mais ca fonctionne pas j'ai pas el champ dnas la fiche produit.
comme évoqué dans un autre post je souhaite ajouter un champ pour indiquer que mon article est d'occasion puis ajouter un macaron comme pour els soldes mais pour les articles d'occase.
si vous avez des idées...

Link to comment
Share on other sites

bonjour,
je viens d'essayer en suivant le tuto mais ca fonctionne pas j'ai pas el champ dnas la fiche produit.
comme évoqué dans un autre post je souhaite ajouter un champ pour indiquer que mon article est d'occasion puis ajouter un macaron comme pour els soldes mais pour les articles d'occase.
si vous avez des idées...

Link to comment
Share on other sites

  • 2 months later...

Bonjour

Il existe une solution _beaucoup_ plus simple si vous avez simplement besoin d'un champ texte ou d'un menu déroulant.

Dans le Backoffice: Onglet *Catalogue* puis *Caractéristiques*, vous définissez les attributs supplémentaires à ajouter a votre produit.
Ensuite vous pourrez remplir ces attributs pour chaque produit dans la fiche produit à l'onglet *Caract.*

Enfin sur le Frontoffice, si ces caractéristiques supplémentaires sont disponible, un onglet *Fiche technique* apparaîtra contenant ces fameuses caractéristiques. Sinon cet onglet restera masqué.

--
Cédric Talpaert
http://www.numeriforge.com

Link to comment
Share on other sites

  • 2 months later...
  • 2 weeks later...

Bonsoir

Oui effectivement pour mon site, comme on dit c'est toujours le cordonnier le plus mal chaussé, il va bien falloir que je me décide à y passer un peu de temps dessus.
Mais pour revenir à la question posée, voici un exemple concret avec la fiche produit du template fourni avec Prestashop (version 1.3.3.0)

fichier themes/prestashop/product.tpl ligne 330 à 343

{if $product->description || $features || $accessories || $HOOK_PRODUCT_TAB || $attachments}


       {if $product->description}{l s='More info'}{/if}
       {if $features}{l s='Data sheet'}{/if}
       {if $attachments}{l s='Download'}{/if}
       {if isset($accessories) AND $accessories}{l s='Accessories'}{/if}
       {$HOOK_PRODUCT_TAB}


   {if $product->description}
       <!-- full description -->
{$product->description}
   {/if}
Link to comment
Share on other sites

  • 1 month later...

Bonjour,

Ce poste date mais je crois qu'il serait une bonne solution à ce que je recherche.
Est il possible de mettre un code pour que cette caractéristique qu'on met sous le prix, s'affiche également sous le prix dans product-list?

Link to comment
Share on other sites

Oui bien sûr, il suffit de placer $product->description entre les balises {foreach} dans le fichier product-list.tpl

>
   <!-- Products list -->
</pre>
<ul>
   {foreach from=$products item=product name=products}


[...]

$product->description

[...]


   {/foreach}
</ul>
<br>   <!-- /Products list --&gt



Note, les [...] représente du code SMARTY et HTML qui constitue la structure du bloc, a vous de voir à quel endroit il convient de le placer.

Link to comment
Share on other sites

  • 4 weeks later...

Merci pour les infos,

J'ai un besoin bien particulier sur prestashop 1.3.X c'est d'ajouter des champ date_debut et date_fin dans la table product.

J'ai ajouter les champs dans la base en DATETIME puis dans la classe Product. En fin, dans le tab AdminProduct.

Par contre, a l'enregistrement de la nouvelle fiche produit la date n'est pas conservée elle reste à 0000-00-00 00:00:00

Si quelqu'un a une piste ...

Bonne journée

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