Skript läuft bei Plugin-Installation nicht

7

Ich erstelle ein Plugin und versuche, ein Skript nach der Installation auszuführen. Aus irgendeinem Grund scheint die Skriptdatei geladen zu werden, aber mein Code wird nie ausgeführt.

Meine script.php-Datei enthält Folgendes:

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

Ich habe ohne Glück versucht, verschiedene Ableitungen des Klassennamens zu verwenden. Wenn ich eine die () - Anweisung außerhalb der Klasse platziere, wird sie ausgeführt, was mich glauben lässt, dass die Datei geladen ist. Ich habe auch andere Methoden wie install () ohne Erfolg ausprobiert.

Beachten Sie, dass ich anstelle der die () - Anweisung tatsächlichen Code hatte, aber im Verlauf des Debuggens dieses Problems darauf umgestellt habe.

Was mache ich falsch, dass Joomla! ruft bei der Installation nicht die postflight () -Methode in meiner Klasse auf?

Zachary Draper
quelle
1
Wie es aussieht, glaube ich, dass die Benennung der Klasse "plg_system_notifierInstallerScript" ungenau ist.
Mike Feng
Ich habe geholfen, etwas mehr Licht in eine andere Antwort zu bringen und als Referenz zu posten
Riccardo Zorn

Antworten:

7

Haben Sie den Klassennamen ohne Unterstriche ausprobiert?

"plgSystemNotifierInstallerScript"

(oder möglicherweise "plgSystemnotifierInstallerScript" nicht sicher)

Das scheint das Format zu sein, das die beiden von mir überprüften Plugins verwenden.

Ville Niemi
quelle
plgSystemNotifierInstallerScript funktionierte wie erwartet. Seltsamerweise widerspricht dies der Dokumentation von Joomla !, Die die Verwendung von Unterstrichen deutlich zeigt. = (Danke für Ihre Hilfe!
Zachary Draper
Es wäre großartig, Ihre Antwort zu verbessern, indem Sie einen klaren Verweis auf die Dokumentation oder den Code bezüglich der Namenskonvention geben. Vielen Dank!
Valentin Despa
@ ValentinDespa Ich habe keine echte Dokumentation gefunden. Es gibt einige für Module und Komponenten, aber die Namenskonvention unterscheidet sich. Es hat Unterstriche, also ist es wahrscheinlich das, worüber Zachary Draper mit der gegenteiligen Dokumentation sprach.
Ville Niemi
Ich konnte das nicht zum Laufen bringen, bis ich den CamelCase richtig gemacht hatte. plgSystemPluginnameInstallerScript Nur das erste Zeichen des Plugin-Namens wird großgeschrieben. David (unten) hat eine gute Erklärung - verfehlt aber die Kapitalisierungsanforderung.
Michael
3

In Joomla 3.4 basiert der Name der Installationsklasse auf der Plugin-Gruppe (z. B. system) aus dem Root-Tag im Manifest:

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

und den Plugin-Namen (z. B. myplugin), der im Manifest in der folgenden Zeile steht:

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

Und dann fügst du alles zusammen plgwie folgt vor :

    plgSystemMyPluginInstallerScript
David
quelle
2

Nur für den Fall, dass jemand, der ein editors-xtd-Plugin erstellt, auf diesen Hinweis stößt, den Sie nach dem Kommentar von papacho plgEditorsxtdMypluginnameInstallerScriptmit entferntem Bindestrich verwenden müssen.

Also für das Plugin MyPluginName im Manifest mypluginname.xml

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

In der Plugin-Datei mypluginname.php

class plgButtonMypluginname extends JPlugin {
...

und in der script.phpDatei

class plgEditorsxtdMypluginnameInstallerScript {
...

bin am Ende dort angekommen ... :-)

PS Ich kann nicht herausfinden, warum Sie plgButton verwenden ... in der Plugin-Datei, aber editors-xtd im Manifest und im Skript (ohne Bindestrich), aber keine andere Kombination scheint zu funktionieren, also Hey Ho.

RogerCO
quelle
1

Der Klassenname des Skriptinstallationsprogramms ist in $ JPATH_ROOT / library / cms / installer / adapter.php: 553 definiert

$className = JFilterInput::getInstance()->clean($this->element, 'cmd') . 'InstallerScript';
// Cannot have - in class names
$className = str_replace('-', '', $className);

Diese Durchschnitts

  • plg => PLGNAME InstallerScript
  • mod => MODNAME InstallerScript
  • component => COMNAME InstallerScript
  • template => TEMPLATENAME InstallerScript
    widthout any '-', das von str_replace unterdrückt wird
Papacho
quelle