bastienwilmotte Posted April 25, 2018 Share Posted April 25, 2018 (edited) Bonjour, J'ai migré un Prestashop de la v1.4.x à une v.1.6.x et après quelques bidouillages par-ci par-là tout roule correctement mais un champ personnalisé de type texte que j'avais sous la 1.4.x n'apparaît plus sur cette nouvelle version. C'était en fait le champ Description dupliqué pour le nommer Ingrédients et le faire afficher sur la fiche produit. Au niveau de la base de donnée tout est bon car j'ai bien mes valeurs qui sont dans ps_product_lang Voici comment était appelé le champ sur la 1.4.x: {$product->custom_ingredients} Evidemment ce champ n'apparait plus non plus dans l'admin mais il y a bien une valeur dans la base de données. Est-ce que la fonction d'appel a changé? Merci de votre aide! Edited May 3, 2018 by bastienwilmotte (see edit history) Link to comment Share on other sites More sharing options...
doekia Posted April 25, 2018 Share Posted April 25, 2018 Il te faut une override de Product.php pour ajouter le champs dans les fields et les requêtes. Ce que tu avait surement déjà dans ta 1.4. Vérifie override/Product.php maintenant, le coeur cherche dans overirde/classes Link to comment Share on other sites More sharing options...
bastienwilmotte Posted April 25, 2018 Author Share Posted April 25, 2018 Merci. Et si je ne l'ai pas je duplique Product.php et le place dans override alors? Link to comment Share on other sites More sharing options...
doekia Posted April 25, 2018 Share Posted April 25, 2018 ???? Ecrire une override ce n'est pas copier/coller cela est autrement plus subtile !!! Et je ne comprends pas "Et si" qu'est ce que ce conditionnel? tu as vérifié? Dans la 1.4 d'avant il y a avait forcément du code, sinon cela non plus n'aurait pas fonctionné. Retrouve le dans ton backup. Link to comment Share on other sites More sharing options...
bastienwilmotte Posted April 25, 2018 Author Share Posted April 25, 2018 J'ai un minimum vérifié avant de le dire ici donc oui il n'y a pas de product.php dans override (voir screenshot où j'ai tout déplié). Pareil dans le backup et c'est même pire puisqu'il y a même moins que ça. Par exemple sur le backup 1.4 il n'y a carrément pas de dossiers modules. Link to comment Share on other sites More sharing options...
doekia Posted April 25, 2018 Share Posted April 25, 2018 Je ne sais pas où tu avais bricolé avant. Peut-être directement dans le coeur, soit Product.php, soit le controlleur front ProductController.php Link to comment Share on other sites More sharing options...
bastienwilmotte Posted April 25, 2018 Author Share Posted April 25, 2018 Je reprends un projet et c'est dans Product.php Link to comment Share on other sites More sharing options...
BeComWeb Posted April 25, 2018 Share Posted April 25, 2018 Salut Bastien. Reprend un tuto qui explique comment ajouter un champ custom aux produits comme celui-ci. Tu verras c'est pas sorcier. Tu as déjà ta colonne dans ta base de données, donc forcément tu zappes cette partie. 1 Link to comment Share on other sites More sharing options...
bastienwilmotte Posted April 26, 2018 Author Share Posted April 26, 2018 Merci BeComWeb! Après quelques bidouillages ça fonctionne sans passer par l'override et c'est ça que je ne pige pas. De même pour Product.php que j'ai dû créé pour que ça fonctionne alors qu'en 1.4 on dirait que c'était fait aussi autrement... Ici ma principale crainte était de ne pas pouvoir récupérer les ingrédients encodés pour 1700 produits (FR et EN) mais c'est maintenant bon. Pour démarrer de zéro le tuto donné fonctionnerait parfaitement. Merci! Link to comment Share on other sites More sharing options...
doekia Posted April 26, 2018 Share Posted April 26, 2018 Sans passer par l'override ? Le tuto fonctionne parfaitement ? Le tuto est une override ! Et comme tu le vois il ne faut pas copier/coller l'intégralité de Product.php Link to comment Share on other sites More sharing options...
bastienwilmotte Posted April 26, 2018 Author Share Posted April 26, 2018 Pour Product.php: ok, vu et compris Pour le reste: oui en effet le tuto ne mène que dans cette direction et je comprends la logique de l'override mais cependant ça ne fonctionnait pas alors que mon code est exactement le même des deux côtés (et j'ai bien forcé Prestashop en supprimant index.class.php). Seul le fichier dans admin/templates/blablabla fonctionne donc tant pis, ça restera ainsi. Je me doute que ce n'est pas une bonne pratique ¯\_(ツ)_/¯ Link to comment Share on other sites More sharing options...
bastienwilmotte Posted April 27, 2018 Author Share Posted April 27, 2018 Encore moi! Comme le but était de récupérer les données déjà écrites en base de données je ne m'étais pas penché sur l'ajout d'un nouveau produit avec le champ complété. Lorsque je veux créer/éditer un produit et que je souhaite modifier un champ j'obtiens cette erreur qui apparait en haut de page: Property Product->custom_ingredients is not valid custom_ingredients étant mon nouveau champ perso. Merci! Link to comment Share on other sites More sharing options...
bastienwilmotte Posted April 30, 2018 Author Share Posted April 30, 2018 Salut! J'ai toujours le problème et je pense que ça vient du fait qu'il n'y a pas la table dans ps_product mais dans ps_product_lang Par rapport au tuto je ne sais pas trop quoi faire du coup puisque, pour rappel, sur le site public j'ai bien les ingrédients affichés (issus de l'encodage avant la migration du site) mais l'édition ou la création d'un nouveau produit ne fonctionne pas. Merci! @BeComWeb Link to comment Share on other sites More sharing options...
doekia Posted April 30, 2018 Share Posted April 30, 2018 Et ... si tu te décidais à mettre en copie le code que tu as bricolé? Maintenant si tu as déclaré un champs supplémentaire obligatoire, il est impossible pour Prestashop d'enregistrer ta fiche si ce champ manque. Logique. Il me semble que le tuto que l'on t'a donné en référence est particulièrement clair sur les éléments à modifier. Relis, comprends, appliques Link to comment Share on other sites More sharing options...
bastienwilmotte Posted April 30, 2018 Author Share Posted April 30, 2018 Le code bricolé c'est du tuto justement. L'étape que j'ai sauté c'est concernant la base de donnée et c'est justement la question que je pose pour avoir une piste. Le contenu de ce champ (qui n'est pas obligatoire en passant) est dans ps_product_lang et voici ce que j'ai dans Product.php en override: <?php class Product extends ProductCore { public $custom_ingredients; public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null) { self::$definition['fields']['custom_ingredients'] = array('type' => self::TYPE_STRING, 'validate' => 'isString'); parent::__construct($id_product, $full, $id_lang, $id_shop); } } Et en admin voici ce que j'ai: <div class="form-group"> <div class="col-lg-1"><span class="pull-right">{include file="controllers/products/multishop/checkbox.tpl" field="custom_ingredients" type="tinymce" multilang="true"}</span></div> <label class="control-label col-lg-2" for="custom_ingredients_{$id_lang}"> <span class="label-tooltip" data-toggle="tooltip" title="{l s='Ingredients'}"> {l s='Ingredients'} </span> </label> <div class="col-lg-9"> {include file="controllers/products/textarea_lang.tpl" languages=$languages input_name='custom_ingredients' class="autoload_rte" input_value=$product->custom_ingredients } </div> </div> Moi mon but ici c'est de me faire aider et d'échanger pour comprendre. Je ne suis pas sur ce forum pour rien. J'émets une hypothèse en parlant de ps_product et ps_product_lang mais je n'en sais pas plus. Merci! Link to comment Share on other sites More sharing options...
doekia Posted April 30, 2018 Share Posted April 30, 2018 le tuto ne déclare pas un champ multi-langue, ta modif oui, donc déplace ton champ dans ps_product_lang c'est bien de vouloir suivre un tuto mais a condition de rester dans le cas de ce dernier ou d'avoir la compétence de comprendre ce que l'on veut faire varier. J'aide mais je n'ai aucun don de télépathie. Et surtout chaque fois tu mets en doute les réponses - dès le début je parle d'une override, dès le début je te dis que ce n'est pas si simple mais tu n'entends pas Link to comment Share on other sites More sharing options...
bastienwilmotte Posted April 30, 2018 Author Share Posted April 30, 2018 Je me suis basé sur le champ description qui se trouve dans Product.php dans le core donc j'ai remplacé ceci du tuto: self::$definition['fields']['custom_ingredients'] = array('type' => self::TYPE_STRING, 'validate' => 'isString'); Par ceci dans l'override: self::$definition['fields']['custom_ingredients'] = array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'); Et les modifs prennent effets. Merci. 1 Link to comment Share on other sites More sharing options...
BeComWeb Posted May 3, 2018 Share Posted May 3, 2018 J'étais absent quelques jours, je viens de voir ton message. Pense à passer le topic sur "[Résolu]". Bonne journée 1 Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now