EXT:comments: Labels via TypoScript

Die Extension „comments“ lässt sich sehr schnell integrieren udn sehr gut für eigene Anwendungsfälle konfigurieren. Einzige Ausnahme: man möchte Sprachlabels ändern, was normalerweise via TypoScript möglich ist:

plugin.tx_comments_pi1 {
    _LOCAL_LANG {
        de {
            pi1_template.add_comment = Schreiben Sie einen Kommentar
        }
   }
}

Leider zeigt das (in Version 1.7.1) keinerlei Wirkung :-(

Ursachenforschung

Eine Ausgabe des $LOCAL_LANG-Arrays, welches via \TYPO3\CMS\Frontend\Plugin\AbstractPlugin::pi_loadLL() geladen wird, zeigt bereits, dass das gesetzte neue Label überhabt nicht ausgelesen wird.

Die main()-Methode der Extension bekommt jedoch mittels $conf die TS-Konfiguration übergeben. Folglich muss der Fehler irgendwo dazwischen liegen. Dazwischen gibt es aber nur einen Aufruf: $this->fixLL();
Dieser Aufruf ist (laut phpdoc-Kommentar) ein Workaround für einen Bug #7154. Der enthaltene Link führt inzwischen leider ins Leere… Der Workaround wurde im Jahr 2008 in die Extension eingebaut. Ob er überhaupt noch nötig ist, wurde nicht weiter geprüft.
Die fixLL()-Methode durchläuft via foreach das Sprach-Array aus der TS-Konfiguration und ruft die interne Methode fixLL_internal() auf. Im PHP-Code fällt dort schnell etwas auf:

    /**
     * Helper function for fixLL. Called recursively.
     *
     * @param    array        $LL    Current array
     * @param    array        $ll    Result array
     * @param    string        $prefix    Prefix
     * @return    void
     */
    function fixLL_internal($LL, $ll, $prefix = '') {
        while (list($key, $val) = each($LL)) {
            if (is_array($val))    {
                $this->fixLL_internal($val, $ll, $prefix . $key);
            } else {
                $ll[$prefix.$key] = $val;
            }
        }
    }

 

Die Methode gibt nichts zurück (@return void) und verändert keine Klassenvariablen. Wie also soll hier etwas bearbeitetes die Methode verlassen? Und warum ist $ll als „Result array“ kommentiert, wenn es doch nirgends als Ergebnis ankommt?

Lösung

Die Lösung des Problem ist das Ergänzen eines „&“ in der Methodendeklaration:

    function fixLL_internal($LL, &$ll, $prefix = '')

 

Und wenn man dann seine Debugging-Session beendet hat, findet man auch den passenden Bugtracker-Eintrag – samt Patch :-(

 

Links

Hinterlasse einen Kommentar.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.