Hauseigenes Kategoriesystem erweitern

  • Guten Morgen


    Gibt es eigentlich eine Möglichkeit das Hauseigene Kategoriesystem zu erweitern?


    Ich würde es gerne versuchen in einem plugin zu verwenden, habe aber noch nicht rausgefunden was ich machen kann wenn ich noch 2 oder 3 weitere inputfelder verwenden möchte ausser Titel und Beschreibung.


    Gruss und danke für jeden Tip


    Sandra

  • Hallo,


    es gibt im categoryAdd - Template entsprechende Template-Events sowie in der abstrakten AbstractCategoryAddForm bzw. AbstractCategoryEditForm die Möglichkeit, per Eventlistener zusätzliche Daten (siehe $additionData und $additionalFields zu verarbeiten und bei dem Datensatz in der Datenbank zu speichern.

  • Fighter456 Vielen Dank. Das Feld kann ich sauber einfügen und anzeigen lassen.

    Klappt das ganze auch mit dem I18nHandler? Egal was ich versuch er wird mir nicht gespeichert. Ich bekomme das Feld mit dem templateListener sauber angezeigt, und kann es auch ausfüllen. Jedoch habe ich probleme mit der Auswertung.


    Beim registrieren kommt kein Fehler, aber sobald ich den Inhalt ausgeben möchte bekomme ich den Fehler

    Code
    #0 */lib/system/language/I18nHandler.class.php (140):
    wcf\system\WCF::handleError(8, 'Undefined index: neuesFeld', '*/lib/system/language/I18nHandler.class.php', 140, [ elementID => ])
    PHP
    public function execute($eventObj, $className, $eventName, array &$parameters) {
            $this->eventObj = $eventObj;
            I18nHandler::getInstance()->register('neuesFeld');
            echo I18nHandler::getInstance()->getValue('neuesFeld');
            exit();
            $this->$eventName();
        }

    Edited 7 times, last by Sandrac ().

  • Du musst den Eventlistener auf die entsprechende Events des Formular ansetzen und über $eventName innerhalb des Codes vom Eventlistener dann jeweils die entscheidenen Aktionen durchführen.


    Als beispielsweise in readData() das Feld registrieren, in validate() den eingebenen Wert validieren und in save() die Speicherung vornehmen.

  • Vielen Dank Matthias Schmidt & Fighter456


    Hmm ich dachte das habe ich. Hier mal mein Aufbau. Vielleicht sehr ihr ja warum es nicht geht. Einerseits bekomme ich es nicht hin das die Felder ausgewertet werden, und beim Speichern rätsle ich noch. Dachte eigentlich es passt so.

    Bei eventname habe ich sicher noch zu viel drin. Für den ersten Test habe ich nur alle drin.

    Die save anweisung ist sicher schwachsinn. Habe gesehen, es gibt noch eine save anweisung für den I18nHandler. Da ich jedoch noch nicht mal einen WErt bekomme habe ich da noch nicht weiter gemacht.

    Am liebsten hätte ich ja additionalData da ich so keine neuen Datenbankfelder erstellen muss. Denke aber kommt ja nicht drauf an.


    Hier noch das Template welches an der entsprechenden Stelle eingefügt wird:

    Code
    {include file='multipleLanguageInputJavascript' elementIdentifier='neuesFeld' forceSelection=false}
    <dl>
        <dt><label for="neuesFeld">{lang}neueendanwendung.acp.ea.neuesfeld.title{/lang}</label></dt>
        <dd>
            <input type="text" id="neuesFeld" name="neuesFeld" value="{$i18nPlainValues['neuesFeld']}" class="long">
            <small>{lang}neueendanwendung.acp.ea.neuesfeld.title.description{/lang}</small>
        </dd>
    </dl>

    Edited once, last by Sandrac ().

  • Hallo,


    assignVariables dürfte überflüssig sein, da die assignVariables-Methode vom I18nHandler in der AbstractCategoryAddForm::assignVariables() aufgerufen wird. Eine Übergabe des Wertes aus deiner Klassenvariable $neuesFeld ist nicht notwendig, da du diese Information im Template nicht benötigst.


    Zeile 42 ist ebenfalls überflüssig, da auch diese Methode in der readParameters()-Methode der Form-Klasse aufgerufen wird.


    Bitte erläutere, was du meinst, wenn du schreibst, dass die Auswertung nicht funktioniert.


    Wie du dem I18nHandler mitteilst, dass dieser dein Feld speichern soll, kannst du dir in vielen Klassen innerhalb des Suite Core abschauen. Beispielsweise hier: https://github.com/WoltLab/WCF…dForm.class.php#L177-L187

  • Bitte erläutere, was du meinst, wenn du schreibst, dass die Auswertung nicht funktioniert.

    Wie oben geschrieben erhalte ich folgenden Fehler:

    Code
    #0 */lib/system/language/I18nHandler.class.php (140):
    wcf\system\WCF::handleError(8, 'Undefined index: neuesFeld', '*/lib/system/language/I18nHandler.class.php', 140, [ elementID => ])

    Wie du dem I18nHandler mitteilst, dass dieser dein Feld speichern soll, kannst du dir in vielen Klassen innerhalb des Suite Core abschauen. Beispielsweise hier: https://github.com/WoltLab/WCF…dForm.class.php#L177-L187

    Ich habe noch nicht rausgefunden wie ich an die categoryID komme um es zu speichern, da ich kein Zugriff auf $returnValues erhalte.

  • Wie oben geschrieben erhalte ich folgenden Fehler:

    Kannst du bitte den kompletten Stacktrace posten, damit man versteht, zu welchem Zeitpunkt der Fehler kommt? Ansonsten wäre es zudem hilfreich, wenn du ein Beispielpaket mit deinem Code zur Verfügung stellst, damit man es selber testen kann.

    Ich habe noch nicht rausgefunden wie ich an die categoryID komme um es zu speichern, da ich kein Zugriff auf $returnValues erhalte.

    $this->objectAction->getReturnValues()['returnValues'] liefert dir das erzeugte Category-Objekt.

  • Kannst du bitte den kompletten Stacktrace posten, damit man versteht, zu welchem Zeitpunkt der Fehler kommt? Ansonsten wäre es zudem hilfreich, wenn du ein Beispielpaket mit deinem Code zur Verfügung stellst, damit man es selber testen kann.

    Ich glaube ich hatte einen überlegungsfehler. Nun mit dem Speichern funktioniert alles. Ich habe immer versucht nur mit I18nHandler::getInstance()->getValue('neuesFeld') an den Inhalt zu kommen und habe dann den Fehler erhalten.

    $this->objectAction->getReturnValues()['returnValues'] liefert dir das erzeugte Category-Objekt.

    Vielen Dank. Ich habe es ohne objectAction versucht. Geht natürlich wunderbar.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!