it-swarm.com.de

Benutzerdefinierte Klassen werden automatisch in eine Komponente geladen

Ich schreibe meine erste Joomla-Komponente. Ich habe festgestellt, dass es 3 sogenannte Einstiegspunkte gibt.

  1. installer
  2. website-Eintrag
  3. admin-Eintrag

An all diesen Einstiegspunkten möchte ich einige allgemeine Dienstprogrammklassen verwenden. Diese Klassen sollten nur Teil dieser Komponente sein und in dem Paket installiert werden, das ich aus dieser Komponente erstelle.

Was ist die beste Vorgehensweise, um diese Klassen zu kopieren, zu registrieren und zu laden? Ich habe festgestellt, dass es ein JLoader gibt, mit dem Sie Klassen registrieren und laden können, mehr jedoch nicht. Es ist nicht klar, wie diese Klassen kopiert werden sollen, da sich ihr Ordner auf derselben Ebene befindet wie die Site- und Admin-Ordner, die bei der Installation kopiert werden.

Es ist auch nicht klar, wie diese Klassen registriert werden sollen, ohne den Einstiegspunkten Code hinzuzufügen. Ofc. wenn das nicht möglich ist, kann ich damit leben. Ich möchte keine PHP Namespaces verwenden, da Joomla sie nicht verwendet und ich joomlisch bleiben möchte.: D

1
inf3rno

Da ich nicht zwei Apps entwickeln möchte, wie von Joomla empfohlen, und MVC nicht verwenden möchte, habe ich beschlossen, alles in einem einzigen Ordner unter demselben Namespace abzulegen.

Die Manifest-Datei sieht ungefähr so ​​aus:

<?xml version="1.0" encoding="utf-8"?>
<extension type="component" version="3.4" method="upgrade">

    <name>example</name>
    <!-- ... -->

    <scriptfile>installer.php</scriptfile>

    <files>
        <filename>example.php</filename>
        <folder>views</folder>
        <folder>Example</folder>
        <folder>language</folder>
    </files>
    <!-- ... -->

    <administration>
        <menu>COM_EXAMPLE_TITLE</menu>
        <files>
            <filename>example.php</filename>
            <folder>Example</folder>
            <folder>language</folder>
        </files>
        <!-- ... -->
    </administration>

</extension>

Meine Klassendeklarationen befinden sich im Ordner Example und die Klassen sind im Namespace Example definiert.

Ich benutze den folgenden Code in den allgemeinen example.php Einstiegspunkt.

JLoader::registerNamespace('Example', JPATH_COMPONENT);

use Example\Component;

Component::getInstance()->run();
0
inf3rno

Wenn die Dienstprogrammklassen nur in Ihrer Komponente verwendet werden, fügen Sie sie in einen Ordner in Ihrer Administratorkomponente ein. Unabhängig davon, ob Sie die Klassen bei JLoader registrieren oder nur erfordern, legen Sie den Pfad wie folgt fest: JPATH_ADMINISTRATOR . '/your_component_name/utilities/a_class.php'. Wenn Sie mehrere Dienstprogrammklassen haben, fügen Sie alle Aufrufe der Klassen in eine Datei ein und fordern Sie diese Datei dann von allen drei Eintragsdateien an.

Den Joomla-Weg zu verallgemeinern ist

  1. fügen Sie all Ihren Code in Ihre Komponente/Modul/Plugin/Vorlage ein - benutzerdefinierter Code geht nirgendwo anders hin.
  2. um das Kopieren von Code zu vermeiden, verwenden Sie Stick-Klassen im Front-End und im Back-End.
3
jamesgarrett