Accès aux paramètres d'un plugin dans un fichier .php

HamtaroHamtaro Member
Bonjour tout le monde !

Pour les besoins d'un plugin, j'essaie de récupérer des paramètres sauvegardés dans un fichier .php autre que config.php et nomduplugin.php...

J'ai fait comme ça :
[== PHP ==]
include(dirname(__FILE__).'/../../core/admin/prepend.php');
if(!defined('PLX_ROOT')) exit;
$login = plxUtils::strCheck($plxPlugin->getParam('login'));
$password = plxUtils::strCheck($plxPlugin->getParam('password'));

Cependant, il n'aime pas trop...
Fatal error: Call to a member function getParam() on a non-object

Comment puis-je faire ?

Réponses

  • StéphaneStéphane Member, Former PluXml Project Manager
    Salut
    Il faut définir $plxPlugin
    $plxPlugin = $plxMotor->plxPlugins->aPlugins['lenomdetonplugin'];
    
    après tout dépend où tu utilises ta variable: $plxMotor peut etre $plxAdmin ou $plxShow->plxMotor
    et l'utilisation de $plxMotor = plxMotor::getInstance() est peut etre nécessaire si tu es dans une fonction par exemple (respectivement la meme chose avec plxAdmin)

    Consultant PluXml

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

  • HamtaroHamtaro Member
    juin 2013 modifié
    Moi avoir pas très bien compris...

    J'ai fait ainsi mais toujours la même erreur :
    include(dirname(__FILE__).'/../../core/admin/prepend.php');
    if(!defined('PLX_ROOT')) exit;
    $plxMotor = plxMotor::getInstance();
    $plxPlugin = $plxMotor->plxPlugins->aPlugins['nomduplugin'];
    $login = plxUtils::strCheck($plxPlugin->getParam('login'));
    $password = plxUtils::strCheck($plxPlugin->getParam('password'));
    

    Le fichier est un simple .php présent dans le répertoire du plugin en question.
    En fait, je fais mumuse avec de l'ajax donc j'appelle des nouvelles données.
  • Hamtaro a écrit:
    En fait, je fais mumuse avec de l'ajax donc j'appelle des nouvelles données.
    ah toi aussi ? ]:D
    mais je fais l'appel à partir d'une page static ... dont mon fichier .php se trouve dans un plugin :mad: mais ça marche ...
  • Ton code appelé est présent dans un fichier .php classique de plugin ? Soit config.php, soit nomduplugin.php ?
    Ou alors il s'agit d'un autre ?

    Mon souci est juste la récupération des paramètres enregistrés dans le fichier .php qui n'est pas habituel au plugin.
  • HamtaroHamtaro Member
    juin 2013 modifié
    Après avoir fait un petit print_r des paramètres, je me suis aperçu que j'avais bien les infos mais que bien évidemment j'appelais mal les bonnes données. ;)

    Par contre, maintenant, je galère pour extraire les bonnes du tableau...

    Une petite idée pour avoir le login et mot de passe ?
    Array
    (
        [activate] => 1
        [title] => nomplugin
        [instance] => nomplugin Object
            (
                [aInfos:protected] => Array
                    (
                    )
    
                [aParams:protected] => Array
                    (
                        [login] => Array
                            (
                                [type] => cdata
                                [value] => XXXXXXXXXXXX
                            )
    
                        [password] => Array
                            (
                                [type] => cdata
                                [value] => XXXXXXXXXXXX
                            )
    
                    )
    
                [aHooks:protected] => Array
                    (
                        [AdminTopEndHead] => Array
                            (
                                [0] => Array
                                    (
                                        [class] => nomplugin
                                        [method] => AdminTopEndHead
                                    )
    
                            )
    
                        [AdminArticleContent] => Array
                            (
                                [0] => Array
                                    (
                                        [class] => nomplugin
                                        [method] => AdminArticleContent
                                    )
    
                            )
    
                    )
    
                [aLang:protected] => Array
                    (
                        [L_TITLE] => Informations générales
                        [L_CONFIG_DESCRIPTION] => Page de configuration du plugin
                        [L_CONFIG_API_KEY] => Clé d'activation
                        [L_CONFIG_SAVE] => Enregister
                    )
    
                [plug:protected] => Array
                    (
                        [dir] => ../../plugins/
                        [name] => nomplugin
                        [filename] => ../../plugins/nomplugin/nomplugin.php
                        [parameters.xml] => ../../data/configuration/plugins/nomplugin.xml
                        [infos.xml] => ../../plugins/nomplugin/infos.xml
                    )
    
                [adminProfil:protected] => Array
                    (
                        [0] => 0
                    )
    
                [configProfil:protected] => Array
                    (
                        [0] => 0
                        [1] => 1
                    )
    
                [default_lang:protected] => fr
                [adminMenu] => 
            )
    
    )
    
  • j'ai un dossier addons dans un dossier plugin,
    ça me permet de faire des mises à jours du plugin sans perdre mes améliorations ]:D

    mon pb est que j'ai du mal à chaque fois pour faire l'appel de la page dans un JS ... j'me goure tjs avec les URL/URI chépakoi

    pour récup' tes données, à tâton ça donne quoi ?
    $login = $array["instance"]["aParams:protected"]["login"]["value"];
    $password = $array["instance"]["aParams:protected"]["password"]["value"];
    

    @plousss
  • StéphaneStéphane Member, Former PluXml Project Manager
    Les données du tableau aParams ne sont accessibles qu'à partir d'une classe dérivée car il est du type protected et pas public (voir les bases de la programmation orientée objet). Il faut passer par la fonction getParam après avoir créé une instance de l'objet
    $plxPlugin = $plxMotor->plxPlugins->aPlugins['lenomdetonplugin'];
    $var = $plxPlugin->getParam('login');
    

    Consultant PluXml

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

  • danielsandanielsan Member
    juin 2013 modifié
    oups, je croyais que cette bdd avait été fait à la mano ...
    j'suis encore un gros bourrin ]:D
  • Effectivement, j'avais regardé pour le protected mais je ne voyais pas comment faire...
    Je vais regarder avec tes conseils Stéphane et vous tiens au courant.
  • StéphaneStéphane Member, Former PluXml Project Manager
    Essaye avec ça Hamtaro
    $plxPlugin = $plxMotor->plxPlugins->aPlugins['lenomdetonplugin']['instance'];
    $var = $plxPlugin->getParam('login');
    

    et si ton code tu l'utilises à partir de l'admin, il faut remplacer $plxMotor par $plxAdmin

    Consultant PluXml

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

  • Impeccable !

    C'est un peu flou pour moi avec mes simples connaissances mais le résultat est là !
    Merci, je vais maintenant essayer de comprendre le pourquoi du comment avec le protected ;)
  • Globalement, une variable (ou une méthode) protégée (protected) ne peux être appelée que dans la classe dans laquelle elle est définie tandis que si elle est publique, on peut l'appeler directement via l'objet qui la contient, avec une syntaxe du style
    echo $Objet->variablePublique;
    

    Pour afficher une variable protected, il faut passer par une méthode de l'objet créée spécifiquement pour l'affichage de ces données. Généralement, elle se nomme getQuelqueChose().
    On affichera la variable ainsi
    echo $Objet->getQuelqueChose('variableProtected');
    

    Ceci afin d'éviter que ces variables (ou le retour d'une méthode protégée) soit modifiées.
  • StéphaneStéphane Member, Former PluXml Project Manager
    Jerry Wham a écrit:
    Globalement, une variable (ou une méthode) protégée (protected) ne peux être appelée que dans la classe dans laquelle elle est définie.

    ou à partir d'une classe dérivée

    Consultant PluXml

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

  • Stéphane a écrit:
    Jerry Wham a écrit:
    Globalement, une variable (ou une méthode) protégée (protected) ne peux être appelée que dans la classe dans laquelle elle est définie.

    ou à partir d'une classe dérivée
    C'est vrai, mais selon le principe d'encapsulation, on peut considérer que c'est la même non ?
  • Bonjour,

    Je suis tombé sur ce post, et j'ai en gros le même problème mais par contre les solutions proposées ne fonctionnent pas vraimment :/

    En résumé, le scénario, j'ai une page statique (static-form.php) qui propose un formulaire, les tests de validation sont fait en js au fur et a mesure de la saisie de l'utilisateur, puis au moment de la validation envoyés via ajax a la page (processForm.php) qui en php re-teste par sécurité les champs, fait les traitements, puis retourne via ajax au formulaire le message de success ou error. Ces deux pages sont dans le dossier /theme, et processform ne contient que du php, pas de header, ou autre inclusions.

    Pour pouvoir configurer l'adresse d'envoi depuis l'administration, et récupérer d'autres paramètre de configuration, j'ai donc suivi les infos proposées dans ce thread.
    en procédant ainsi dans ma page de traitement :
    [== PHP ==]
    include(dirname(__FILE__).'/../../core/admin/prepend.php');
    $plxMotor = plxMotor::getInstance();
    $plxPlugin = $plxMotor->plxPlugins->aPlugins['theme_config']['instance'];
    $mail_contact = $plxPlugin->getParam('mail_contact');
    $raison_sociale = $plxPlugin->getParam('raisonSociale');
    

    Alors le problème que j'ai au final, c'est que quand je me déconnecte de l'administration ça ne fonctionne plus , je n'ai plus de retour !! Une idée sur le pourquoi ??

    Merci de vos suggestions et réponses.
  • StéphaneStéphane Member, Former PluXml Project Manager
    @mistergraphx: dans le fichier prepend.php il y a des tests pour vérifier que tu es bien connecté à l'admin, sinon n'importe qui pourrait inclure le fichier sans être connecté à l'admin, ce qui serait une très grosse faille de sécurité.

    Consultant PluXml

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

  • mistergraphxmistergraphx Member
    juillet 2013 modifié
    Merci de ta réponse , Ok je comprend mieux !!

    Mais comment je peut ressortir mes valeurs de config depuis ma page de traitement ??
    parceque la en fait seul les admins peuvent poster c'est pas cool ^^, en fait je peut que faire un plugin si je veux faire ça ? et donc que tout se fasse coté privé , c'est ça ??

    j'ai bien penssé à les passer par des hidden en utilisant plxShow, mais bon vu que c'est le mail qui m'interesse de récuperer c'est pas top :/
  • StéphaneStéphane Member, Former PluXml Project Manager
    Si tes traitements sont coté public, il ne faut pas inclure prepend.php
    Il faut que tu te fasses un fichier avec dedans les memes déclarations que dans index.php pour inclure les libraires et les objets nécessaires au plugin. Maintenant si au moment du traitement du formulaire en ajax tu n'as pas besoin des objets de PluXml alors n'hésite pas à t'en passer.

    Consultant PluXml

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

  • Merci de ta réponse ça fonctionne impec, bon a l'ocase je regarderais a le mettre en plugin tout de même, en m'inspirant de ce que tu as fait avec plxMyContact
Connectez-vous ou Inscrivez-vous pour répondre.