initialisation plugin via variable de plxMotor
Bonjour,
Dans le cadre d'un projet perso j'ai besoin de définir des constantes à la construction de mon plugin.
Coté admin ça pose problème, voici mon code :
J'obtiens ceci coté backend :
Ma constante reste vide, en effet
[list=*]
[*]Une constante ne peux etre redéfinie[/*]
[*]La fonction est appelé deux fois dans le contexte backend et dont la première fois avec un tableau de configuration vide[/*]
[/list]
D'ou ma question.
Avez-vous une idée simple et propre pour définir une constante à la construction d'un plugin en utilisant les variables plxMotor.
A noter que je pourrais faire ça mais ce n'est pas propre (la fonction du plugin étant appelée deux fois).
merci. a++
jéjé
Dans le cadre d'un projet perso j'ai besoin de définir des constantes à la construction de mon plugin.
Coté admin ça pose problème, voici mon code :
[== Indéfini ==]
class plugintest extends plxPlugin {
public function __construct($default_lang) {
parent::__construct($default_lang);
$this->initconfiguration();
}
public function initconfiguration() {
$plxMotor = plxMotor::getInstance();
$style = $plxMotor->aConf["style"];
echo ("---------------------PLUGINTEST------------------\n<br>");
echo ("plugintest initconfiguration style = ".$style."\n<br>");
if (!defined('VIWTHEMENAME')) define('VIWTHEMENAME', $style);
echo ("VIWTHEMENAME = ".VIWTHEMENAME."\n<br>");
echo ("---------------------END PLUGINTEST------------------\n<br>");
}
}
J'obtiens ceci coté backend :
[== Indéfini ==]
</br>---------------------PLUGINTEST------------------
<br>plugintest initconfiguration style =
<br>VIWTHEMENAME =
<br>---------------------END PLUGINTEST------------------
<br>---------------------PLUGINTEST------------------
<br>plugintest initconfiguration style = defaut
<br>VIWTHEMENAME =
<br>---------------------END PLUGINTEST------------------
Ma constante reste vide, en effet
[list=*]
[*]Une constante ne peux etre redéfinie[/*]
[*]La fonction est appelé deux fois dans le contexte backend et dont la première fois avec un tableau de configuration vide[/*]
[/list]
D'ou ma question.
Avez-vous une idée simple et propre pour définir une constante à la construction d'un plugin en utilisant les variables plxMotor.
A noter que je pourrais faire ça mais ce n'est pas propre (la fonction du plugin étant appelée deux fois).
[== Indéfini ==]
class plugintest extends plxPlugin {
public function __construct($default_lang) {
parent::__construct($default_lang);
$this->initconfiguration();
}
public function initconfiguration() {
$plxMotor = plxMotor::getInstance();
$style = $plxMotor->aConf["style"];
echo ("---------------------PLUGINTEST------------------\n<br>");
echo ("plugintest initconfiguration style = ".$style."\n<br>");
if ($plxMotor->aConf["style"]!=""){
if (!defined('VIWTHEMENAME')) define('VIWTHEMENAME', $style);
echo ("VIWTHEMENAME = ".VIWTHEMENAME."\n<br>");
}
echo ("---------------------END PLUGINTEST------------------\n<br>");
}
}
merci. a++
jéjé
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Quand PluXml instancie ton plugin, c'est que $PlxMotor ou $plxAdmin existe déjà. Suffit juste de vérifier s'ils répondent présents :
Pour info, on peut définir des constantes de class, mais il faut que cela soit une valeur littérale. Ce qui n'est pas le cas ici.
Tu peux regarder kzUploader si tu veux un exemple.
Accès à mon dépôt de plugins et thèmes
installe PluXml plus vite que ton ombre avec kzInstall2
@je-evrard : j'ai été confronté au même problème que toi car je devais récupérer dans le constructeur de mon plugin le contenu de la variable $this->aUsers définie dans la classe plxMotor.
J'ai fait la même erreur que toi en partant sur l'instruction $plxMotor = plxMotor::getInstance(); pour récupérer l'instance de la classe. Grosse erreur comme tu as pu le constater car le constructeur de cette classe n'est pas en private. Aussi, il peut exister plusieurs instances différentes de cette classe.
Bref, je suis passé par le hook 'plxMotorConstruct' pour pouvoir récupérer et stocker le contenu des variables de plxMotor dans mon plugin comme ceci :
Voilà, je ne dis pas que c'est la meilleure solution mais en tout cas, elle est propre et elle est reste interne au plugin (pas de risque de conflit avec d'autres plugins).
Cordialement.
++
jéjé
Je donne directement le $this a l'initconfiguration ce qui permet de toucher toutes les propiétés de $plxMotor en entrée de l'init. Ca a vraiment l'avantage de ne pas créer d'instance.
Merci encore.
Merci encore. Une solution simple et qui marche.
Remplacer $this -> _plug_name par __CLASS__ tout simplement.
Très pratique pour récupérer l'URL du dossier du plugin: PLX_PLUGINS.__CLASS__.'/'
Accès à mon dépôt de plugins et thèmes
installe PluXml plus vite que ton ombre avec kzInstall2
@je-evrard : content que ça ait pu te rendre service.
@bazooka : l'utilisation de la constante __CLASS__ dans les exemples que tu proposes est potentiellement une future source de bug dans le cas où (on ne sait jamais) stéphane décide d'introduire un espace de nom dans une future version de pluxml. L'instruction basename(__CLASS__) serait plus appropriée pour être tranquille.
Cordialement
@memento,
Je ne comprends pas trop ta remarque.
basename s'applique à un chemin de fichier.
Or __CLASS__ ne renvoie que le nom de la class et contient éventuellement l'espace de nom
Lire la doc sur php.net en français
Si tu parles de la dernière remarque en bas de cette doc, c'est une vieille remarque de 6 ans ( quelle version de PHP ? ) et le gars avoue utiliser cela sous Windows ]:D ( Très courant sur Internet comme chacun sait )
Merci quand même pour l'astuce.
Cela m'évite de tester la présence de $plxMotor ou $plxAdmin.
Il permet de remplacer la constante PLX_PLUGINS qui ne donne pas une url absolue ( J'en ai besoin pour paramétrer ma nouvelle version du plugin Tinymce (coming soon..))
$this->plx_plugin_root permet de renseigner l'attribut src d'un script JS. quand on est sur le net
PLX_PLUGINS est à remplacer par __DIR__ quand on est dans le système de fichiers
IL serait sympa si on pouvait intégrer cela dans la class plxPlugin.
Accès à mon dépôt de plugins et thèmes
installe PluXml plus vite que ton ombre avec kzInstall2
PluXml mélange urls et chemin de fichiers.
PLX_PLUGINS est un des hacks pour contourner ce problème.
Quand on regarde le code source généré, on trouve les href ou des src commençant par ../../. Je trouve que cela fait un peu bidouillage.
plxMotor::urlRewrite() n'est pas une fonction statique, comme par exemple plxUtils::showMessage.
Il faut, soit déclarer une instance de plxMotor, soit mettre en global $plxMotor ou $plxAdmin, à l'intérieur d'une fonction du plugin.
Accès à mon dépôt de plugins et thèmes
installe PluXml plus vite que ton ombre avec kzInstall2
Voir extrait de la doc ci-dessous : En clair __CLASS__ contient déjà l'espace de nom. Voir exemple : Foo\Bar
Cordialement
Accès à mon dépôt de plugins et thèmes
installe PluXml plus vite que ton ombre avec kzInstall2