Scrivito 1.1.0

Verbesserungen

Einführung der facettierten Suche

Das Scrivito SDK ermöglicht es nun, facettierte Suchen durchzuführen, um beispielsweise Suchergebnisse zu kategorisieren. Durch Verwendung spezifischer Eigenschaften, kann man den Besuchern der Website nun dabei helfen, schnell das Gesuchte einzugrenzen, in einer Shop-Anwendung beispielsweise nach Hersteller. Die facettierte Suche deckt auch die Erzeugung dynamischer Tag-Clouds und die Bereitstellung einer Auto-Vervollständigung für Redakteure ab. Dieses Beispiel zeigt, wie die acht am häufigsten für Downloads vergebenen Tags sowie die drei Sprachen, die dieser CMS-Objekt-Klasse am häufigsten zugewiesen wurden, ermittelt werden können.

Obj.where("_obj_class", :equals, "Download").facet(
  tags: {limit: 8},
  language: {limit: 3})

Es gibt zwei Arten der Facettierung, die obige, bei der bis zu zehn Attribute angegeben werden können, und eine Einzelattribut-Variante, bei der die Attribute und Optionen direkt spezifiziert werden:

Obj.all.facet("tags", limit: 100)

Die übereinstimmenden CMS-Objekte können zum Suchergebnis hinzugefügt werden. Einzelheiten entnehmen Sie bitte derAPI Dokumentation.

Frei definierbares Routing

Scrivito gibt Ihnen nun die volle Kontrolle über das Routing, das es zur Anwendung hinzufügt. Hierfür steht das neue scrivito_route-API zur Verfügung. Es ist eine Ergänzung zur slug-Methode, mit der die URLs, unter denen die Seiten erreichbar sind, angepasst werden können. Ein Beispiel:

  scrivito_route '(/)(*slug-):id', using: 'slug_id', via: :all

Anwendungsbeispiele und Details zu den scrivito_route-Parametern finden Sie in der mitgelieferten Dokumentation (in englischer Sprache).

Wie Sie Ihre Applikation aktualisieren können

Das Routing, wie es aus früheren Scrivito-Versionen bekannt is, funktioniert weiterhin, und es besteht keine Notwendigkeit, sofort zu handeln. Das neue Routing ist jedoch ab der nächsten Hauptversion die Voreinstellung. Daher empfehlen wir, die Applikation zu aktualisieren. Der erste Schritt zur Aktivierung des frei definierbaren Routings besteht darin, das durch Scrivito eingefügte Routing zu deaktivieren:

Scrivito.configure do |config|
  config.inject_preset_routes = false
end

Danach müssen die folgenden Zeilen zu der Datei „config/routes.rb“ hinzugefügt werden:

scrivito_route '/', using: 'homepage', via: :all
scrivito_route '(/)(*slug-):id', using: 'slug_id', via: :all

# Die folgende Zeile kann gelöscht werden, wenn das alte Routing
# mit der ID am Anfang nie eingesetzt wurde
get '/:id/:slug', to: redirect('/%{slug}-%{id}'), constraints: { id: /\h{16}/ }

scrivito_route '/*permalink', using: 'permalink', format: false, via: :all

Das Routing dürfte nun wie vorher funktionieren und kann einfach an die Anforderungen der App angepasst werden.

Legacy Routing

Mit der Einführung des neuen Routing-APIs wurde die legacy_routing-Konfiguration abgeschafft. Diese Option aktivierte das ID-first-Routing. Jedoch kann dieses alte Verhalten mit dem neuen scrivito_route-API wiederhergestellt werden:

scrivito_route '/', using: 'homepage', via: :all
scrivito_route '(/):id/*slug', using: 'slug_id', via: :all
scrivito_route '/*permalink', using: 'permalink', via: :all

Neuer voreingestellter HTML-Editor

Wie vor kurzem angekündigt ist der MediumEditor nun die neue Voreinstellung für die Bearbeitung von HTML-Markup.

Der Redaktor kann weiterhin genutzt werden, indem use("redactor") in scrivito.select_editor gesetzt wird. Alternativ kann man die Option editor: "redactor" einem einzelnen scrivito_tag übergeben.

Automatische Vervollständigung bei Stringlisten

Autovervollständigung ist eine Funktion, die häufig angefragt wurde. Deswegen haben wir den In-place-Editor für Attribute des Typs stringlist mit dieser Funktion ausgestattet. Er ist nun der Standard-Editor für solche Attribute, wodurch die automatische Vervollständigung für sie ohne weiteres Zutun zur Verfügung steht.

Die automatische Vervollständigung basiert auf dem Ansatz, mit vernünftigem Aufwand das bestmögliche Ergebnis zu erzielen. Damit werden die 100 am häufigsten genutzten Elemente (z. B. Tags) gefunden, die in gleichnamigen stringlist-Attributen in Objekten einer oder mehrerer Objektklassen enthalten sind. Die Attribute, die für die automatische Vervollständigung durchsucht werden, stammen aus den veröffentlichten Inhalten und nicht aus den Inhalten der aktuellen Arbeitskopie. Ferner werden nur stringlist-Attribute von Objektklassen berücksichtigt, die CMS-Objekte repräsentieren. Autovervollständigung berücksichtigt also keine Stringlisten, die in Widgets enthalten sind.

Bilder und andere binäre Dateien über das JS-API kopieren

Mit dem JavaScript-API und jQuerys save und content-Methoden ist es jetzt möglich, die Werte von binären Attributen zu kopieren. Dies ist beispielsweise sinnvoll, wenn CMS-Objekte mit einem Standardbild versehen werden sollen. Der folgende Code kopiert den Wert eines binären Attributs, dessen DOM-ID source_binary_field ist, in das binäre Attribut mit dem Namen target_binary_field:

var binary_content = $("source_binary_field").scrivito("content");
$("#target_binary_field").scrivito("save", binary_content);

Den Fragment-Cache verwenden

Das Scrivito SDK beinhaltet nun einen Helper, scrivito_cache, mit dem das 'Fragment-Caching‘ von Rails in der Applikation genutzt werden kann. Fragment-Caching bezieht sich auf die berechneten Teile der Views und trägt dazu bei, die Performanz der Applikation zu verbessern.

Die scrivito_cache-Methode erweitert das integrierte Fragment-Caching. Hierbei werden die zwischengespeicherten Teile eines Views automatisch neu berechnet, sobald sich Scrivito-Inhalte ändern. Die Fragmente werden nur für den veröffentlichten Inhalt zwischengespeichert. Für Arbeitskopien findet keine Zwischenspeicherung statt, und die Fragmente werden für jede Anfrage neu berechnet. Ein Anwendungsbeispiel:

<% scrivito_cache 'navigation' do %>
  <%= expensive_navigation_computation %>
<% end %>

Zusätzlich kann mit der neuen Scrivito::Workspace#cache_key-Methode eine eigene Caching-Lösung implementiert werden. Weitere Details hierzu können der API-Dokumentation entnommen werden.

Weitere Informationen zum Thema Caching bietet dieser hervorragende Rails-Leitfaden.

Weitere Verbesserungen

Wenn keine spezifische Filterkonfiguration für den Content Browser gesetzt wurde, greift nun ein voreingestellter Filtersatz.

Die voreingestellten Filter ermöglichen es dem Redakteur, nach allen CMS-Objekten, ausschließlich nach Bildern oder Downloads (alle Binärdateien mit Ausnahme von Bildern) zu selektieren. Auch neue CMS-Objekte oder Objekte, die in der Arbeitskopie geändert wurden, können leicht gefunden werden.


Die neue Methode Obj#sorted_toclist, gibt die nicht binären Unterobjekte eines gegebenen CMS-Objekts zurück, ähnlich wie Obj#toclist. Jedoch sortiert diese Methode die CMS-Objekte nach dem child_order Attribut, das auch für die Sortierung der integrierten Navigationen genutzt wird. Weitere Informationen zur Verwendung des Attributs child_order finden Sie in dem Artikel Making Navigations Sortable (in englischer Sprache).


Der scrivito_tag-Helper erzeugt nun eine einfache voreingestellte Repräsentation von Attributen der Typen stringlist, enum, multienum, link, linklist, reference und referencelist, so dass keine eigenen Helper für sie geschrieben werden müssen, wie es noch in den Release Notes zu Version 0.90.0 des SDKs hieß.