Menüs von Widget-Feldern, Widgets und Tag-Listen können nun kundenspezifisch erweitert werden.
Mit scrivito("menu")
kann auf das Menü-Objekt eines DOM-Elements zugegriffen werden, das CMS-Inhalte repräsentiert. Derzeit ist dies nur bei DOM-Elementen möglich, die Widgets (das Element hat ein data-scrivito-widget-obj-class
-Attribut) oder Widget-Felder (der data-scrivito-field-type
-Attributwert entspricht widget
). Das Menü-Objekt hat mehrere Methoden.
Mit der Methode add
können neue Menüeinträge erzeugt werden:
$(."..").scrivito("menu").add("my_app.my_menu_item", { title: "My Menu Item", icon: "relation", present: function(dom_element) { // see below }, disabled: function(dom_element) { // see below }, execute: function(dom_element) { // invoked when the user clicks }, })
Das erste Argument, my_app.my_menu_item
im obigen Beispiel, ist die id
des Menüeintrags, der referenziert wird. Wenn Aufrufe in mehr als einem Kontext genutzt werden, sollten den IDs ein Namensraum zugewiesen und die Komponenten des Namensraums durch einen Punkt voneinander getrennt werden. Der Namensraum auf der obersten Ebene (beispielsweise eine ID ohne Punkte) ist für die Applikation reserviert und sollte nicht von einer Bibliothek genutzt werden. Alle Menüeinträge, die das SDK liefert, haben beispielsweise den Präfix scrivito.sdk
wie in scrivito.sdk.copy_widget
.
Die folgenden Optionen werden unterstützt:
title
Der Titel des Menüeintrags, der dem Benutzer angezeigt wird.execute
(Funktion) Ein Callback, der aufgerufen wird, wenn ein Redakteur auf den Menüeintrag klickt. Das betreffende DOM-Element wird dem Callback als Parameter übergeben.present
(Funktion, optional) Ein Callback, der steuert, ob der Menüeintrag angezeigt werden soll. Er wird ausgeführt, wenn ein Redakteur das Widget- oder Widget-Feld-Menü öffnet. Wenn die Funktion false
zurückliefert, enthält das Menü den Eintrag nicht. Voreingestellt sind alle Menüeinträge sichtbar.disabled
(Funktion, optional) Ein Callback, der steuert, ob der Menüeintrag deaktiviert werden soll. Er wird ausgeführt, wenn ein Redakteur das Menü öffnet. Wenn die Funktion true
oder einen String zurückgibt, wird der Menüeintrag deaktiviert. Das heißt, er ist sichtbar, kann aber nicht ausgewählt werden. Das betreffende DOM-Element wird dem Callback als Parameter übergeben. Voreingestellt sind Menüeinträge aktiviert.icon
(String, optional)
Der Name eines mitgelieferten Icons. Derzeit gibt es in Scrivito die folgenden Icons:Es gibt zahlreiche Möglichkeiten, Menüeinträge zu manipulieren:
// remove the menu item with the given id $(."..").scrivito("menu").remove(id) // return an array containing all menu items in the menu of the element. $(."..").scrivito("menu").list() // replace a menu item $(."..").scrivito("menu").replace(id, new_menu_item) // change properties of a menu item $(."..").scrivito("menu").update(id, { title: "A new title" })
Mit configure_menu_order
kann die Reihenfolge der Einträge, die in einem Menü enthalten sind, spezifiziert werden. Der Parameter order
ist ein String-Array. Jeder String kann entweder die voll qualifizierte ID eines Menüeintrags sein, oder ein Namensraum, der sich auf mehrere Menüeinträge bezieht, gefolgt von einem Platzhalter (*
):
scrivito.configure_menu_order([ "special_command", "scrivito.editors.cool_stuff", "scrivito.sdk.*", "scrivito.editors.*" ])
Das obige Beispiel definiert, dass der Menüeintrag special_command
der erste Eintrag (wenn im Menü vorhanden) ist, gefolgt vom Eintrag scrivito.editors.cool_stuff
. Danach werden alle Menüeinträge, die aus dem Namensraum scrivito.sdk
stammen, eingefügt. Zum Schluss werden die Menüeinträge des scrivito.editors
-Namensraums angefügt.
Bitte beachten Sie, dass configure_menu_order
eine globale Reihenfolge für alle Menüeinträge in der Applikation definiert, auch wenn einzelne Menüs typischerweise nur eine Teilmenge der Einträge enthalten, die in configure_menu_order
vorhanden sind. Menüeinträge, die in configure_menu_order
nicht spezifiziert werden, werden am Ende des Menüs eingefügt, und zwar in der Reihenfolge, in der sie zum betreffenden Menü hinzugefügt wurden. Menüeinträge, die zu einem Platzhalter passen, werden auch in der Reihenfolge in das Menü eingefügt, in der sie hinzugefügt wurden.
configure_menu_order
sollte von der Applikation aufgerufen werden und nicht von Gems. Gems sollten ihre Menüeinträge in einer sinnvollen voreingestellten Reihenfolge liefern (indem sie in dieser Reihenfolge per add
hinzugefügt werden) und diese in einem Namensraum für die Gruppierung zur Verfügung stellen. Dadurch kann der Entwickler der Applikation einfach die Position für alle Menüeinträge, die durch ein Gem erzeugt werden, festlegen.
Man kann nun mittels Scrivito::Configuration.second_level_cache
in Scrivito einen projektspezifischen Second Level Cache zur Cache Store Chain hinzufügen. Dies ist beispielsweise beim Deployment zu Heroku nützlich, weil das Dateisystem dieses Dienstes flüchtig ist.
Voreingestellt ist kein Second Level Cache konfiguriert. Wenn er gesetzt ist, legt Scrivito den Cache sowohl im Dateisystem als auch im Second Level Cache ab. Ferner durchsucht Scrivito den Second Level Cache, wenn der Dateisystem-Cache kein Ergebnis liefert. Wenn der Second Level Cache Ergebnisse liefert, werden diese im Dateisystem-Cache gespeichert.
Die Konfiguration könnte beispielsweise folgendermaßen aussehen:
# Use Memcached as the 2nd level cache (https://rubygems.org/gems/dalli): require 'active_support/cache/dalli_store' Scrivito.configure do |config| config.second_level_cache = ActiveSupport::Cache::DalliStore.new( 'server-downstairs.localnetwork:1234', 'server-downstairs.localnetwork:4321', username: 'root', password: 'secret' ) end
Der Content Browser ermöglicht es nun, Attributwerte zu spezifizieren, die beim Anlegen von Objekten über den Content Browser automatisch gesetzt werden. Der preset
-Konfigurationswert kann für jeden auswählbaren Filter gesetzt werden:
[…] language: title: 'Languages' field: 'language' type: 'check_box' options: en: title: 'English' preset: language: 'en' fr: title: 'French' preset: language: 'fr' […]
Die obige Definition spezifiziert das language
-Attribut eines per Upload angelegten CMS-Objekts. Das Attribut wird auf „en“ gesetzt, wenn ein Redakteur zuvor den Filter „en“ ausgewählt hat. Entsprechend würde es auf „fr“ gesetzt, wenn vorher dieser Filter ausgewählt werden würde.
Beachten Sie, dass bei der Suche nach Inhalten mehr als ein Wert für ein Einzelauswahl-Attribut (enum
) akzeptiert wird. Trotzdem führt dies beim Upload zu einem Fehler, da die Werte sich gegenseitig ausschließen. In diesem Fall wird der Redakteur gebeten, seine Selektion zu korrigieren und den Upload zu wiederholen.