Jump to content
bastienwilmotte

[Résolu] Afficher une valeur depuis "ps_product_lang"

Recommended Posts

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 by bastienwilmotte (see edit history)

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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.

 

 

Capture d'écran 2018-04-25 15.17.53.png

Share this post


Link to post
Share on other sites

Je ne sais pas où tu avais bricolé avant.

Peut-être directement dans le coeur, soit Product.php, soit le controlleur front ProductController.php

 

Share this post


Link to post
Share on other sites

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.

  • Thanks 1

Share this post


Link to post
Share on other sites

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!

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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 ¯\_(ツ)_/¯

Share this post


Link to post
Share on other sites

Encore moi! :ph34r:

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!

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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!

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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.

  • Like 1

Share this post


Link to post
Share on other sites

J'étais absent quelques jours, je viens de voir ton message.

Pense à passer le topic sur "[Résolu]".

Bonne journée

  • Like 1

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