getParam depuis une class enfant

flipflipflipflip Member
août 2019 modifié dans Plugins

Bonjour,

Pour un de mes plugins j'ai besoin d'atteindre la fonction $plxPlugin->getParam() depuis une classe enfant. Pourquoi enfant ? Mon plugin est découpé en plusieurs class et je les charge dans la class principal du plugin.


// Class principal
class portail extends plxPlugin {
   private $_database = false;
   private $_portailUtils = false;
   public $_portailExports = false;
   private $_portailClients = false;
   private $_portailAdv = false;
   private $_portailCrm = false;
   private $_xlsxWriter = false;

   public function __construct($lang) {
      parent::__construct($lang);

      $this->setConfigProfil(PROFIL_ADMIN);
[...]
      if(!class_exists('portailUtils')) { die('class portailUtils absent'); }
   $this->_portailUtils = new portailUtils($this->_database);

      if(!class_exists('xlsxWriter')) { die('class xlsxWriter absent'); }
   $this->_xlsxWriter = new xlsxWriter();
[...]

// class enfant
class portailCrm {
 public function __construct($database, $xlsWriter, $portailUtils, $portailClients, $portailAdv) {
   $this->database = $database;
   $this->_xlsxWriter = $xlsxWriter;
   $this->_portailUtils = $portailUtils;
   $this->_portailClients = $portailClients;
   $this->_portailAdv = $portailAdv;
   }
[...]

 public function formRecherchePdv($value) {
      global $plxShow, $plxMotor, $plxPlugin;
      $error = false;

echo <<<EOF
<script>
 $(function() {
   $("#client_search").autocomplete({
     minLength: 3,
     source: function(request, response) {
       $.ajax({
         url: '{$plxPlugin->getParam('jqueryurl')}', --> C'est ici que j'ai besoin de la config
         cache: false,
         dataType: "json",
            data: {
            term: request.term,
               a: 'searchpdv',
               j: '1',
               rep: '{$_SESSION['portail']['rep0']}',
               maxRows: '20'
            },
[...]


Comment faire pour accéder à aux paramètres ?


P.S. : désolé je n'ai pas réussi à utiliser les balises de code :(

EDIT (@Kube17): J'ai réussi pour toi 😉

J'ai un string de l'array

Réponses

  • SudwebdesignSudwebdesign Member
    août 2019 modifié

    Slt flipflip

    Je saisi le $plxShow, le $plxMotor. mais $plxPlugin me semble inutile a ce niveau... (et peut-être les autres)

          global $plxShow, $plxMotor;
    


    Lorsque l'on est dans une fonction de la classe principale on utilise le $this->getParam() pour accéder au paramètres, remplace $plxPlugin par ça

    $this->getParam('jqueryurl')
    

    et cela doit rouler ;)


    [édit] en fait en relisant il faudrait en savoir plus ... et arriver que la classe enfant soit au courant de la classe parent, ce qui pourrai donner :

    $this->portail->getParam('jqueryurl')
    

    Bon dev

    Notre temps est la seule monnaie vraie ;)

    Site, Dépôt, framagit, MyShop, Factux

    #mozinor président

  • Merci @Kube17 ;) Je dois vraiment être quiche mais même pour cette réponse je ne trouve pas comment mettre la balise code :)


    J'ai essayé ça :

    $this->portail->getParam('jqueryurl');

    $portail->getParam('jqueryurl');


    Dans les logs apache j'ai :

    PHP Fatal error: Call to a member function getParam() on null


    Je vois pas trop d'autres façons de faire :(

    J'ai un string de l'array

  • SudwebdesignSudwebdesign Member
    août 2019 modifié

    Slt @flipflip


    Il y a 2 possibilités...


    <?php 
    
    include __DIR__.DIRECTORY_SEPARATOR.'class.portailCrm.php';#Ou codé ds le fichier
    
    #Classe principale
    class portail extends plxPlugin {
    ···
       public $portailCrm;#Pour Accueillir l'instance enfant
    ···
       public function __construct($lang) {
           parent::__construct($lang);
    
           #1e soluce #On instancie portailCrm avec sa classe parente en paramètre 
           $this->portailCrm = new portailCrm($this, $database, ...);
    
           #ou alors #2e soluce
           $this->portailCrm->portail = &$this;#on place (par référence?) la classe parent ds l'enfant
    
    ···
    }
    
    #Ensuite ds la classe dite "enfant" (fichier ou en suivant)
    
    #classe enfant
    class portailCrm {
       public $portail;#Pour Accueillir l'instance parent #1e & #2e Soluce
    
       public $database;
       public $_xlsxWriter;
       public $_portailUtils;
       public $_portailClients;
       public $_portailAdv;
    
    ##1e soluce
       public function __construct(&$portail, $database, $xlsWriter, $portailUtils, $portailClients, $portailAdv) {
           $this->portail = $portail;#classe parent
    ##Fin 1e soluce
           $this->database = $database;
           $this->_xlsxWriter = $xlsxWriter;
           $this->_portailUtils = $portailUtils;
           $this->_portailClients = $portailClients;
           $this->_portailAdv = $portailAdv;
    
    
    #Pour la #2e soluce le constructeur de la classe enfant reste le même que celui de l'exemple du sujet de ce fil 
    
    
    #Ds les deux cas la classe portailCrm (enfant) accedera aux fonction parent ainsi
    
       public function formRecherchePdv($value) {
    ···
           $this->portail->getParam('jqueryurl');
    


    Cela devrai faire l'affaire.


    Et pour afficher en mode code ds le forum :

    colle ton code, sélectionne le et sur la gauche (au milieu de ta sélection et ds le gris a l’extérieur de l'éditeur) clique sur l’icône paragraphe ¶ qui ouvre un sous menu, clique sur l’icône citer “ et là se trouve l’icône code </>

    😉

    Notre temps est la seule monnaie vraie ;)

    Site, Dépôt, framagit, MyShop, Factux

    #mozinor président

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