[Resolu] Accéder à $plxAdmin->aUsers

flipflipflipflip Member
janvier 2012 modifié dans Entraide
Bonjour,

Je réalise un plugin qui affiche dans une page statique un formulaire de connexion basé sur le fichier utilisateurs.xml, en gros comme celui de auth.php du répertoire /admin.

Le hic est que je ne sais pas trop comment accéder à $plxAdmin->aUsers, j'essaie de l'appeler depuis la class de mon plugin.

Philippe.

J'ai un string de l'array

Réponses

  • StéphaneStéphane Member, Former PluXml Project Manager
    déclare une instance de plxAdmin dans ton plugin
    $plxAdmin = plxAdmin::getInstance();
    

    tu peux après utiliser la variable $plxadmin pour accéder aux données de la classe

    Consultant PluXml

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

  • flipflipflipflip Member
    décembre 2011 modifié
    J'ai ajouté dans le __construct de mon plugin, dans la fonction ou j'en ai besoin de la class de mon plugin et à chaque fois j'ai le message :
    PHP Fatal error:  Class 'plxAdmin' not found in .../plugins/precommande/precommande.php on line
    

    et la ligne 9 correspond à
    $plxAdmin = plxAdmin::getInstance();
    

    J'ai un string de l'array

  • StéphaneStéphane Member, Former PluXml Project Manager
    si ton plugin travaille en front end, c'est une instance de plxMotor qu'il faut déclarer. Si c'est coté interface administrateur (back end), c'est plxAdmin

    Consultant PluXml

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

  • flipflipflipflip Member
    décembre 2011 modifié
    Ok, dans le __construct
    public function __construct($default_lang) {
    		parent::__construct($default_lang);
    
    		$this->setConfigProfil(PROFIL_ADMIN);
    		$this->addHook('formAuth', 'formAuth');
    
    		$plxMotor = plxMotor::getInstance();
    	}
    

    Dans la fonction de ma class
    public function formAuth() {
    	echo '--<pre>';
    	foreach($plxMotor->aUsers as $userid => $user) {
    		echo '------<br>';
    		echo $user['profil'].'<br>';
    		echo '------<br>';
    	}
    	echo '</pre>--';
    }
    

    J'ai comme erreur :
    PHP Warning:  Invalid argument supplied for foreach() in ...plugins/precommande/precommande.php on line 37
    
    et la ligne 37 est :
    foreach($plxMotor->aUsers as $userid => $user) {
    

    Dans le doute :
    var_dump($plxMotor);
    
    Me donne NULL

    J'ai un string de l'array

  • StéphaneStéphane Member, Former PluXml Project Manager
    ta variable $plxMotor est locale au constructeur donc inconnue dans ta fonction formAuth()
    de plus si tu mets le getInstance dans le constructeur ça va te faire une erreur quand tu seras dans l'admin de plux, car l'objet plxMotor sera inconnu

    Consultant PluXml

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

  • Ok. Ca marche mieux en le déclarant dans ma fonction formAuth. Pour régler le problème de $plxMotor local au construct je l'ai déclaré en global, ce qui donne :
    public function __construct($default_lang) {
    		global $plxMotor;
    		$plxMotor = plxMotor::getInstance();
    
    		parent::__construct($default_lang);
    
    		$this->setConfigProfil(PROFIL_ADMIN);
    		$this->addHook('formAuth', 'formAuth');
    	}
    
    	public function formAuth() {
    		global $plxMotor;
    		echo '--<pre>';
    		foreach($plxMotor->aUsers as $userid => $user) {
    			echo '------<br>';
    			echo $userid.'<br>';		
    			echo $user['login'].'<br>';
    			echo '------<br>';
    		}
    		echo '</pre>--';
    

    Mais je ne comprend pas ce que tu veux dire par :
    de plus si tu mets le getInstance dans le constructeur ça va te faire une erreur quand tu seras dans l'admin de plux, car l'objet plxMotor sera inconnu

    Je ne vais pas en avoir besoin dans la partie admin puisque pour cette partie je reste sur les fonctions de base de pluXml.

    J'ai un string de l'array

  • StéphaneStéphane Member, Former PluXml Project Manager
    le constructeur est appelé aussi quand tu es dans l'admin de plux.
    et ce n'est pas propre d'utiliser global $plxMotor car plxMotor est un singleton (donc inutile).

    Consultant PluXml

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

  • flipflipflipflip Member
    décembre 2011 modifié
    ah... je peux lui donner un autre nom ou alors c'est le faite de charger deux fois l'instance plxMotor ?

    L'autre solution serait de re-écrire la fonction getUsers dans mon plugin ? C'est tout de même un peu galère d'accéder au fonction de base proposé par pluxml hors celle de la class plxUtils qui elles sont accessible par plxUtils::LeTrucQueJeVeux. Par exemple j'ai besoin d'accéder à staticUrl qui se trouve lui dans plxShow... Je coince pas mal... Bon peut être est-ce parce que je suis pas à l'aise avec les class :(

    Pour revenir à mon premier problème, j'ai fouillé dans la class plxShow je découvre dans le constructeur :
    $this->plxMotor = plxMotor::getInstance();
    

    Et un peu plus bas
    public function urlRewrite($url='') {
    
                    echo $this->plxMotor->urlRewrite($url);
            }
    

    Dans c'est possible comme ça, je modifie ma classe de la même manière en virant les global
    public function __construct($default_lang) {
    
    		$this->plxMotor = plxMotor::getInstance();
    
    		parent::__construct($default_lang);
    
    		$this->setConfigProfil(PROFIL_ADMIN);
    		$this->addHook('formAuth', 'formAuth');
    	}
    
    	public function formAuth() {
    		var_dump($this->plxMotor->aUsers);
    	}
    

    J'obtiens un jolie NULL.

    J'ai un string de l'array

  • La nuit porte conseille :)

    J'ai trouvé comment faire pour ne pas le déclarer en global, je le déclare uniquement dans la fonction formAuth ce qui donne :
    /* Formulaire d'authentification */
    	public function formAuth() {
    		$this->plxMotor = plxMotor::getInstance();
    ...
    

    Du coups il est local à la fonction et utilisable par $this->plxMotor->aUsers par exemple. J'ai testé avec plxShow ça marche sur le même principe il y a juste plxToken qui ne marche par car il n'y a pas de fonction getInstance dans la fonction (peut être prévoir pour les prochaines versions que toute les classes ai un getInstance.

    Merci pour l'aide.

    J'ai un string de l'array

  • StéphaneStéphane Member, Former PluXml Project Manager
    Si tu n'utilises $this->plxMotor que dans la fonction formAuth(), tu peux alors juste utiliser $plxMotor=plxMotor::getInstance();

    plxToken n'a pas besoin de fonction getInstance. Ce n'est pas un singleton. C'est une classe avec des fonctions static qui doivent être appelées par plxToken::getTokenPostMethod() ou plxToken::validateFormToken()

    Consultant PluXml

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

  • C'est une classe avec des fonctions static qui doivent être appelées par plxToken::getTokenPostMethod() ou plxToken::validateFormToken()
    D'après les essais que j'ai fais ça marchais pas sous cette forme.

    J'ai un string de l'array

  • StéphaneStéphane Member, Former PluXml Project Manager
    Regarde le code des pages dans le dossier core/admin, c'est comme ça que ces fonctions sont utilisées.
    De même dans mes plugins, lorsqu'il y a un formulaire à controler

    Consultant PluXml

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

  • Salut,

    Je reviens sur mon problème avec plxToken, lorsque je l'utilise dans mon plugin en l'appelant comme ça : plxToken::validateFormToken($_POST); j'ai comme erreur :
    PHP Fatal error: Class 'plxToken' not found in .../pre-commande/plugins/precommande/precommande.php on line 16
    Alors que je peux utiliser plxUtils de la même manière sans problème...

    J'ai un string de l'array

  • danielsandanielsan Member
    janvier 2012 modifié
    pour le token, il y a 2 lignes à rajouter:
    une en début du formulaire, et une à la fin.
    Mais je ne trouve plus lesquelles ! :D
  • StéphaneStéphane Member, Former PluXml Project Manager
    ok je vois le problème.
    La classe token n'est pas déclarée dans le fichier index.php lors de l'inclusion de toutes les librairies, vu qu'on en a pas besoin coté visiteurs.
    Maintenant si tu a besoin de cette classe à toi de la déclarer dans ton plugin avec un include_once (et pas un include)

    Consultant PluXml

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

  • Stéphane, ok je fini un truc et je test l'include_once et je te fais un retour.

    J'ai un string de l'array

  • Pil poil ça marche avec le include_once

    J'ai un string de l'array

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