In den vorherigen drei Teilen haben wir uns primär mit den greifbaren Neuerungen und Verbesserungen der WoltLab Suite 5.3 befasst. In Neuerungen in WoltLab Suite 5.3 (Teil 3) haben wir zuvor beispielsweise die überarbeitete Verwaltung der Benachrichtigungseinstellungen oder die Neugestaltung der Trophäen genauer beleuchtet.
Wir möchten diese Reihe kurzfristig unterbrechen, um auf Änderungen einzugehen, die für Entwickler von Erweiterungen und Apps von Bedeutung sind. Dieser Teil richtet sich ausschließlich an Entwickler, wir werden erst mit dem nächsten regulären Teil 4 wieder auf weitere Neuerungen für die Betreiber bzw. Nutzer eingehen.
Neue Template-Plugins
Wir haben einige neue Template-Plugins mit dem Ziel eingeführt, die Komplexität von Templates und Phrasen zu verringern und duplizierten Code zu verringern.
anchor
Das anchor-Template-Plugin erzeugt a-HTML-Elemente und ihm können Objekte übergeben werden, die ITitledLinkObject implementieren:
{anchor object=$object}
{* generates the same output as: *}
<a href="{$object->getLink()}">{$object->getTitle()}</a>
Alternativ können link- und content-Attribute verwendet werden:
{anchor link=$linkObject content=$content}
{* generates the same output as: *}
<a href="{$linkObject->getLink()}">{$content}</a>
wobei $linkObject ILinkableObject implementiert und $content entweder ein Objekt ist, das ITitledObject implement oder eine __toString()-Methode besitzt, oder $content ist eine String oder eine Zahl.
Weitere Informationen sind in unserer Entwickler-Dokumentation zu finden.
user
Links zu Benutzerprofilen werden sehr häufig in Templates erzeugt. Um diese Aufgabe zu vereinfachen, wurde das user-Template-Plugin hinzugefügt, das nur ein UserProfile-Objekt benötigt:
ist äquivalent zu
<a href="{$user->getLink()}" data-object-id="{$user->userID}" class="userLink">{@$user->getFormattedUsername()}</a>
Standardmäßig wird der formattierte Benutzernamen ausgegeben, der als „Benutzer-Darstellung“-Einstellung der relevanten Benutzergruppe verwendet wird. Außerdem werden die Attribute ausgegeben, die benötigt werden, damit das Benutzer-Popover erscheint, wenn man mit der Maus über den Link fährt.
Weitere Informationen, beispielsweise wie mit dem neuen Template-Plugin auch Benutzeravatare ausgegeben werden können, sind in unserer Entwickler-Dokumentation zu finden.
plural
Das plural-Template-Plugins vereinfacht es, Texte zu generieren, bei denen zwischen Singular und Plural unterschieden werden muss, ohne if-Konstrukte zu verwenden. # dient dabei als Platzhalter für den eigentlichen Wert.
Deutsches Beispiel
{assign var=numberOfWorlds value=2}
<h1>Hallo {plural value=$numberOfWorlds 1='Welt' other='Welten'}!</h1>
<p>Es gibt {plural value=$numberOfWorlds 1='eine Welt' other='# Welten'}!</p>
{* generates *}
<h1>Hallo Welten!</h1>
<p>Es gibt 2 Welten!</p>
Englisches Beispiel
{assign var=numberOfWorlds value=2}
<h1>Hello {plural value=$numberOfWorlds 1='World' other='Worlds'}!</h1>
<p>There {plural value=$numberOfWorlds 1='is one world' other='are # worlds'}!</p>
{* generates *}
<h1>Hello Worlds!</h1>
<p>There are 2 worlds!</p>
Weitere Informationen, insbesondere für Sprachen mit komplexeren Regeln, sind in unserer Entwickler-Dokumentation zu finden.
jslang
Wenn Phrasen in JavaScript-Code verfügbar via Language.addObject() zugänglich gemacht werden, sollte jslang in einfachen Anführungszeichen anstelle von lang verwenden werden, um Probleme mit Anführungszeichen zu vermeiden:
// old
Language.addObject({
'app.foo.bar': '{lang}app.foo.bar{/lang}',
});
// new
Language.addObject({
'app.foo.bar': '{jslang}app.foo.bar{/jslang}',
});
Verringere Komplexität von Benachrichtigungsphrasen
Benachrichtigungsphrasen können ziemlich komplex sein, insbesondere für gruppierte Benachrichtigungen. Zusätzlich zum plural-Template-Plugin haben wir weitere Aspekte bei diesen Phrasen geändert, um ihre Komplexität zu verringen:
Da die gesamte Benachrichtigung nun angeklickt werden kann, wurden alle Links mit strong-Elementen im Benachrichtigungstext ersetzt.
Häufig verwendeter Templatecode um Reaktionen oder Labels auszugeben kann durch den Aufruf neuer Methoden ersetzt werden:
{* old *}
{implode from=$reactions key=reactionID item=count}{@$__wcf->getReactionHandler()->getReactionTypeByID($reactionID)->renderIcon()}×{#$count}{/implode}
{* new *}
{@$__wcf->getReactionHandler()->renderInlineList($reactions)}
{* old *}
<span title="{$like->getReactionType()->getTitle()}" class="jsTooltip">{@$like->getReactionType()->renderIcon()}</span>
{* new *}
{@$like->render()}
{* old *}
<span class="label badge{if $label->getClassNames()} {$label->getClassNames()}{/if}">{$label->getTitle()}</span>
{* new *}
{@$label->render()}
Display More
Außerdem wurde das häufig verwendete Konstrukt
{if $count < 4}{@$authors[0]->getAnchorTag()}{if $count != 1}{if $count == 2 && !$guestTimesTriggered} und {else}, {/if}{@$authors[1]->getAnchorTag()}{if $count == 3}{if !$guestTimesTriggered} und {else}, {/if} {@$authors[2]->getAnchorTag()}{/if}{/if}{if $guestTimesTriggered} und {if $guestTimesTriggered == 1}ein Gast{else}Gäste{/if}{/if}{else}{@$authors[0]->getAnchorTag()}{if $guestTimesTriggered},{else} und{/if} {#$others} weitere Benutzer {if $guestTimesTriggered}und {if $guestTimesTriggered == 1}ein Gast{else}Gäste{/if}{/if}{/if}
in Phrasen für gruppierte Benachrichtigungsnachrichten mit einer neuen Phrase ersetzt:
void-Package-Installation-Plugin
Um die Metadaten eines Paketes zu aktualisieren ohne etwas anderes zu ändern, wurde der <void/>-Marker für Update-Anweisungen hinzugefügt:
Wenn der <void/>-Marker vorhanden ist, darf es keine weiteren Update-Anweisungen geben.
Weitere Informationen befinden sich in unserem Migrationsguide von WoltLab Suite 5.2 nach WoltLab Suite 5.3 in unserer Entwickler-Dokumentation: