Annika
I'm new here

Uid aus Catalog-Cards auslesen

Jump to solution

Hallo Commuity!

Aktuell möchten wir eine Seiten-Serie bauen. Der hauptsächliche Inhalt besteht pro Seite aus einer jeweils anderen fest definierten Menge, die wir in entsprechen viele "Seiteninhalt"-Absatzvorlagen auslagern möchten.

Jede dieser Seiten soll nur ein "Seiteninhalt"-Absatzelement beinhalten. Daher können wir nicht den Inhaltsbereich der Seitenvorlage verwenden, da dieser sich nicht auf ein einzelnes Element beschränken lässt.

Stattdessen stellen wir nun einen Catalog zur Verfügung.

Was uns vor eine Herausforderung stellt:

Für jede der verschiedenen "Seiteninhalt"-Absatzvorlagen gibt es ein eigenes CSS und JS.
Ich dachte ursprünglich ich könne auf der Seitenvorlage einfach die Uid des in den Catalog eingepflegten Elements auslesen. Das ist leider nicht so leicht wie ich dachte, da die Methode getUid() für die Card-Objekte nicht zur Verfügung steht.

Die einzige Möglichkeit die mir noch einfällt zwischen den Elementen zu unterscheiden, wäre aktuell ein Formularfeld innerhalb des Absatzes, dessen Wert ich im Seitentemplate auslese. (zb. ein Textfeld, welches den Referenznamen beinhaltet)

Das Formularfeld kann ich zwar auf hidden setzen, damit die Redakteure keine Änderungen vornehmen, aber wirklich schön finde ich diese Variante eher nicht.

Hat eventuell noch Jemand einen besseren Einfall?
Oder eine Möglichkeit die Uid auszulesen, oder den Inhaltsbereich zu beschränken, die ich nicht gesehen habe?

Viele Grüße,
Annika

0 Kudos
1 Solution

Accepted Solutions
mbergmann
Crownpeak employee

Hallo Annika,

ich glaube da gibt es ein Missverständnis. Im Catalog selber sind die "enthaltenen" Objekte eben keine FirstSpirit-Objekte aus den jeweiligen Stores sondern eben schlicht einfache innere Card-Objekte, d.h. eine Art "Container" die nur im Catalog selbst "leben". Diese basieren ja lediglich auf Templates. Darum haben sie selbst auch einfach gar keine UID (=Referenznamen). Um an das Template (und darüber an dessen UID) zu kommen, auf dem der Inhalt basiert, musst Du einfach auf der Card .getTemplate() (oder in Beanshell-Kurzform auch .template) benutzen. Von dem bekommst Du dann über .getUid() (oder .uid) dessen Referenznamen.

Ich bin immer noch nicht ganz sicher, von was Du genau die UID brauchst - wirklich vom Template des inneren Elementes? Ich vermute aber mal ja, da Du was von templatespezifischem JS/CSS geschrieben hast. Von daher müsste das card.template.uid für DIch passen (card natürlich durch den Variablennamen "Deines" Card-Objektes ersetzen).

Die Methode getId() hat mit einer UID (=Referenzname) überhaupt nichts zu tun sondern liefert eine UUID - einen "Universally Unique Identifier". Das ist letztlich nur eine zufällige Zeichenkette, die aber so erzeugt wird, dass die Wahrscheinlichkeit dass irgendwo auf der Welt irgendwer in irgendeinem FS-Projekt dieselbe UUID erzeugt praktisch null ist. Man kann diese UUID benutzen, wenn man aus diversen Gründen im Ausgabekanal einfach eine "stabile" eindeutige Zeichenkette für jedes Card-Objekt braucht, um verschiedene Cards voneinander zu unterscheiden. Das ist meist der Fall im Zusammenhang mit irgendwelchen JS-Funktionen oder auch zum gezielten Neuladen eines solchen inneren Elementes nach einer Änderung im ContentCreator. Für Deinen Anwendungsfall bringt es aber nichts.

Mit der Doku ist es so, dass die Online-Version immer die aktuellste ist - allerdings momentan noch aus technischen Gründen ohne Suchfunktion. Vorteil: Sie ist immer aktuell. Nachteil: Keine Suche und außerdem könnten da natürlich Dinge drin stehen, die es in Eurer Version (noch) gar nicht gibt wenn die älter ist. Inhaltlich sind die Dokus (wenn man dieselbe FS-Version hat) identisch.

Ich hoffe ich konnte etwas zum Verständnis beitragen 🙂

Viele Grüße

Michael

View solution in original post

0 Kudos
4 Replies
mbergmann
Crownpeak employee

Hallo Annika,

mir ist noch nicht ganz klar, von was genau Du die UID brauchst. Die vom Absatz-Template auf dem das Element im FS_Catalog basiert?

Daran kommst du über card.template.uid, siehe hier: Online Dokumentation FirstSpirit - Datentyp Card

Falls das nicht das ist was Du meinst, wäre ein bisschem Code hilfreich, also beteiligte Templates inkl. Formular- und Ausgabekanal - zumindest die relevanten Teile.

Viele Grüße

Michael

0 Kudos

Hallo Michael,

genau! Ich möchte den Referenznamen des Elements, welches im Catalog gepflegt wurde.

Unsere Lokale Dokumentation habe ich erfolglos nach der Methode durchsucht.
Da scheint es einen Schiefstand zu geben. Sind wir dazu angehalten eher die Online-Dokumentation zu verwenden? Ist die Lokale nicht zuverlässig? ODerbringe ich gerade etwas durcheinander?

Ich verwende die Suchfunktion recht gern, die online nicht zur Verfügung steht, daher nutze ich meistens die Lokale Doku um Informationen nachzuschlagen.

Trotz allem gibt "getId" nur eine Kombination aus Zahlen und Buchstaben zurück, oder? Wenn ich das im Template abfrage wird es furchtbar im Fehlerfall nachzuvollziehen zu welchem Template diese ID gehört.

FS_Doku.png

Was ist aus der Methode "getUid" geworden, die einem den Templatenamen zurück gibt? Warum hat man sich dazu entschieden so eine Methode nicht mehr anzubieten?

FS_Doku_getUid.png

Vielen Dank und viele Grüße,
Annika

0 Kudos
mbergmann
Crownpeak employee

Hallo Annika,

ich glaube da gibt es ein Missverständnis. Im Catalog selber sind die "enthaltenen" Objekte eben keine FirstSpirit-Objekte aus den jeweiligen Stores sondern eben schlicht einfache innere Card-Objekte, d.h. eine Art "Container" die nur im Catalog selbst "leben". Diese basieren ja lediglich auf Templates. Darum haben sie selbst auch einfach gar keine UID (=Referenznamen). Um an das Template (und darüber an dessen UID) zu kommen, auf dem der Inhalt basiert, musst Du einfach auf der Card .getTemplate() (oder in Beanshell-Kurzform auch .template) benutzen. Von dem bekommst Du dann über .getUid() (oder .uid) dessen Referenznamen.

Ich bin immer noch nicht ganz sicher, von was Du genau die UID brauchst - wirklich vom Template des inneren Elementes? Ich vermute aber mal ja, da Du was von templatespezifischem JS/CSS geschrieben hast. Von daher müsste das card.template.uid für DIch passen (card natürlich durch den Variablennamen "Deines" Card-Objektes ersetzen).

Die Methode getId() hat mit einer UID (=Referenzname) überhaupt nichts zu tun sondern liefert eine UUID - einen "Universally Unique Identifier". Das ist letztlich nur eine zufällige Zeichenkette, die aber so erzeugt wird, dass die Wahrscheinlichkeit dass irgendwo auf der Welt irgendwer in irgendeinem FS-Projekt dieselbe UUID erzeugt praktisch null ist. Man kann diese UUID benutzen, wenn man aus diversen Gründen im Ausgabekanal einfach eine "stabile" eindeutige Zeichenkette für jedes Card-Objekt braucht, um verschiedene Cards voneinander zu unterscheiden. Das ist meist der Fall im Zusammenhang mit irgendwelchen JS-Funktionen oder auch zum gezielten Neuladen eines solchen inneren Elementes nach einer Änderung im ContentCreator. Für Deinen Anwendungsfall bringt es aber nichts.

Mit der Doku ist es so, dass die Online-Version immer die aktuellste ist - allerdings momentan noch aus technischen Gründen ohne Suchfunktion. Vorteil: Sie ist immer aktuell. Nachteil: Keine Suche und außerdem könnten da natürlich Dinge drin stehen, die es in Eurer Version (noch) gar nicht gibt wenn die älter ist. Inhaltlich sind die Dokus (wenn man dieselbe FS-Version hat) identisch.

Ich hoffe ich konnte etwas zum Verständnis beitragen 🙂

Viele Grüße

Michael

0 Kudos

Okay, super! Vielen Dank! : D

Ich glaube mir ist jetzt wirklich einiges klarer und den Referenznamen kann ich jetzt auch auslesen!

0 Kudos