Ayant voulu créer un objet personnalisé dans Magento, j’ai été confronté à pas mal de problèmes, dont un des plus ennuyant : créer un attribut de type array() dans une classe qui hérite de Varien_Object !

Quelque chose qui paraît simple au premier coup d’oeil, mais qui s’avère beaucoup plus complexe si on ne connait pas l’astuce pour s’en sortir! Et si tu tombes sur cet article pour le même problème que moi, j’espère que tu criera Allelujah en lisant cet article 🙂

Voyons tout d’abord ce que dis Magento quand on veut créer un array en tant qu’attribut de classe qui hérite de Varien Object. Voici le code que l’on aurait du avoir :

class MiniMax_MonModule_Model_MonObjet extends Varien_Object
{
	protected $_monarray = array();

	public function getMonArray(){ $this->monarray;}

	public function setMonArray($value){
		$this->monarray[] = $value;
	}
}

Mais quand on utilise notre objet dans une collection et que l’on souhaite l’afficher dans un grid par exemple (non non ce n’est pas le thème d’un de mes prochain articles :p), notre cellule est vide, et quand on affiche notre objet on constate que notre array ne contient strictement rien 🙁 :

MiniMax_MonModule_Model_MonObjet Object
                (
                    [_monarray:protected] => Array
                        (
                        )

                    [_data:protected] => Array
                        (
                        )

                    [_hasDataChanges:protected] => 1
                    [_origData:protected] => 
                    [_idFieldName:protected] => 
                    [_isDeleted:protected] => 
                    [_oldFieldsMap:protected] => Array
                        (
                        )

                    [_syncFieldsMap:protected] => Array
                        (
                        )

                )

J’ai essayé beaucoup de solutions, me faisant chaque fois recalé par Magento… J’ai voulu, par exemple, déclarer mon array en surchargeant la fonction __construct(), et d’autres bidouilles qui ne m’amenaient nul part… Mais trêve de bavardages! Je vous donne le code de ma classe :

class MiniMax_MonModule_Model_MonObjet extends Varien_Object
{
	protected $_monarray; // c'est un tableau !

	// Le getter ne sert à rien car généré par Magento, mais bon j'aime bien le mettre quand même (puritain peut-être?)
	public function getMonArray(){ $this->monarray;}

	// La fonction magique !!
	public function setMonArray($value){
		if(is_array($this->monarray))
			$this->monarray= array_merge(array($value),$this->monarray);
		else
			$this->monarray= array($value);
	}

}

Et voilà ! Quand on affiche notre objet on a quelque chose dans notre tableau désormais :

MiniMax_MonModule_Model_MonObjet Object
                (
                    [_monarray:protected] => 
                    [_data:protected] => Array
                        (
                            [monarray] => Array
                                (
                                    [0] => Ma Valeur
                                    [1] => Ma Valeur 2
                                    [2] => Ma Valeur 3
                                )
                        )

                    [_hasDataChanges:protected] => 1
                    [_origData:protected] => 
                    [_idFieldName:protected] => 
                    [_isDeleted:protected] => 
                    [_oldFieldsMap:protected] => Array
                        (
                        )

                    [_syncFieldsMap:protected] => Array
                        (
                        )

                )

Je vous expliquerai dans un autre article comment l’afficher sous forme de liste dans un Grid Layout de l’admin Magento 😉

Créer un attribut Array dans une classe Varien Object dans Magento
Taggé sur :            

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Nous utilisons des cookies afin de nous assurer de vous proposer la meilleure expérience sur ce site.
Ok