Olivier CLEMENCE Posted May 5, 2014 Share Posted May 5, 2014 (edited) Bonjour, je met en place actuellement un override sur la class manufacturer sur une version 1.5.6. Je fait ça de manière classique et tout marche sans problème sauf l'enregistrement. C'est à dire que si je rempli manuellement mes champs en passant par ma bdd je les vois bien correctement remplis dans mon formulaire dans l'admin par contre, lorsque j'ajoute un nouveau manufacturer ou que j'en édite un déjà existant mes deux nouveaux champs ne sont pas prit en compte. Pourtant j'ai déjà employé cette méthode pour d'autre classe sans problème. Voici mon code: Pour la class manufacturer: class Manufacturer extends ManufacturerCore { public $link_text; public $warranty_desc; public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null) { $this->definition['fields']['link_text'] = array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isCatalogName', 'required' => false, 'size' => 256); $this->definition['fields']['warranty_desc'] =array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'); parent::__construct($id_product, $full, $id_lang, $id_shop, $context); } } Et j'ai bien rajouté mes deux champs dans mon adminManufacturerController (sinon je ne les verrai pas). Donc avec le code ci-dessus ça ne marche pas par contre si je ré-ecrit complètement la variable définition là ça marche (en lecture et ecriture). public static $definition = array( 'table' => 'manufacturer', 'primary' => 'id_manufacturer', 'multilang' => true, 'fields' => array( 'name' => array('type' => self::TYPE_STRING, 'validate' => 'isCatalogName', 'required' => true, 'size' => 64), 'active' => array('type' => self::TYPE_BOOL), 'date_add' => array('type' => self::TYPE_DATE), 'date_upd' => array('type' => self::TYPE_DATE), // Lang fields 'description' => array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'), 'short_description' => array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml', 'size' => 254), 'meta_title' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 128), 'meta_description' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 255), 'meta_keywords' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName'), 'link_text' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 256), 'warranty_desc' => array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'), ), ); Est-ce que quelqu'un pourrait m'expliquer pour quoi ça marche en overridans l'intégralité de la variable $definition et pas si je rajoute juste mes deux champs dans le tableau fields ?. Edited May 12, 2014 by maniT4c (see edit history) Link to comment Share on other sites More sharing options...
herve25 Posted May 6, 2014 Share Posted May 6, 2014 Bonjour,Dans ce que je vois dans le code, dans la classe Manufacturer la fonction __construct() surchargée n'est pas la bonne ( A vue de nez c'est celle de la classe Product )Le nombre de paramètres ne correspond pas. Voici la fonction construct de la classe Manufacturer par défaut public function __construct($id = null, $id_lang = null) { parent::__construct($id, $id_lang); $this->link_rewrite = $this->getLink(); $this->image_dir = _PS_MANU_IMG_DIR_; } Ceci peut donc expliquer que la surcharge ne fonctionne pas. Link to comment Share on other sites More sharing options...
Olivier CLEMENCE Posted May 6, 2014 Author Share Posted May 6, 2014 Merci herve pour ta réponse très judicieuse car en effet j'ai la mauvaise habitude de faire des copié collé pour gagner du temps. Du coup tu as raison c'est bien un copié collé d'un override de la classe product. Malheureusement en corrigeant ça ne change rien: Voici mon nouvel override (qui ne marche donc toujours pas, même symptôme): public function __construct($id = null, $id_lang = null) { parent::__construct($id, $id_lang); $this->definition['fields']['link_text'] = array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 256); $this->definition['fields']['warranty_desc'] =array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'); } Link to comment Share on other sites More sharing options...
herve25 Posted May 12, 2014 Share Posted May 12, 2014 La variable $definition étant une variable statique, pour l'override j'utiliserais donc le code suivant : public function __construct($id = null, $id_lang = null) { parent::__construct($id, $id_lang); self::$definition['fields']['link_text'] = array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 256); self::$definition['fields']['warranty_desc'] =array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'); } ( De mon côté j'ai déjà surchargé des classes de cette manière avec succès ) Link to comment Share on other sites More sharing options...
Olivier CLEMENCE Posted May 12, 2014 Author Share Posted May 12, 2014 Merci pour ta réponse, là encore tu as raison... malheureusement ça ne marche toujours pas !!, toujours le même symptome (lecture pas de problème enregistrement ignoré uniquement sur ces deux champs). Pourtant le code me paraît correcte. Définition est initialisé par la classe parent via le parent::_construct puis overridé. Link to comment Share on other sites More sharing options...
herve25 Posted May 12, 2014 Share Posted May 12, 2014 Essaye peu-être avec la fonction __construct après la mise à jour des paramètres. + supprimer le fichier d'index des classes. public function __construct($id = null, $id_lang = null) { self::$definition['fields']['link_text'] = array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 256); self::$definition['fields']['warranty_desc'] =array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'); parent::__construct($id, $id_lang); } 1 Link to comment Share on other sites More sharing options...
Olivier CLEMENCE Posted May 12, 2014 Author Share Posted May 12, 2014 Ah oui c'est ça !!! et c'est logique car la variable definition est sans doute initialisée par le constructeur initial (object) du coup il ne reprend pas les infos que j'ajoute ensuite. Merci, pour ta patience ! Link to comment Share on other sites More sharing options...
herve25 Posted May 12, 2014 Share Posted May 12, 2014 Parfait c'est donc un problème réglé :-) !Un peu laborieux mais on a fini par trouver Link to comment Share on other sites More sharing options...
informatikadomicile Posted June 3, 2016 Share Posted June 3, 2016 Cela fonctionne effectivement en 1.6.0.5 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