Questions & Answers

SOLVED
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

Type a product name