Je crée un plugin et je tente d'exécuter un script après son installation. Pour une raison quelconque, il semble que le fichier de script est en cours de chargement, mais mon code n'est jamais exécuté.
Mon fichier script.php contient les éléments suivants:
// No direct access
defined('_JEXEC') or die('Restricted access');
/**
* Script file for the plg_system_example plugin
*/
class plg_system_notifierInstallerScript{
/**
* Method to run after the plugin install, update, or discover_update actions have completed.
*
* @return void
*/
function postflight($type,$parent){
// For Testing Purposes
die('Hello World');
}
}
J'ai essayé d'utiliser un certain nombre de dérivations différentes du nom de la classe sans succès. Si je place une instruction die () en dehors de la classe, elle est exécutée, ce qui m'amène à croire que le fichier est chargé. J'ai également essayé d'autres méthodes, telles que install () sans succès.
Notez que j'avais le code réel à la place de l'instruction die (), mais que je suis passé à cela au cours du débogage de ce problème.
Qu'est-ce que je fais de mal à Joomla! n'appelle pas la méthode postflight () dans ma classe lors de l'installation?
Avez-vous essayé le nom de la classe sans traits de soulignement?
"plgSystemNotifierInstallerScript"
(ou éventuellement "plgSystemnotifierInstallerScript" pas sûr)
Cela semble être le format utilisé par les deux plugins.
Sur Joomla 3.4, le nom de la classe du programme d’installation est basé sur le groupe de plugins (par exemple, system
) de la balise racine dans le manifeste:
<extension type="plugin" group="system" version="3.0" method="upgrade">
et le nom du plugin (par exemple myplugin
) qui apparaît dans la ligne suivante du manifeste:
<filename plugin="myplugin">pluginfile.php</filename>
Et puis vous mettez tout cela ensemble avec plg
comme suit:
plgSystemMyPluginInstallerScript
Juste au cas où quiconque créerait un plugin editors-xtd tomberait sur cette note qui, après le commentaire de papacho, vous devez utiliser plgEditorsxtdMypluginnameInstallerScript
avec le trait d'union supprimé.
Ainsi pour le plugin MyPluginName dans le manifeste mypluginname.xml
<extension version="3.0" type="plugin" group="editors-xtd" method="upgrade">
...
<filename plugin="mypluginname">mypluginname.php</filename>
Dans le fichier plugin mypluginname.php
class plgButtonMypluginname extends JPlugin {
...
et dans le script.php
fichier
class plgEditorsxtdMypluginnameInstallerScript {
...
arrivé à la fin ... :-)
PS Je ne comprends pas pourquoi vous utilisez plgButton ... dans le fichier plugin mais editors-xtd dans le manifeste et dans le script (sans trait d'union), mais aucune autre combinaison ne semble fonctionner, alors Hey Ho.
Le nom de classe du programme d’installation de script est défini dans $ JPATH_ROOT/libraries/cms/installer/adapter.php: 553
$className = JFilterInput::getInstance()->clean($this->element, 'cmd') . 'InstallerScript';
// Cannot have - in class names
$className = str_replace('-', '', $className);
cette moyenne