Plugin nach der Installation automatisch veröffentlichen

7

Ich habe ein paar kleine Plugins erstellt, die ich auf den meisten meiner Websites installiere. Aber neue Plugins sind (zum Glück) bei der Installation standardmäßig deaktiviert. Ich weiß, dass es nur ein paar Klicks sind, um das Plugin zu aktivieren, aber ist es möglich, mein Plugin nach Abschluss der Installation selbst zu aktivieren?

johanpw
quelle

Antworten:

6

Ich würde empfehlen, ein Installationsskript zu erstellen, das eine postflightFunktion ausführt . Diese Funktion ist in Joomla integriert und wird nach der Installation der Erweiterung ausgeführt.

Sie könnten so etwas verwenden:

function postflight($type, $parent)
{
    // We only need to perform this if the extension is being installed, not updated
    if (strtolower($type) === 'install') 
    {       
        $db = JFactory::getDbo();
        $query = $db->getQuery(true);

        $fields = array(
            $db->quoteName('enabled') . ' = 1',
            $db->quoteName('ordering') . ' = 9999'
        );

        $conditions = array(
            $db->quoteName('element') . ' = ' . $db->quote('plg_myplugin'), 
            $db->quoteName('type') . ' = ' . $db->quote('plugin')
        );

        $query->update($db->quoteName('#__extensions'))->set($fields)->where($conditions);

        $db->setQuery($query);   
        $db->execute();     
    }
}

Weitere Informationen zur Skriptdatei finden Sie in der Joomla-Dokumentation:

http://docs.joomla.org/J2.5:Managing_Component_Updates_(Script.php)

Hoffe das hilft

Lodder
quelle
Ich glaube das 1und bin 9999ganze Zahlen und es gibt keine Notwendigkeit für Typ Casting;)
Farahmand
@Farahmand - Es kann verwendet werden, aber ich nehme an, keine große Anforderung. Ich habe vor einiger Zeit tatsächlich eine Frage dazu gestellt: joomla.stackexchange.com/questions/3738/… .. Ich bin mir nicht sicher, warum die Verwendung von Typguss eine Ablehnung verdient, da das Konzept / der Ansatz korrekt ist
Lodder
1

Sie können ein Plugin wie folgt erstellen:

class plgExtensionEnableMyPlugins extends JPlugin
{
    public function onExtensionAfterInstall($installer, $eid)
    {
        if ($eid)
        {
            $db = JFactory::getDbo();
            $db->setQuery("UPDATE #__extensions SET `enabled` = 1 WHERE `extension_id` = $eid AND `type` = 'plugin'");
            $db->execute();
        }
    }
}

Installieren und aktivieren Sie das obige Plugin, bevor Sie Ihre Plugins installieren.

Farahmand
quelle
Sie schlagen vor, ein zusätzliches Plugin zu verwenden, um diese Aktion auszuführen? Was ist, wenn ich als Benutzer das Plugin von @ johan herunterlade und davon ausgehe, dass es automatisch veröffentlicht wird? Erwartet er, dass ich dieses Plugin installiere, das Sie erwähnt haben, bevor ich seins herunterlade?
Lodder
@Lodder, Die Frage bezieht sich auf ein "paar" Plugins, die von johan erstellt wurden und die er auf "seinen" Websites installieren möchte. Wenn er die Bedingungen gesagt hätte, die Sie erwähnt haben, war meine Antwort etwas anderes;)
Farahmand
@Farahmand, ich verwende die Plugins hauptsächlich auf Websites, die ich entwickle, aber dennoch scheint es ein wenig übertrieben, ein Plugin zu installieren und zu aktivieren, um einige andere automatisch zu aktivieren. Aber danke für den Code.
Johanpw
@johanpw, kein Problem. Persönlich bevorzuge ich ein Plugin, anstatt postflightFunktionen für alle meine Plugins zu schreiben . Ich glaube, dass es kein Overkill ist. Ich kann das Plugin deinstallieren / deaktivieren, sobald ich alle meine Plugins installiert habe. Hoffe das hilft Menschen mit ähnlichen Fällen.
Farahmand