[Résolu] Missing argument dans le construct d'un plugin

flipflipflipflip Member
janvier 2012 modifié dans Entraide
Bonjour,

Sur un plugin qui comporte une page admin.php j'essaie d'inclure la classe de mon plugin donc au début du fichier admin.php je fais
require_once('plxgaleries.php');
$plxGaleries = new plxgaleries();

Et lorsque je vais sur ma page admin.php du plugin j'ai le message
Warning: Missing argument 1 for plxgaleries::__construct(), called in /.../plugins/plxgaleries/admin.php on line 5 and defined in /../plugins/plxgaleries/plxgaleries.php on line 15

Et voila le début de ma classe avec le __construct
class plxgaleries extends plxPlugin {

	public $aGaleries = array();

	public function __construct($default_lang) {

		# Appel du constructeur de la classe plxPlugin (obligatoire)
		parent::__construct($default_lang);
		
		$this->getGaleries();

		# droits pour accèder à la page config.php du plugin
		$this->setConfigProfil(PROFIL_ADMIN);

		#  limite l'accès à l'écran d'administration du plugin
		$this->setAdminProfil(PROFIL_ADMIN, PROFIL_MANAGER, PROFIL_MODERATOR, PROFIL_EDITOR, PROFIL_WRITER);

		# Ajouts des hooks
		$this->addHook('plxMotorPreChauffageBegin', 'plxMotorPreChauffageBegin');
		$this->addHook('plxShowStaticListEnd', 'plxShowStaticListEnd');
		$this->addHook('plxgalerieDisplay', 'plxgalerieDisplay');
		$this->addHook('ThemeEndHead', 'plxgalerieCss');
		$this->addHook('plxShowPageTitle', 'plxShowPageTitle');
	}

De ce que je comprends c'est un problème avec la variable $default_lang qui n'est pas présente lors de l'appel depuis admin.php mais je vois pas trop comment la fournir au construct.

Merci d'avance.

J'ai un string de l'array

Réponses

  • Si c'est la page d'admin du plugin, je ne pense pas qu'il faille inclure la classe en début de fichier.
    Si tu as besoin des méthodes de ton plugin, essaie de les appeler de façon statique (plxgaleries::methode();) ou par l'intermédiaire de $plxPlugin->plxgaleries->méthode();

    Ou essaie en faissant
    $plxGaleries = plxgaleries::getInstance();
    

    Tiens nous informés.
  • StéphaneStéphane Member, Former PluXml Project Manager
    Ou alors déporte tes fonctions "métiers" dans une autre classe, qui elle pourra etre inclue là où tu en a besoin.

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • Stéphane a écrit:
    Ou alors déporte tes fonctions "métiers" dans une autre classe, qui elle pourra etre inclue là où tu en a besoin.

    J'allai le dire :p
  • Ou alors déporte tes fonctions "métiers" dans une autre classe, qui elle pourra etre inclue là où tu en a besoin.
    C'est ce que j'avais fais au début mais j'ai besoin de certaine fonction à la fois côté admin et côté public donc je voulais les dupliquer.

    Je vais faire différent essais et je vous tiens au courant.

    J'ai un string de l'array

  • flipflipflipflip Member
    janvier 2012 modifié
    Salut,
    $plxGaleries = plxgaleries::getInstance();
    
    Me donne :
    Fatal error: Call to undefined method plxgaleries::getInstance() in /.../plugins/plxgaleries/admin.php on line 6

    Forcement je n'ai pas de fonction getInstance, j'ai regardé dans le fichier class.plx.glob.php il y a un getInstance mais je sais pas trop comment l'adapter pour l'intégrer dans ma class.

    J'ai essayé $plxPlugin->plxgaleries->aGaleries (normalement ce tableau contient les galeries enregistrées) mais il est ne se remplie alors qu'il se remplie avec mon code initial. J'ai essayé $plxGaleries = $plxPlugin->plxgaleries; mais rien à faire le pire est que pour ces deux derniers cas je n'ai pas d'erreur.

    J'ai un string de l'array

  • StéphaneStéphane Member, Former PluXml Project Manager
    Salut

    voilà ce que doit etre le squelette de ta classe
    
    class plxgaleries {
    
    	private static $instance = null;
    
    	/**
    	 * Constructeur qui initialise les variables de classe
    	 *
    	 **/
    	private function __construct() {
    	}
    
    	/**
    	 * Méthode qui se charge de créer le Singleton plxgaleries
    	 *
    	 **/
    	public static function getInstance(){
    		if (!isset(self::$instance)) {
    			self::$instance = new plxgaleries();
    		}
    		return self::$instance;
    	}
    	
    }
    

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • Donc ça marche presque, disons que j'arrive au même résultat que si je faisais un include comme au début mais j'ai toujours le même message de missing argument. Voila le début de ma classe
    class plxgaleries extends plxPlugin {
    
    	public $aGaleries = array();
    	private static $instance = null;
    
    	public function __construct($default_lang) {
    
    		# Appel du constructeur de la classe plxPlugin (obligatoire)
    		parent::__construct($default_lang);
    		
    		$this->getGaleries();
    
    		# droits pour accèder à la page config.php du plugin
    		$this->setConfigProfil(PROFIL_ADMIN);
    
    		#  limite l'accès à l'écran d'administration du plugin
    		$this->setAdminProfil(PROFIL_ADMIN, PROFIL_MANAGER, PROFIL_MODERATOR, PROFIL_EDITOR, PROFIL_WRITER);
    
    		# Ajouts des hooks
    		$this->addHook('plxMotorPreChauffageBegin', 'plxMotorPreChauffageBegin');
    		$this->addHook('plxShowStaticListEnd', 'plxShowStaticListEnd');
    		$this->addHook('plxgalerieDisplay', 'plxgalerieDisplay');
    		$this->addHook('ThemeEndHead', 'plxgalerieCss');
    		$this->addHook('plxShowPageTitle', 'plxShowPageTitle');
    	}
    
    	/**
    	 * Méthode qui se charge de créer le Singleton plxgaleries
    	 *
    	 **/
    	public static function getInstance(){
    		if (!isset(self::$instance)) {
    			self::$instance = new plxgaleries();
    		}
    		return self::$instance;
    	}
    ....
    }
    

    J'ai un string de l'array

  • StéphaneStéphane Member, Former PluXml Project Manager
    Tu ne peux pas inclure manuellement une classe dérivée de plxPlugin dans tes sources.
    C'est le moteur de plugin qui charge la classe du plugin en passant le parametre au constructeur.

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • Ok, donc depuis mon fichier admin.php comment je fais pour atteindre une fonction contenue dans la classe de mon plugin ? $plxShow->plxPlugin->plxgaleries->fonction(); ?

    J'ai un string de l'array

  • StéphaneStéphane Member, Former PluXml Project Manager
    $plxMotor = plxMotor::getInstance();
    $plxPlugin = $plxMotor->plxPlugins->getInstance('monPlugin');
    

    remplace monPlugin par le nom de ton plugin

    apres tu peux accèder aux fonctions avec
    $plxPlugin->mafonction();
    

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • Parfait ça marche avec ta solution Stéphane, merci.

    J'ai un string de l'array

Connectez-vous ou Inscrivez-vous pour répondre.