Search the FirstSpirit Knowledge Base
Hallo FirstSpirit Community und e-spirit Experten,
auf welche Art und Weise kann ich in einer Seitenvorlage ermitteln, ob bei der aktuellen Seite um eine Contentprojektion Seite geht oder nicht?
Und wenn das eine Contentprojektion Seite ist, ob sie zur Anzeige eines einzelnen Datensatzes (Anzahl der Einträge pro Seite = 1, Maximale Seitenanzahl = 0) oder der Auflistung von mehreren Datensätzen (Anzahl der Einträge pro Seite = 0, Maximale Seitenanzahl = 1) pro Seite dient?
Vielen Dank.
Mit freundlichen Grüßen,
Olga
Hallo Olga,
> Der Check #global.dataset.isNull wirft leider auch die IOOB Exception bei Contentprojektion Seite mit leeren Datenmenge
Das ist "gefühlt" erst einmal ein Bug. Man kann natürlich die Abfragen sauber machen (erst prüfen, ob es eine Content-Projektionsseite ist [#global.multiPageParams.data.isNull] und dann die Größe der Liste prüfen [#global.dataset.size > 0]. )
Aber in meinen Augen muss auch eine direkte Prüfung von #global.dataset ohne Fehler möglich sein.
> kann die Prüfung isEmpty in FirstSpirit die zusätzlichen Checks wie isSet und isNull sparen?
Die Unterschiede zwischen den Methoden sind nicht allzu groß, aber vorhanden.
isSet prüft eine Variable darauf, ob sie im Kontext vorhanden ist (also definiert wurde).
isNull prüft, ob der entsprechende Zeiger auf NULL zeigt oder nicht. Aus isNull==true kann man also nicht ableiten, ob die Variable auf NULL zeigt oder nicht definiert wurde. [In der Praxis wird dies kaum einen Unterschied machen]
isEmpty prüft darauf, ob eine Variable "per Definition" leer ist. Das bedeutet nicht zwingend, dass sie auf NULL zeigt, sondern kann auch eine semantische Bedeutung haben. Ein gutes Beispiel hierfür ist die Eingabekomponente CMS_INPUT_DOM. Die ist (wenn ein Knoten einmal sichtbar war und gespeichert wurde) normalerweise "nicht null", aber "empty".
> Meistens im Projekt verwenden wir nur diese Prüfung, welche oft die Meldung "Undefined variable" auslöst, falls Variable nicht gesetzt ist. Die Meldung ist aber kein Fehler, erscheint nur im Debug Output. Wie geht FirstSpirit damit um?
Ich hätte die Debug Meldung nur erwartet, wenn der Debug Mode explizit aktiviert wird ($CMS_SET(#global.debugMode,true)$)
Aber egal - FirstSpirit wertet Meldungen anhand des "Loglevels" aus. Eine Warnung ist also nur eine Meldung, die im Loglevel WARN erzeugt wird, ein Fehler benötigt das Loglevel ERROR. Eine Debug Meldung wird also (was beispielsweise Generierungsfehler angeht) ignoriert.
Hilft Dir das weiter?
Holger
Hallo Holger.
Ja, danke, etwas mehr klar
Und hier, wie vereinbart, das Code Beispiel zur Frage bzgl Contentprojektion Seite, wobei angenommen, dass eine Contentprojektion Seite mit der Einstellung "Anzahl der Einträge pro Seite = 0"(oder >1) zur Auflistung der Daten dient (z.b. Produkten Übersicht), und die Contentprojektion Seite mit der Einstellung "Anzahl der Einträge pro Seite = 1" - zur Anzeige der Daten Details (Details zum Produkt):
in Java:
Content2Params params = pageRef.getContent2Params();
if (params != null) {
// eine Contentprojektion Seite
if (params.getRecordCountPerPage() == 1) {
// Detailseite
} else {
// Auflistungseite
}
} else {
// keine Contentprojektion Seite
}
in FirstSpirit Vorlage:
$CMS_SET(params, #global.node.getContent2Params())$
$CMS_IF(!params.isNull)$
$-- eine Contentprojektion Seite --$
$CMS_IF(params.getRecordCountPerPage() == 1)$
$-- Detailseite --$
$CMS_ELSE$
$-- Auflistungseite --$
$CMS_END_IF$
$CMS_ELSE$
$-- keine Contentprojektion Seite --$
$CMS_END_IF$
Mit freundlichen Grüßen,
Olga