mkresse
I'm new here

ContentProcessor für CSS Preprocessing

Hallo zusammen,

ich würde gern die CSS-Dateien eines FirstSpirit-Projektes bei der Generierung von einem CSS-Präprozessor bearbeiten lassen. Dazu scheint der de.espirit.firstspirit.generate.ContentProcessor (bzw. AbstractContentProcessor) geeignet zu sein. Leider habe ich dazu keine Beispiele gefunden. Hat jemand bereits etwas ähnliches gemacht, oder kann mir einen Hinweis dazu geben?

Nach meinem Verständnis des Interfaces würde ich ansonsten folgendermaßen vorgehen:


  1. in init() den übergebenen generationContext.page.extension prüfen, falls != ".css", OutputStreamWriter mit passendem Encoding erstellen
  2. andernfalls einen CharArrayWriter erstellen, nach finish() dessen Buffer auslesen und bearbeiten, dann das Ergebnis an den OutputStream senden

Würde dieses Vorgehen so auch für die Vorschau funktionieren? Wie müsste der fsm-Moduldeskriptor aussehen - reicht es, den ContentProcessor als Public-Komponente eines Moduls zu definieren?

Vielen Dank schonmal für Antworten,

Martin

0 Kudos
3 Replies
mkresse
I'm new here

Tatsächlich konnte ich genau so einen funktionierenden ContentProcessor umsetzen, leider kann ich diesen nur einem Präsentationskanal und somit einem Vorlagensatz zuweisen, für Medien funktioniert das scheinbar leider nicht.

Als Alternative habe ich nun ein Script, dass manuell ausgelöst die CSS-Dateien aus der Medienverwaltung ausliest, bearbeitet, und in einem separaten Folder in der Medienverwaltung wieder einfügen.

0 Kudos
Peter_Jodeleit
Crownpeak employee

Dein erstes Posting hatte ich leider übersehen, sonst hätte ich dir den Umweg ersparen können. Das Interface ContentProcessor ist tatsächlich nur für (Seiten-)Inhalte.

Peter
marius_haechler
Elite Observer

Hallo Martin

Wir haben das Problem bei uns über zusätzliche Dateien gelöst.

Wir importieren mehrere Medien (CSS/Javascript) ins System und möchten gerne, dass FirstSpirit diese als eine Datei in komprimierter Form ausliefert.

Dazu haben wir zum Beispiel eine CSS-Datei ähnlich dieser angelegt:

$-- Inhalt über CMS_INCLUDE von anderen Medien laden und alle in eine Variable speichern --$
$CMS_TRIM(level:3)$$CMS_SET(content)$;
$CMS_INCLUDE(media:"file1")$;
$CMS_INCLUDE(media:"file2")$;
$CMS_END_SET$
$-- Eigens geschriebene Klasse aufrufen und den Inhalt als String übergeben --$
$CMS_SET(compressor, class("namespace.CSSCompressor").new(#global))$
$-- Alles mit CMS_VALUE ausgeben. (compress gibt einen String zurück) --$
$CMS_VALUE(compressor.compress(content.toString()))$$CMS_END_TRIM$
0 Kudos