Beiträge von LukasHH

    Ich finde die Templates von https://www.joomla51.com/ ganz gut. Es gibt eine sehr große Auswahl an unterschiedlichen Templates, die sich ohne Programmierkenntnisse an die eigenen Bedürfnisse schnell anpassen lassen.


    Aktuell beschäftige ich mich auch mit dem Atroid Framework, was auch einen richtig guten Eindruck macht. Bisher hatte ich immer die Finger von den Frameworks gelassen, da ich eigentlich keine großen Änderungen am Template mehr mache, wenn das einmal steht.

    Ich habe mein Plugin auch fertig, welches auf das Joomla Standard Plugin basiert.


    Im Endeffekt wird die Abfrage erweitert, so dass der User sich entweder mit seinem Benutzernamen oder E-Mail Adresse anmelden kann.


    PHP
    $query = $db->getQuery(true)
    ->select($db->quoteName(['id', 'password','username']))
    ->from($db->quoteName('#__users'))
    ->where($db->quoteName('username') . ' = :username', 'OR')
    ->where($db->quoteName('email') . ' = :email')
    ->bind(':username', $credentials['username'])
    ->bind(':email', $credentials['username']);


    Etwas tiefer muss noch zusätzlich angegeben werden:

    PHP
    $response->username = $result->username;
    $credentials['username'] = $result->username;

    Einfacher ist es auch, wenn du dich an die Datei-/Klassenstruktur von Joomla hälst (was jetzt nicht unbedingt dein Problem löst):

    - CamelCase statt Snake_Case

    - Subscriber-Interface für das Plugin

    Ja - ich habe es jetzt dahingehend geändert und die fehlende Ergänzung vorgenommen.

    Hauptproblem war, dass ich den Zusatz am Ende des Namespace vergessen hatte.


    Jetzt funktioniert es auch. Damit kann ich jetzt weiter machen.

    Ich würde mal sagen, da stimmt was mit dem namespacing nicht.

    Nach meinem Verständnis müsste das richtig sein. Bei den Modulen funktioniert es auf jeden Fall. Bei Plugins hatte ich es bisher noch nie eingesetzt. Bei Plugins kommt ja die Gruppe noch mit dazu.


    In der XML steht

    XML
    <namespace path="src">ITCS\Plugin\Authentication\ItcsEmailLogin</namespace>


    in der "..\plugins\authentication\itcs_email_login\src\Extension\itcs_email_login.php" ist der Eintrag

    PHP
    namespace ITCS\Plugin\Authentication\ItcsEmailLogin;


    und in der "...\plugins\authentication\itcs_email_login\services\provider.php" wir der aufgerufen mit

    PHP
    use ITCS\Plugin\Authentication\ItcsEmailLogin;


    Wenn ich mir die Einträge in der autoload_psr4.php anschaue und vergleiche:

    PHP
    'ITCS\\Plugin\\Authentication\\ItcsEmailLogin\\' => [JPATH_PLUGINS . '\authentication/itcs_email_login/src'],
    'Joomla\\Plugin\\Authentication\\Joomla\\' => [JPATH_PLUGINS . '\authentication/joomla/src'],


    Ich hatte die itcs_email_login.php auch schon mal umbenannt nach Itcs_email_login.php, dass die mit einem großen i beginnt. Aber beim Windows-System spielt das eigentlich keine große Rolle.


    Bei den Modulen habe ich den Namespace genauso, nur da gibt man keinen Pfad an, weil es direkt in die Helper geschrieben wird.

    Version: Joomla 4.3.2

    PHP: 8.0

    localhost (XAMPP)


    Hallo zusammen,


    auf Basis des Joomla Authentication Plugin, wollte ich ein eigenes Authentication Plugin erstellen. Ich hatte mir dazu das in J 4.3 bestehende kopiert und erst einmal mit meinen Namen/Bezeichnungen angepasst. Allerdings scheitere ich noch an der provider.php


    Folgende Meldung wird ausgegeben:

    0 Class "Itcs_email_login" not found


    Inhalt der "services\provider.php" (Kopie vom Original)


    Inhalt der "src\Extension\Itcs_email_login.php"


    Der Namespace wird korrekt in die autoload_psr4.php geschrieben.

    In der XML habe ich bei Namespace auch den Pfad "src" eingetragen.

    Ich kann irgendwie keinen Fehler finden - komme aber nicht darauf, warum das nicht funktioniert.


    Hat von Euch jemand einen Tipp?


    Wollte demnächste noch weitere Plugins von J3 auf J4 umstellen und dann auch gleich auf den neusten Stand bringen. Das hier wäre mein erster Test.

    Ideal wäre ein Authentication Plugin auf Basis des Joomla-Plugin, welches statt des Benutzernamen die E-Mail Adresse abfragt. Ich weiß nicht ob das schon jemand erstellt hat. Ich wollte es für meine Vereinsseite ansonsten auch noch machen. Schon mal bei den Extensions geschaut?

    Und gibt es nicht irgendwo eine vernünftige! Doku zu all den Helpern und Co?

    Wenn Du das für 4.3.x und höher bauen möchtest, dann ist die beste Doku der aktuelle Code auf github. Siehe Link von #2

    Wenn es ggf. auch in älteren Versionen verwendet werden soll, dann könntest Du die Dokus auf der Joomla-Seite nehmen.

    Das Problem bei den Dokus ist aktuell, dass die Änderungen und zukünftigen Verbesserungen schneller entwickelt werden, als man mit der Doku hinterher kommt. Aus diesem Grund scheuen sich auch viele wieder neue Bücher zu schreiben, da das Buch zur Herausgabe schon wieder veraltet ist.


    Aber da das alles Open Source und ein Gemeinschaftsprojekt ist, ist jeder eingeladen sich mit daran zu beteiligen. Dazu gehört neben der Weiterentwicklung auch das Testen, Fehler melden, sowie auch das Schreiben der Dokumentation. ;)

    OK - wenn die Models das nicht selbst pflegen, sondern nur Du. Dann würde ich das über Beiträge machen. Hier lassen sich auch Custom Fields verwenden. Für die Bildergalerie ein wiederholbares Feld mit dem Media-Manager, über diesem man Bilder hochladen und auswählen kann.


    Die Beiträge kannst Du Kategorien zuordnen und auch Tags. Mittels der Tags kannst Du auch Filter anlegen u.ä.


    Für die Bildergalerie mittels Custom Field, gibt es hier einen Ansatz:

    Custom Fields - Episode 7 Part 1: one Custom Field to rule them all
    As you probably have noticed, the title of this Episode takes inspiration from 2 famous films / books:
    magazine.joomla.org

    Ich würde das mit Usern machen - diese in einer separaten Usergruppe. Die Felder für das Profil mit Custom-Fields. Da kann man sich frei "austoben".


    Einzig für die Bilder - da müsste man was einrichten, dass es User-eigene Verzeichnisse gibt, wo nur deren Bilder drin sind und der User auch nur diese Bilder bearbeiten kann. Ich glaube mit dem JCE-Editor sollte so etwas möglich sein.

    Kann es sein, dass Du für den ersten Beitrag einen separaten Menüeintrag hast? Ggf. In diesem Schattenmenü?

    Der generierte Link könnte auf so was hindeuten, da dieser ohne der Beitrags-ID angezeigt wird:

    Code
    https://neu.hillesheim.de/index.php/beispiel-link-3


    Die anderen Links zu den Beiträgen haben die ID des Beitrag voran gestellt. So wie hier mit der "7":

    Code
    https://neu.hillesheim.de/index.php/7-blog-artikel-2

    Die Werte von den custom fields findest Du in der Tabelle #__fields_values


    Das nutze ich, um die Werte abzurufen. Übergeben wird dabei die ID des Users, um all seine Werte abzufragen.

    Kurze Erläuterung des Plugin: Es ist ein User-Plugin und feuert bei onUserAfterSave(). Hier werden die alten und neuen Daten verglichen und bei Änderungen werden diese in einer Mail mit Gegenüberstellung versendet. Die Mail enthält Standard-Werte wie Name, Benutzername und E-Mail des Benutzer. Zusätzlich kann man die Felder vom Joomla-Profil hinzufügen lassen oder auch Custom-Fields, wenn diese aktiviert / angelegt sind.


    Vorher wurde immer eine Mail versendet, wenn die Daten geändert wurden. Mit dem neusten Update habe ich die Auswahl von Benutzergruppen hinzugefügt. Das heißt, bevor die Mail versendet wird, wird zusätzlich geprüft, ob der User Mitglied eines der gewählten Benutzergruppen ist.


    Profile to Mail Plugin


    Für den hier beschriebenen Einsatzfall möchte er aber, dass die E-Mail nur versendet wird, wenn bestimmte Felder ausgefüllt sind.

    Ich habe mich bisher mit den in J4 integrierten Sheduled Tasks noch nicht beschäftigt. Mein Vorschlag wäre sonst gewesen, dass man einen Cronjob erstellt, der die Felder prüft und wenn diese wie gewünscht befüllt sind, dann wird der User in eine andere Benutzergruppe aufgenommen und ein Wert für das Plugin geändert.

    Da brauchst Du etwas mehr Variablen, in denen Du die CSS-Klassen bei Bedarf rein schreibst.



    Ich habe das jetzt so frei Hand geschrieben und nicht getestet. Aber das wäre in etwa eine Variante.

    Ich würde das ggf. etwas kürzer fassen.

    oder so ähnlich