Erstellen eines Plugins zum Einfügen eines Chrome-Testtokens

Sep 07 2020

Ich versuche ein Plugin zu erstellen, das auf den Seiten Folgendes hinzufügt:

<meta http-equiv="origin-trial" content="MY_CHROME_TRIAL_TOKEN">

Ich gehe davon aus, dass dies ein System-Plugin sein sollte, das auf das Ereignis onAfterRender abzielt. Deshalb habe ich diesen Code hinzugefügt (ich habe das echte Token ersetzt):

public function onAfterRender()
{
  $document = JFactory::getDocument(); $document->setMetaData('origin-trial', 'mychrometrialtoken');
}

Das Plugin wird installiert, aber das Meta-Tag wird nicht zum Seitenkopf hinzugefügt. Was mache ich falsch? Ich bin ein Anfänger in diesem Bereich, habe also eine Plugin-Vorlage von Github verwendet und sie geändert. Ich habe wahrscheinlich einen grundlegenden Fehler gemacht! Ich frage mich, ob ich den Tagnamen 'origin-trial' falsch angegeben habe.

XML-Datei:

 <?xml version="1.0" encoding="utf-8"?>
<extension version="3.1" type="plugin" group="system">
    <name>plg_system_tdcchromexhrenable</name>
    <author>AG</author>
    <creationDate>8 September 2020</creationDate>
    <copyright>Copyright (C) 2005 - 2013 Open Source Matters. All rights reserved.</copyright>
    <license>GNU General Public License version 2 or later; see LICENSE.txt</license>
    <authorEmail>[email protected]</authorEmail>
    <authorUrl>www.joomla.org</authorUrl>
    <version>1.0</version>
    <description>Enable the XHR synchronous setting in Chrome to prevent SCORM errors</description>
    <files>
        <filename plugin="tdcxhr">tdcxhr.php</filename>
        <filename>index.html</filename>
    </files>
</extension>

PHP:

    <?php
// no direct access
defined( '_JEXEC' ) or die;

class plg<system><plg_system_tdcchromexhrenable> extends JPlugin
{
    /**
     * Load the language file on instantiation. Note this is only available in Joomla 3.1 and higher.
     * If you want to support 3.0 series you must override the constructor
     *
     * @var    boolean
     * @since  3.1
     */
    protected $autoloadLanguage = true; /** * Plugin method with the same name as the event will be called automatically. */ function onBeforeCompileHead() { $document = JFactory::getDocument();
           $document->setMetaData('origin-trial', 'token_goes_here','http-equiv');
           return true;
        }
}
?>

Antworten

2 Eoin Sep 07 2020 at 16:22

Wenn ich du wäre, würde ich dies anstelle von onBeforeRender versuchen:

onBeforeCompileHead

Auf diese Weise fügen Sie dem Dokument das Meta hinzu, bevor es gerendert wird.

Hier ist ein exzellentes Video, in dem die verschiedenen Plugin-Typen erklärt werden. Zugegeben, es kann eine Weile dauern, bis Sie sich mit ihnen vertraut gemacht haben. https://www.youtube.com/watch?v=_agXP5DHm_g&list=PLbSGtuctZCf0VSfiMXWtoD5u7wrSmpr_Y&index=18&t=0s

Es wäre auch gut, diesen Code hinzuzufügen:

    // If we are on admin don't process.
    if (!$app->isClient('site'))
    {
        return;
    }

Joomla hat 2 Client-Apps. Site und Administrator. Dieser Code stellt sicher, dass das Plugin nur die Metadaten zum Frontend und nicht zum Backend hinzufügt. Tatsächlich wird überprüft, ob es sich nicht auf der Site befindet (z. B. Administrator oder ein anderer Clienttyp, z. B. CLI oder Web Services), und ob es sich nicht auf der Site befindet, die es beendet.

2 RobbieJackson Sep 10 2020 at 21:21

Plugins können launisch sein, um richtig zu werden. Hier ist eine kurze Anleitung, wie Sie Ihr Plugin erfolgreich zum Laufen bringen können.

Identifizieren Sie den Plugin-Typ und das Ereignis

Ermitteln Sie zunächst, welches Ereignis Sie abonnieren müssen.

Die von Joomla ausgestrahlten Ereignisse sind in aufgeführt https://docs.joomla.org/Plugin/Events, und diese sind nach Plugin-Typ getrennt. Leider ist nicht immer klar, welches Ereignis Sie abonnieren müssen. Ich habe mir das von Eoin in seiner Antwort vorgeschlagene Video angesehen und dort finden Sie eine gute Beschreibung, wie Joomla aus einer HTTP-Anfrage eine Webseite generiert und in welchen Phasen die Plugin-Ereignisse vom Systemtyp ausgegeben werden.

Für Ihre spezielle Anforderung, ein Meta-Tag in den HTTP-Antwortkopf einzufügen, können Sie wahrscheinlich eines von mehreren Systemereignissen auswählen.

Joomla-Erweiterungen von Drittanbietern können auch Ereignisse generieren. Überprüfen Sie das Erweiterungsdokument für diese.

Regeln der Namensgebung

Sobald Sie wissen, welchen Plugin-Typ Sie entwickeln müssen und welches Ereignis Sie abonnieren möchten, können Sie mit dem Codieren beginnen. Sie müssen sich jedoch strikt an bestimmte Joomla-Namenskonventionen halten. Ich werde diese in Bezug auf den Fall auflisten, in dem Sie ein systemTyp-Plugin namens "Beispiel" erstellen möchten . (Ersetzen Sie "Beispiel" und "System" durch die Namen für Ihr Plugin überall unten.)

Vermeiden Sie Unterstriche in Ihrem Plugin-Namen!

Erstellen Sie den Ordner plg_system_exampleund erstellen Sie in diesem Ordner zwei Dateien:

example.xml(Ihre Manifest-Datei für das Plugin) example.php(Ihre Haupt-PHP-Code-Datei für das Plugin)

Hier ist example.xmlmit den wichtigsten Dingen:

<?xml version="1.0" encoding="utf-8"?>
<extension version="3.8" type="plugin" group="system" method="upgrade">
    <name>plg_system_example</name>
    <description>An example of a plugin</description>
    <files>
        <filename plugin="example">example.php</filename>
    </files>
</extension>

Hier ist example.php(vorausgesetzt, Sie abonnieren onBeforeCompileHead):

<?php
defined( '_JEXEC' ) or die;

class PlgSystemExample extends JPlugin
{
     public function onBeforeCompileHead()
     {
        … your code here
    }
}

Beachten Sie die Großschreibung im Namen der Plugin-Klasse!

Wenn Sie ein anderes Ereignis abonnieren, verwenden Sie die entsprechenden Parameter für Ihren Funktionsaufruf, wie in beschrieben https://docs.joomla.org/Plugin/Events.

Installation

Komprimieren Sie Ihren Ordner, um eine Zip-Datei zu erstellen plg_system_example.zipund zu installieren.

Denken Sie daran, Ihr Plugin zu aktivieren.

Außerdem haben Plugins ein Zugriffsfeld, sodass Sie die Gruppe von Benutzergruppen definieren können, für die das Plugin ausgeführt wird.

Ihr Plugin wird sowohl im Front-End als auch im Back-End ausgeführt. Wie Eoin bereits erwähnt hat, ist es sinnvoll, zu überprüfen, auf welchem ​​Plugin Sie ausgeführt werden, und den entsprechenden Code zu verwenden.

Schließlich habe ich ein kleines Video erstellt, das beschreibt, wie Plugins in Joomla funktionieren https://www.youtube.com/watch?v=UuOPrTu6Vac&feature=youtu.be