Jump to content
Reseaux

champ supplémentaire fiche produit

Recommended Posts

Bonjour,

 

J'ai réussi à ajouter un champ supplémentaire en suivant le tuto de Pauline http://www.paulineghiazza.fr/ajouter-un-champ-dans-le-backoffice-prestashop-1-5

 

Je suis sous Presta 1.6

Aujourd'hui je voudrais pouvoir afficher ce champ sur ma page "product-list" et sur ma page d'accueil à la presentation des produits.
 

Comment faire pour insérer ce nouveau champs dans product-list.tpl?
{$product->pointsforts} n’affiche rien…

 

Malgré tout lorsque j'éxamine mon élément, celui trouve bien <div class="pointsforts">{$product->pointsforts}</div> mais ne retranscrit pas le {$product->pointsforts}...

 

Merci infiniment pour votre aide

 

 

Share this post


Link to post
Share on other sites

Bonjour,

 

Le problème est certainement lié au fait que la nouvelle valeur n'est pas lue dans la base de donnée et donc que la variable {$product->pointsforts} n'est pas alimentée.

 

Neza.

Share this post


Link to post
Share on other sites

Bonjour,

je rencontre le même problème, je voudrai avoir la solution pour ajouter avec succès un champ supplèmentaire à la fiche produit, je suis tombé sur le tuto indiqué ci-dessus et un autre, je cherche également dans les forums anglophones.

Si vous avez eu solution à votre problème merci de me dire.

MERCI D'AVANCE !

Share this post


Link to post
Share on other sites

J'ai finalement réussi,

Au lieu d'appeler mon nouveau champs comme ceci: {$product->pointsforts}, je l'ai remplacer par {$product.pointsforts}.

Share this post


Link to post
Share on other sites

Merci pour ta réponse, mis à part celà tu as suivi à la lettre le tuto de http://www.paulineghiazza.fr/ajouter-un-champ-dans-le-backoffice-prestashop-1-5/ ?

Peux-tu égaleement m'indiquer la table que tu as du modifier en base de données. Est-ce : Table: pre9018_cart_product

 

Merci pour toute réponse.

Car je dois également modifier la table client si tu peux me préciser la table à toucher ce serait cool.

J'attends ta réponse, juste pour savoir si le tuto est bon, si je dois remplacer toutes les occurences de {$product->pointsforts} par {$product.pointsforts}.

 

Merci d'avance.

Share this post


Link to post
Share on other sites

Bonjour,

 

 

I ) Ajout du champ dans la base de données

Rendez-vous dans votre base de données et ajoutez un champ « pointsforts » de type « Text » dans la table PREFIX_product_lang.

A priori je dirai cette table là ;)

 

Bonne journée ! :)

Share this post


Link to post
Share on other sites

Bonjour,

je vois la table pre9018_cart_product dans ma base de donnée je vois pas la table dont tu parles par contre cette table compte 7 attributs (id_cart,id_product,id_address_delivery,id_shop,id_product_attribute,quantity,date_add).

C'est bien cette table que tu as modifiée?

Aides moi juste pour cet exemple je me débrouillerai pour les clients.

 

Merci encore.

Share this post


Link to post
Share on other sites

Bonsoir,

 

Ta table cart_product est juste mais ne concerne pas cette partie là, elle est liée au panier (cart en anglais).

 

Quelle version de Prestashop utilises-tu ?

 

Tu ne possèdes pas de table product_lang ? Si c'est effectivement le cas, tu devrais avoir un ÉNORME souci au niveau des produits.

 

Peut-être as-tu un problème de compréhension plus global de la base de données ?

Est-ce que le nom de tes tables commencent toujours de la même manière ? Par "pre9018" par exemple (puisque devant ta table cart_product c'est le cas) ?

Si c'est bien cela, la table que tu recherches est "pre9018_product_lang".

Share this post


Link to post
Share on other sites

Merci

Ikompagwec

J'utilise la version 1.6.1.1 de PRESTASHOP installé depuis le serveur d'OVH, pour les produits y a aucun souci car j'ai eu à enregistrer des produits et ils s'affichent bien, j'ai vu mon erreur (quel con je suis) ,je ne déroulais pas la liste des tables.J'ai bien vu la table de produits dont tu parles et elle posséde 12 attributs.

Je veyx juste savoir si ce tuto suffit à ajouter mon champ : http://www.paulineghiazza.fr/ajouter-un-champ-dans-le-backoffice-prestashop-1-5/ (en tenant en compte du post de Oser Reso, je ferai les modifications pour la table client tout seul car j'ai des foreign key à mettre en place et des champs à ajouter.

 

Merci de m'avoir éclairer et j'attends ta réponse sur le tuto.

Share this post


Link to post
Share on other sites

Please help ! je dois livrer mon site samedi.

Taches restantes :

1) Ajouter un champ à Produits

2) Ajouter un champ à Client ( genre celui qui l'a fait connaitre notre site, juste une adresse email).

 

Toute aide est la bienvenue !

Merci.

Share this post


Link to post
Share on other sites

Bonjour,

 

Ce tutoriel doit effectivement bien marcher pour ta version.(en prenant compte des conseils d'Oser Reso)

 

Pour ton champ Client, l'information doit apparaître dans le BO ou également à l'inscription ? (C'est le client qui rentre l'information ?)

 

Tu peux regarder ici, je n'ai pas testé mais ça pourrait t'aider.

http://www.actiaweb.com/activ/ajout-champ-cr%C3%A9ation-de-compte-prestashop.html

https://www.prestashop.com/forums/topic/57590-tutorial-devforever-ajouter-un-champ-obligatoire-au-formulaire-d%E2%80%99inscription/

Edited by Ikompagwec (see edit history)

Share this post


Link to post
Share on other sites

Merci pour ta réponse.

Pour le client, l'information doit aussi apparaitre dans les deux cas, il doit préciser son parrain en entrant l'adresse email du concerné, qui est également client, là y a un foreign à mettre en place, je me débrouillerai.

Moi je trouve le tuto que j'ai indiqué trop minimaliste pour gérer tout , un si petit bout de code gèrant un CRUD (CREATE, READ, UPDATE ,DELETE) ????? tu trouves pas?

Le champ pour les produit est un champ points, chaque produit est associé à une cote,le parrain bénéficie d'une part des cotes du produits (qu'il pourra échanger dans le magasin).

Je dois coder au plus tard cette nuit à fond non stop jusqu'à l'achèvement, c'est pour ça je veux recueillir le maximum de bonnes infos.

 

Merci si tu peux me guider.

Share this post


Link to post
Share on other sites

Pour les produits, ce tutoriel suffit, on ne créé qu'un champ d'un produit, et non pas une nouvelle entité Produit.

Il faudra en revanche que tu mettes ton champ en entier et non pas en chaine de caractères comme c'est le cas dans le tutoriel. Pour cela, tu peux t'inspirer des autres champs existants déjà sur les produits (voir la classe Product).

 

Pour les clients les liens que je t'ai donné m'avait l'air de pouvoir bien te guider.

 

Désolé si je ne t'aide pas plus, je n'ai pas forcément le temps pour l'instant.

Share this post


Link to post
Share on other sites

Merci j'avais déjà commencé, mais quand je suis tombé sur ce post disant que ça marchait pas je me suis arrêté, j'ai bien mis le champs en INT en m'inspirant des autres champs.

ça va devoir aller, à moi de jouer !

 

Bonne journée et merci beaucoup !

Share this post


Link to post
Share on other sites

Salut à tous !

Je livre mon site demain, merci encore pour votre aide, j'ai tout mis en place et je crois que c'est bon.

Là je veux une requête imbriquée en SQL , en fait j'ai un système de parrainage, l'idée est que chaque produit est coté en points (Valeur en euros), dès que le client valide sa commande tous les points de son panier sont partagés entre le parrain (un rang plus haut) et ceux qui font partie de la chaine de son parrain, un système de chainage.

Si vous avez un code similaire sous la main merci de me le filer et me dire où le mettre .

En vous remerciant d'avance.

J'adapterai tout code.

Share this post


Link to post
Share on other sites

Salut je suis entrain de tester l'ajout de nouveaux produits avec mon champ points qui est un int.

J'ai une erreur à l'ajout car il prend le point comme un array, est-ce-que ça vient de la définition du champ dans la classe Product?

 

Merci pour toute réponse.

Share this post


Link to post
Share on other sites

Dans informqtions.tpl j'ai ce code :

 

<div class="form-group">
               <label class="control-label col-lg-3 required" for="points">
            <span class="label-tooltip" data-toggle="tooltip"
            title="{l s='La valeur en entier du produit, cette valeur sera redistribuée à la chaine.'}">
                {$bullet_common_field} {l s='Points'}
            </span>
        </label>
               <div class="col-lg-1">
            <input type="text" id="points" name="points" value="{$product->points}" />
        </div>
        </div>

 

Quand j'enregistre j'ai une erreur.

Share this post


Link to post
Share on other sites

Bonjour,

 

A priori je dirai que ton code est juste dans le .tpl, donc regarde plutôt du côté de la classe. Sans avoir l'erreur sous les yeux, je ne pourrai pas t'en dire plus.

 

Si tu veux que je jette un oeil à ton code de la classe quand je le pourrai, tu peux le poster ici aussi.

Share this post


Link to post
Share on other sites

Voici ma classe Product :

 

<?php
 
class Product extends ProductCore
{
    public $points;
 
    public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null)
    {
      Product::$definition['fields']['points'] = array('type' => self::TYPE_INT, 'multilang' => true, 'validate' => 'isUnsignedInt');
      parent::__construct($id_product, $full, $id_lang, $id_shop, $context);
    }
 
}
?>

Share this post


Link to post
Share on other sites

J'ai juste cette erreur :

 

Une erreur s'est produite pendant la création de l'objet. product

Share this post


Link to post
Share on other sites

En m'inspirant du champ Nom du produit j'ai modifié le champ Points :

 

    <div class="form-group">
        <div class="col-lg-1"><span class="pull-right">{include file="controllers/products/multishop/checkbox.tpl" field="points" type="default" multilang="true"}</span></div>
        <label class="control-label col-lg-2 required" for="points_{$id_lang}">
            <span class="label-tooltip" data-toggle="tooltip" title="{l s='La valeur en points du produit.'} {l s='Invalid characters:'} <>;=#{}">
                {l s='Points'}
            </span>
        </label>
        <div class="col-lg-5">
            {include file="controllers/products/input_text_lang.tpl"
                languages=$languages
                input_class="{$class_input_ajax}{if !$product->id || Configuration::get('PS_FORCE_FRIENDLY_PRODUCT')}copy2friendlyUrl{/if} updateCurrentText"
                input_value=$product->points
                input_name="points"
                required=true
            }
        </div>
    </div>

 

Le problème est surement ailleurs.

Pourtant la classe Product m'a l'air bien, je pense que le souci est que je lui dis à aucun moment de le mettre en base de données, j'ai regardé le code du Product par défaut , j'ai pensé surcharger la fonction update pour mettre à jour mon champ points ?????

J'ai raison n'est ce pas? C'est bien beau de voir le champ Points lors de la saisie mais faut le stocker quelque part.

Share this post


Link to post
Share on other sites

J'ai réglé mon problème,je me demande bien où j'avais créé le champ en base de données mais pas dans la bonne table, j'ai juste activé le mode DEBUB à true, puis j'ai vu l'erreur.

 

Merci !

Share this post


Link to post
Share on other sites

Le problème que j'ai maintenant c'est qu'il met mon champ à zéro !!!!!!

grrrrrrrr !

Share this post


Link to post
Share on other sites

Bonjour

 

Je n'ai vu aucune erreur précédemment, ni dans ton .tpl, ni dans ta classe.

 

As-tu penseéà suivre ces recommandations ?

 

Çà ne fonctionne pas ?
Solution 1

En cas de problème, vérifiez que la compilation est bien désactivée.

Pour cela, rendez-vous dans Paramètres avancés > Performances et modifiez les options suivantes :

  • Cache des templates : Forcer la compilation à chaque appel
  • Cache : Non (X)
  • Pour les versions 1.5.6, cliquez aussi sur le bouton « Effacer le cache de Smarty et le cache de l’Autoload ».

Une fois cela fait, réessayez. Cela devra fonctionner.

Si tout est bon, pensez cependant à re-modifier ces informations et de les remettre sur :

  • Cache des templates : Ne jamais recompiler les fichiers de templates
  • Cache : Oui

Sans quoi, votre site va se mettre à ramer horriblement.

 

Solution 2

De plus, si vous venez de créer les fichiers overridés spécifiquement pour ce tuto, il est impératif de vider le cacher de l’autoload.

Pour ce faire, vous pouvez :

  • supprimer le fichier class_index.php dans le dossier /cache
  • en 1.5.5+, aller dans Préférences > Performances et en cliquant sur « Vider le cache » dans la toolbar

 

Si tu définis ton champ dans la classe, tu n'as pas besoin de modifier l'update.

Share this post


Link to post
Share on other sites

Excuse moi, je n'avais pas vu tes réponses d'avant ;)

 

Je me souviens avoir eu des problèmes de champs qui prennait une valeur 0 mais je ne sais plus quelle était mon erreur. Je pense que ça veut juste dire qu'il ne récupère pas la valeur de ton champ et mets la valeur par défaut.

 

 

Pour ma part j'avais créé il y a quelques temps, j'avais fait comme cela:

<div class="form-group">
            <label class="control-label col-lg-3 " for="points">
                <span class="label-tooltip" data-toggle="tooltip"
                    title="{l s='Points.'}">
                    {$bullet_common_field} {l s='Points'}
                </span>
            </label>
            <div class="col-lg-3">
                <input maxlength="13" type="text" id="points" name="points" value="{$product->points|htmlentitiesUTF8}" />
            </div>
        </div>

Et dans ma classe

 /** @var integer */
    public $points;

    public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null)
    {
     self::$definition['fields']['points'] = array('type' => self::TYPE_INT, 'validate' => 'isInt', 'size' => '13');
        parent::__construct($id_product, $full, $id_lang, $id_shop, $context);
    }

A priori c'est exactement ce que tu as fait. La seule différence est la version de Prestashop (je suis en 1.6.0.5) mais je doute qu'il y ait eu des changements à ce sujet.

Edited by Ikompagwec (see edit history)

Share this post


Link to post
Share on other sites

Le nombre tapé est bien enregistré en base de données , ça j'ai vérifié, mais lorsque je veux modifier le produit j'ai des trucs bizarres, il me dit "Array" sur ce champ  ?????

 

HELP !!!!!!!

Share this post


Link to post
Share on other sites

Donc la valeur du champ est bien enregistrée mais l'affichage met "0" quoi qu'il arrive, c'est bien ça?

 

Pourrais-tu donner l'erreur exacte "Array" ? Et dans quelles circonstances tu as cette erreur ?

Share this post


Link to post
Share on other sites

Le champ Points est bien en entier dans la base de données, quand je clique sur modifier,sur le champ je vois juste "Array" ?

C'est bizarre !!!!

Là il met plus de 0, juste Array !

Edited by 2mdee (see edit history)

Share this post


Link to post
Share on other sites

Heureux de l'apprendre :)

 

Peut-être pourrais-tu partager la solution pour les prochaines qui rencontreront ce même problème ?

 

Bonne continuation !

Share this post


Link to post
Share on other sites

Prestashop 1.6.1.1

 

Classe Produit :

 

<?php
 
class Product extends ProductCore
{
    public $points;
 
    public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null)
    {
      self::$definition['fields']['points'] = array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt');
      parent::__construct($id_product, $full, $id_lang, $id_shop, $context);
    }
 
}
?>

 

 

Dans informations.tpl, le champ concernant mon champ points (entier),je me suis inspiré du champ reference :

 

<div class="form-group">
               <label class="control-label col-lg-3 required" for="points">
            <span class="label-tooltip" data-toggle="tooltip"
            title="{l s='La valeur en entier du produit, cette valeur sera redistribuée à la chaine.'}">
                {$bullet_common_field} {l s='Points'}
            </span>
        </label>
               <div class="col-lg-3">
            <input maxlength="6" type="text" id="points" name="points" value="{$product->points|htmlentitiesUTF8}" />
        </div>
        </div>

 

Le code était là depuis le début mais j'ai touché à la classe en ne laissant que ce qui est présent dans le array et par magie ça a marché !

 

Merci pour tout !

Share this post


Link to post
Share on other sites

Bonjour,

 

Tout marchait vraiment bien lorsque j'ai ajouter le champs supplémentaire.

J'ai une multiboutique avec une boutique public et une boutique pro.

 

Mais depuis quelques jours, sur la boutique pro. j'ai quelques champs quand ont sautés.

Il sont toujours présents mais ce que j'ai saisi ne s'affiche pas.

Ce qui est étonnant c'est que c'est le même produits, avec la même fiche produit et que sur l'espace public le champs et la saisie s'affiche bien.

Edited by Oser Reso (see edit history)

Share this post


Link to post
Share on other sites

Bonjour,

 

Tout marchait vraiment bien lorsque j'ai ajouter le champs supplémentaire.

J'ai une multiboutique avec une boutique public et une boutique pro.

 

Mais depuis quelques jours, sur la boutique pro. j'ai quelques champs quand ont sautés.

Il sont toujours présents mais ce que j'ai saisi ne s'affiche pas.

Ce qui est étonnant c'est que c'est le même produits, avec la même fiche produit et que sur l'espace public le champs et la saisie s'affiche bien.

 

J'ai trouvé la solution,

 

Il suffit d'ajouter ‘shop’ => true dans la classe pour que le champs soit actif à 100% en multinboutique.

Edited by Oser Reso (see edit history)

Share this post


Link to post
Share on other sites

Bonjour,

 

Tout marchait vraiment bien lorsque j'ai ajouter le champs supplémentaire.

J'ai une multiboutique avec une boutique public et une boutique pro.

 

Mais depuis quelques jours, sur la boutique pro. j'ai quelques champs quand ont sautés.

Il sont toujours présents mais ce que j'ai saisi ne s'affiche pas.

Ce qui est étonnant c'est que c'est le même produits, avec la même fiche produit et que sur l'espace public le champs et la saisie s'affiche bien.

 

Finalement j'ai toujours le problème malgré que j'ai ajouter la balise ‘shop’ => true...

Quelqu'un aurait une solution ?

Edited by Oser Reso (see edit history)

Share this post


Link to post
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...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More