web-dev-qa-db-fra.com

Le script ne fonctionne pas lors de l'installation du plugin

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?

7
Zachary Draper

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.

7
Ville Niemi

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
3
David

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.

2
RogerCO

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

  • plg => PLGNAME InstallerScript
  • mod => MODNAME InstallerScript
  • composant => COMNAME InstallerScript
  • template => NOM DE MODÈLE InstallerScript
    widthout tout '-' qui sera supprimé par str_replace
1
papacho