Plugins vom Typ Fields ohne Namespace

  • Ich überlege ein Fields Plugin zu erstellen und wollte dabei abgucken. Als erstes ist mir nun aufgefallen, dass die in Joomla vorhandenen keine Namespaces haben. Warum ist das so?


    Ich habe dann einen hinzugefügt und ein eigenen Feld unter src/Field eingefügt. Der namespace wird wohl richtig zugeordnet. Das sehe ich in der Datei /administrator/cache/autoload_psr4.php. Mein Plugin findet das Feld aber nicht?

  • Mit Fields-Plugins kenne ich mich nicht sonderlich aus, aber


    Vermutlich musst noch ein addfieldprefix in deiner Manifestdatei einsetzen. Irgendwo willkürlich rausgezogen z.B.

    Code
    <fields name="joomlatoken" addfieldprefix="Joomla\Plugin\User\Token\Field">

    Man kann aber durchaus auch noch mit dem oldfashioned

    Code
    <fields name="params" addfieldpath="/plugins/system/n3tdebug/fields">

    arbeiten, falls man J3/J4-kompatibel sein will.


    Sogar beide setzen ist möglich.


    Warum ist das so?

    Da scheint die Antwort zu sein: Weil die Core-Field-Plugins bisher keinen eigenen Namespace benötigen.

  • Ich überlege ein Fields Plugin zu erstellen und wollte dabei abgucken. Als erstes ist mir nun aufgefallen, dass die in Joomla vorhandenen keine Namespaces haben. Warum ist das so?


    Ich habe dann einen hinzugefügt und ein eigenen Feld unter src/Field eingefügt. Der namespace wird wohl richtig zugeordnet. Das sehe ich in der Datei /administrator/cache/autoload_psr4.php. Mein Plugin findet das Feld aber nicht?

    Ich meine, dass du in einem Custom Field nicht unkompliziert Namespaces verwenden kannst. Ein selbst geschriebenes Feld wird standardmäßig über die Funktion onCustomFieldsGetTypes() im Unterverzeichnsi /fields gesucht.

    Siehe https://github.com/joomla/joom…ugin/FieldsPlugin.php#L96

  • Dann habe ich die Frage wohl falsch verstanden. Wenn ich in einem Plugin in src/Field ein eigenes Formular-"BlahblahField.php" anlege, dann meine ich damit ein Formularfeld, dass ich dann in einer XML-Datei via <field type="Blahblah">...</field> nutzen kann, wenn ich das Attribut addfieldprefix entsprechend angebe.

    .

    Das sollte ja meines Erachtens eigentlich auch in einem com_fields-Plugin möglich sein. Hängt halt auch davon ab, wie die Namespaces definiert werden, was wir bisher ja nicht wissen. Weil, eigentlich wurden die Namespaces ja erfunden, um "Pfad"-Konflikte zu vermeiden. Letztlich bekommt ja nur mein BlahblahField.php eine eigene Namespace-Zeile.

  • Ja, auch, wenn's in diesem Thread vermutlich um was anderes geht, spricht nichts dagegen eigene /fields/-Plugins mit einem Irgendwas-Master-Namespace zu versehen und im /src/-Ordner mit weiteren "genamespacten" Klassen zu versehen (Formularfelder, Helper, Whatever), die dann über use-Zeilen verwendet werden können. Der eigentlichen Funktionalität des com_fields-Feldes tut das nicht weh.

  • Ja, auch, wenn's in diesem Thread vermutlich um was anderes geht, spricht nichts dagegen eigene /fields/-Plugins mit einem Irgendwas-Master-Namespace zu versehen und im /src/-Ordner mit weiteren "genamespacten" Klassen zu versehen (Formularfelder, Helper, Whatever), die dann über use-Zeilen verwendet werden können. Der eigentlichen Funktionalität des com_fields-Feldes tut das nicht weh.

    Wo fügst du die use-Zeile genau ein? Das Feld selbst wird ja gar nicht im Fields Plugin instanziiert.


    Ich meine, dass du in einem Custom Field nicht unkompliziert Namespaces verwenden kannst. Ein selbst geschriebenes Feld wird standardmäßig über die Funktion onCustomFieldsGetTypes() im Unterverzeichnsi /fields gesucht.

    Siehe https://github.com/joomla/joom…ugin/FieldsPlugin.php#L96


    Im Unterverzeichnis /fields klappt es bei mir. Mein Feld ist also nicht das Problem. Das ist wohl noch die Art, wie ich den Namespace nutze. Ich möchte aber Namespaces nutzen

  • Wo fügst du die use-Zeile genau ein? Das Feld selbst wird ja gar nicht im Fields Plugin instanziiert.

    Man braucht nicht immer eine eigene use-Zeile.


    Ein eigenes com_fields-Plugin sei "Firlefanz".


    In der Manifest plugins/fields/firlefanz/firlefanz.xml findet sicxh

    Code
    <namespace path="src">Joomla\Plugin\Fields\Firlefanz</namespace>

    in plugins/fields/firlefanz/src/Field hast dein eingenes Formularfeld in Datei BlahblahField.php. Das ist KEIN com_fields-Feld, sondern ein stinknormales, sozusagen.


    Diese beginnt mit

    Code
    namespace Joomla\Plugin\Fields\Firlefanz\Field;

    In jeder XML-Datei, die dieses Formularfeld anzeigen/verwenden soll, trägst mindestens 1

    Code
    addfieldprefix

    ein, z.B. so:

    Code
    <field
    name="blabla"
    type="Blahblah"
    label="Blah Blah"
    addfieldprefix="Joomla\Plugin\Fields\Firlefanz\Field"
    />


    Falls du aber irgendein anderes Feld hast, das dein BlahblahField.php z.B. extenden soll


    BlubberField.php


    Code
    use Joomla\Plugin\Fields\Firlefanz\Field\BlahblahField;
    
    ...
    
    class BlubberField extends BlahblahField
    {

    Dass ich oben in #5 use-Zeilen erwähnt habe, bezog sich auf z.B. eigene Helper-Klassen in

    Code
    Joomla\Plugin\Fields\Firlefanz\Helper


    DAS ALLES ist aber kompletter Standard. Jedwede Joomla-Erweiterung kann das so oder ähnlich machen.


    Grundlegend verstehe ich diese Antwort nicht:

    Im Unterverzeichnis /fields klappt es bei mir. Mein Feld ist also nicht das Problem. Das ist wohl noch die Art, wie ich den Namespace nutze. Ich möchte aber Namespaces nutzen

    Wenn du ein com_fields-Plugin schreibst, sollte das natürlich in Ordner plugins/fields/ installiert sein, was ja auch gar kein Problem darstellt. Da gehören die halt rein. Wozu der Stress auf Automatismen Joomlas zu verzichten???


    Das von mir beschriebene Namespacing, ist ja lediglich als Ergänzung zu betrachten, zu welchem Zwecke auch immer.


    Ich denke zwar, dass es mehr oder weniger "blöde" Varianten/Wege gibt diese plugins/fields-Pflicht zu umgehen, aber wozu denn?


    com_fields-Plugins waren von Anfang an etwas vorbei an anderen Plugins, weil sie eben an eine Core-Komponente gebunden sind, die ihre eigene "Denke" hat. Ein Grund, warum ich sie nie so gerne verwendet habe.