Scrivito 0.65.0

Verbesserungen

Anpassbare Anzeigenamen für Objekt- und Widgetklassen

Die Namen, die Redakteuren für Objektklassen angezeigt werden, können nun überschrieben werden. Dafür wurden die Obj.description_for_editor und Widget.description_for_editor-Methoden eingeführt. Sie funktionieren analog zu Obj#description_for_editor. Um beispielsweise „Zwei Spalten für das TwoColumnWidget anzuzeigen, kann der folgende Code genutzt werden:

class TwoColumnWidget < Widget
  def self.description_for_editor
    "Zwei Spalten"
  end
end

Ein guter Anwendungsfall für diese neue Methode sind die Thumbnail-Templates, die zum Rendern der Elemente in den Widget- und Seiten-Browsern genutzt werden. Dort muss nur der erste Parameter des Aufrufs gegen scrivito_thumbnail ausgetauscht und der neuen Methode übergeben werden:

<%= scrivito_thumbnail TwoColumnWidget.description_for_editor do %>
  Inhalte in zwei Spalten anordnen 
<% end %>

Beachten Sie, dass der Fallback der Methode die entsprechende Klassenmethode ist. Sie entspricht dem Namen der Klasse. Eine detaillierte Beschreibung der description_for_editor-Methoden ist auf scrivito.com im Leitfaden Creating a Page Type with Widgets zu finden.

Vorgegebene Attributwerte für Objektklassen

In den CMS-Objekt-Models können nun Werte für alle Attributtypen vorgegeben werden. Ein vorgegebener Wert kann beispielsweise abhängig vom aktuellen Benutzer ermittelt werden.

Widget-Bearbeitungselemente in Eigenschaftendialogen

Widgets, die in Eigenschaftendialogen von Seiten und Widgets gerendert werden, haben nun Widget-Menüs und können mittels der Marker per Drag-and-Drop verschoben werden. Dies ist insbesondere bei verschachtelten Widgets („Container-Widgets“) nützlich, deren Komponenten nicht direkt auf der jeweiligen Seite arrangiert werden können. In Eigenschaftendialogen werden Widgets vom Details-View ihrer jeweiligen Model-Klasse gerendert.

Erweiterbare Seitenmenüs

Analog zu den Menüs von Listen und Widgets können nun auch Seitenmenüs erweitert werden, um Redakteuren an das jeweilige Projekt angepasste Funktionen zur Verfügung zu stellen.

Hierfür wurde die scrivito.page_menu-Methode eingeführt. Seitenmenüs können dabei mit derselben Methode wie Widget-Menüs sortiert werden: scrivito.configure_menu_order.

Globaler Zugriff auf den Content Browser

Bei der In-place-Bearbeitung von Inhalten kann der Content Browser nun unabhängig von Bearbeitungsaktionen geöffnet werden. Hierfür ist ein neuer Button in die Scrivito Menüleiste ausgenommen worden. 

Bearbeitungsbereiche und  Menüelemente wurden überarbeitet

Um Scrivitos User Interface für Redakteure intuitiver zu gestalten, wurde das Aussehen der Menüelemente und Bearbeitungsbereiche verbessert.

Die Elemente, die Navigationslisten im UI darstellen, sind nun blau und haben ein eigenes Icon. Dadurch können Sie sofort von Widgets unterschieden werden, nicht erst nach einem Klick auf den Marker.

Darüber hinaus wird nun beim Bewegen des Mauszeigers immer der Rahmen mindestens eines Widgets hervorgehoben. Dadurch ist erkennbar, welche Teile der Seite betroffen sein werden, wenn Inhalte geändert, verschoben oder in ein Widget kopiert werden.

Außerdem wird für leere Widgetfelder kein Menü-Icon mehr angezeigt. Leere Felder sind stattdessen nun mit einem deutlich erkennbaren „Hinzufügen“-Icon ausgestattet. Mit einem Klick in das Feld können neue Inhalte ganz einfach hinzugefügt werden. 

Zudem wurde das Aussehen der Marker von Widgets, die andere Widgets beinhalten können, überarbeitet. Diese Widgets, die eigentlich ausschließlich das Layout bestimmen (auch „Container-Widgets“ genannt), haben nun einen orangefarbenen Rahmen.

Flexibleres Routing

Um den Anforderungen der meisten unserer Kunden gerecht zu werden, haben wir das Verhalten des Scrivito-Routings geändert. Bislang war das Routing-Format “/:id/:slug”; die ID der CMS-Seite kam zuerst, gefolgt vom Slug wie in:

/2ec86ba3f20ebb9a/refreshing-page-content

Nun sind die Routing-Komponenten in umgekehrter Reihenfolge angeordnet und bilden eine einzige URL-Pfadkomponente, die mit dem Slug beginnt und durch einen Bindestich von der ID getrennt ist: „/:slug-:id“:

/refreshing-page-content-2ec86ba3f20ebb9a
https://scrivito.com/refreshing-page-content-2ec86ba3f20ebb9a

Somit können nun die folgenden URLs gebildet werden, indem der Slug entsprechend definiert wird:

/documentation/js-api/refreshing-page-content-2ec86ba3f20ebb9a
https://scrivito.com/documentation/js-api/refreshing-page-content-2ec86ba3f20ebb9a

/documentation.js-api.refreshing-page-content-2ec86ba3f20ebb9a
https://scrivito.com/documentation.js-api.refreshing-page-content-2ec86ba3f20ebb9a

Requests mit URLs im alten Format werden auf URLs im neuen Format umgeleitet:  „https://scrivito.com/2ec86ba3f20ebb9a/refreshing-page-content“ wird also auf „https://scrivito.com/refreshing-page-content-2ec86ba3f20ebb9a“ umgeleitet.

Da der “:slug”-Teil der URL optional ist, funktioniert das reine ID-basierte Routing wie gewohnt: 

/2ec86ba3f20ebb9a
https://scrivito.com/2ec86ba3f20ebb9a

Das alte Routing mit der ID als erstem Bestandteil kann mit dem legacy_routing-Key wieder aktiviert werden:

Scrivito.configure do |config|
  config.legacy_routing = true
end

Weitere Verbesserungen:

Über das JavaScript-Such-API können die Ergebnisse nun auch nach Date-Objekten gefiltert werden. Um alle CMS-Objekte zu finden, die in diesem Jahr geändert wurden, kann dieser Code genutzt werden:

scrivito.obj_where('_last_changed', 'is_greater_than', new Date(2015, 1, 1));

Scrivitos Cache für Inhalte wirkt nun über einzelne Web-Requests hinaus. Dies verbessert die Performanz von Skripten und Befehlen in der Rails Konsole. Allerdings werden In-place-Änderungen aufgrund des Cachings erst sichtbar, nachdem Arbeitskopien mit Workspace#reload aktualisiert wurden.


Der Content Browser verfügt nun über ein Modus-Flag, stand_alone:

scrivito.content_browser.open({stand_alone: true});

In diesem Modus können Redakteure Inhalte unabhängig von den betreffenden Seiten durchsuchen, erstellen, hochladen und bearbeiten. Der „Auswählen“-Button wird dabei nicht angezeigt, da ausgewählte Elemente nirgendwo eingefügt werden könnten. 


Der neue scrivito_details_for-Helper generiert HTML-Markup für Seiten- und Widget-Detail-Dialoge. Das generierte Markup hat eine DOM-Struktur und CSS-Klassen, die mit dem CSS des SDKs kompatibel sind. Beispiel:

<!-- app/views/text_image_widget/details.html.erb -->

<%= scrivito_details_for 'Image alignment' do %>
  <%= scrivito_edit_enum widget, :image_alignment %>
<% end %>
<%= scrivito_details_for do %>
  <%= scrivito_tag :div, widget, :content %>
<% end %>

Der obige Code erzeugt den folgenden Eigenschaftendialog: 


Wenn Widgets in einem details.html.erb-View eines anderen Widgets oder einer Seite gerendert werden, wurden dafür bisher ihre show.html.erb-Templates genutzt. Nun werden sie über ihr eigenes details.html.erb-Template gerendert.