Forcer un plugin a être en tête de liste

je-evrardje-evrard Member
juin 2019 modifié dans Entraide

Bonjour,

Tout est dans le titre.

J'ai créé une petite fonction dans config.php de mon plugin pour le forcer a être toujours en premier.

Voici mon code :

reorderVWinFirst();
function reorderVWinFirst() {
	$plxMotor = plxMotor::getInstance();
	$apluginsCurrent = $plxMotor->plxPlugins->aPlugins;
	
	if ($apluginsCurrent["spxvisualwizard"]){
		$apluginsvw = array();
		$apluginsvw["spxvisualwizard"]=$apluginsCurrent["spxvisualwizard"];
		unset ($apluginsCurrent["spxvisualwizard"]);
		$aPlugins = array_merge($apluginsvw, $apluginsCurrent);
		$xml = "<?xml version='1.0' encoding='".PLX_CHARSET."'?>\n";
			$xml .= "<document>\n";
				foreach($aPlugins as $k=>$v) {
					$xml .= "\t<plugin name=\"$k\"></plugin>\n";
				}
			$xml .= "</document>";
		# save file
		plxUtils::write($xml,path('XMLFILE_PLUGINS'));
	}
}

Si vous avez plus simple...

Cordialement,

jerome

Mots clés:

Réponses

  • Dans mon souvenir, il suffisait de modifier l'ordre de chargement des plugins depuis la page d'administration.

  • SudwebdesignSudwebdesign Member
    juin 2019 modifié

    Je pencherais vers le hook du moteur de pluxml


          $this->plxPlugins=newplxPlugins($lang);
          $this->plxPlugins->loadPlugins();
          #Hookplugins
          eval($this->plxPlugins->callHook('plxMotorConstructLoadPlugins'));
    

    Un code du style ds ton plugin

    #reorderVWinFirst
    public function plxMotorConstructLoadPlugins() {
       	echo '<?php '; ?>
      	$apluginsCurrent = $this->plxPlugins->aPlugins;
      	
      	if ($apluginsCurrent["spxvisualwizard"]){
      		$apluginsvw = array();
      		$apluginsvw["spxvisualwizard"]=$apluginsCurrent["spxvisualwizard"];
      		unset ($apluginsCurrent["spxvisualwizard"]);
    		$aPlugins = array_merge($apluginsvw, $apluginsCurrent);
    		$xml = "<?xml version='1.0' encoding='".PLX_CHARSET."'?>\n";
    			$xml .= "<document>\n";
    				foreach($aPlugins as $k=>$v) {
    					$xml .= "\t<plugin name=\"$k\"></plugin>\n";
    				}
    			$xml .= "</document>";
    		# save file
    		plxUtils::write($xml,path('XMLFILE_PLUGINS'));
    	}
        ?><?php
        }
    

    Mais je sais pas si cela ira bien car $this->plxPlugins->loadPlugins(); est appelé avant...

    Notre temps est la seule monnaie vraie ;)

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

    #mozinor président

  • SudwebdesignSudwebdesign Member
    juin 2019 modifié

    En fait et après réflexion il suffit d'utiliser le hook de plxAdmin, ça n'a aucun sens que cette opération se déclenche tout le temps :)

    Comme il n'y a pas (encore?) de hook pour la page de gestion des plugins je propose cette soluce :

    ds le constructeur de classe :

        if(strstr($_SERVER['PHP_SELF'],'plugins.php'))
            $this->addHook('plxAdminConstruct', 'plxAdminConstruct');#reorderVWinFirst 
    

    La fonction de @je-evrard un peu peaufiné a placer ds la classe principale

       #PluginIn1stposition
       public function plxAdminConstruct(){
           echo'<?php'; ?>
           $apluginsCurrent = $this->plxPlugins->aPlugins;
           $plug = '<?php echo__CLASS__ ?>';
           if($apluginsCurrent[$plug]){
               $apluginsvw = array();
               $apluginsvw[$plug] = $apluginsCurrent[$plug];
               unset($apluginsCurrent[$plug]);
               $aPlugins = array_merge($apluginsvw,$apluginsCurrent);
               $xml = "<?xml version='1.0' encoding='".PLX_CHARSET."'?>\n";
               $xml.= "<document>\n";
                   foreach($aPluginsas$k=>$v){
                       $xml.= "\t<pluginname=\"$k\"></plugin>\n";
                   }
               $xml.= "</document>";
               #savefile
               plxUtils::write($xml,path('XMLFILE_PLUGINS'));
           }
    ?><?php
       }
    

    il est possible que cela fasse l'affaire car n'est déclanché lors de la visite de la page admin qui gére les plugins ;)

    [edit] ou un strpos a la place du strstr ds le constructeur

        if(strpos($_SERVER['PHP_SELF'],'plugins.php') !== false)
    


    En aparté: il me semble que le systeme de brouillon (du forum) brouille ou prends énormément de mémoire et fait ralentir l'édition. Là il me stipule "Draft non trouvé" et je suis moins géné pour écrire ;)

    en bas a gauche

    Notre temps est la seule monnaie vraie ;)

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

    #mozinor président

  • L'idée est de forcer à la validation de la configuration et non pas que l'administrateur le fasse. Ceci pour pallier certains plugins (notamment betterUrl d'ailleurs).

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