Neuerungen für Entwickler in WoltLab Suite 5.2

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.
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.
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:
{user object=$user}
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.
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.
{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>
{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.
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}',
});
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()}
Alles anzeigen
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:
{@'wcf.user.notification.stacked.authorList'|language}
Um die Metadaten eines Paketes zu aktualisieren ohne etwas anderes zu ändern, wurde der <void/>-Marker für Update-Anweisungen hinzugefügt:
<instructions type="update" fromversion="1.0.0">
<void/>
</instructions>
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:
Kommentare 5