it-swarm.it

Script non in esecuzione durante l'installazione del plug-in

Sto creando un plug-in e sto tentando di eseguire uno script dopo averlo installato. Per qualsiasi motivo, sembra che il file di script si stia caricando, ma il mio codice non viene mai eseguito.

Il mio file script.php contiene quanto segue:

// 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');
  }
}

Ho provato a usare diverse derivazioni del nome della classe senza fortuna. Se inserisco un'istruzione die () al di fuori della classe, viene eseguita, il che mi porta a credere che il file sia caricato. Ho anche provato altri metodi, come install () senza successo.

Nota che al posto dell'istruzione die () avevo il codice effettivo, ma sono passato a questo nel corso del debug di questo problema.

Cosa sto sbagliando quel Joomla! non sta chiamando il metodo postflight () nella mia classe all'installazione?

7
Zachary Draper

Hai provato il nome della classe senza caratteri di sottolineatura?

"PlgSystemNotifierInstallerScript"

(o forse "plgSystemnotifierInstallerScript" non è sicuro)

Questo sembra essere il formato utilizzato dai due plugin che ho verificato.

7
Ville Niemi

Su Joomla 3.4 il nome della classe del programma di installazione si basa sul gruppo di plugin (ad esempio system) dal tag root nel manifest:

    <extension type="plugin" group="system" version="3.0" method="upgrade">

e il nome del plug-in (ad esempio myplugin) che va nella seguente riga nel manifest:

    <filename plugin="myplugin">pluginfile.php</filename>

E poi metti tutto insieme anteposto a plg in questo modo:

    plgSystemMyPluginInstallerScript
3
David

Nel caso in cui chiunque stia eseguendo un plug-in editor-xtd si imbatte in questa nota che a seguito del commento di papacho, è necessario utilizzare plgEditorsxtdMypluginnameInstallerScript con il trattino rimosso.

Quindi per il plugin MyPluginName nel manifest mypluginname.xml

<extension version="3.0" type="plugin" group="editors-xtd" method="upgrade">
...
<filename plugin="mypluginname">mypluginname.php</filename>

Nel file del plugin mypluginname.php

class plgButtonMypluginname extends JPlugin {
...

e nel script.php file

class plgEditorsxtdMypluginnameInstallerScript {
...

ci sono arrivato alla fine ... :-)

PS Non riesco a capire perché usi plgButton ... nel file plugin ma editor-xtd nel manifest e nello script (senza il trattino), ma nessun'altra combinazione sembra funzionare, quindi Hey Ho.

2
RogerCO

Il nome della classe del programma di installazione dello script è definito in $ 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);

questo significa

  • plg => PLGNAME InstallerScript
  • mod => MODNAME InstallerScript
  • component => COMNAME InstallerScript
  • template => NOME TEMPLAT InstallerScript
    widthout qualsiasi '-' che deve essere soppresso da str_replace
1
papacho