Jump to content

[resolu] Un override de $definition qui ne fonctionne pas


Recommended Posts

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 by maniT4c (see edit history)
Link to comment
Share on other sites

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

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

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

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

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);
	}
  • Like 1
Link to comment
Share on other sites

  • 2 years later...

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