patric_dosch
I'm new here

Inhalt einer referenzierte Seite auslesen

Jump to solution

Bin hier über folgenden Artikel Meta-Daten einer in der Struktur referenzierten Seite auslesen gestolpert und habe ein ähnliches Problem. Allerdings möchte ich direkt auf den Inhalt einer referenzierten Seite zugreifen.

Über $CMS_VALUE(ref(ss_overview).page.body("content"))$ bekomme ich den bereits gerenderten Content des Bereiches. Ich muss aber auf die dort gepflegen Inhalte zugreifen.

Mein Ergebnis soll etwas sein wie:

$CMS_FOR(entry,ref(ss_overview).page.[...].cs_entries)$

     $CMS_VALUE(entry.title)$

$CMS_END_FOR$

Vielleicht hat jemand schon ein ähnliches Problem gelöst und weiß Rat ... freue mich auf Antworten.

Grüße, Patric

1 Solution

Accepted Solutions

Hallo Patric,

ok, hierbei gilt es zu beachten, dass Absätze keine Referenznamen haben, die global verwendet werden. Absatznamen sind nur innerhalb einer Seite eindeutig. Das macht es etwas schwieriger einen Absatz auszuwählen.

Wenn man den Body der Seite hat kann man über alle Children (also Absätze) iterieren und prüfen ob deren Name dem gewünschten Namen entspricht.

$CMS_FOR(section, ref(ss_overview).page.body("content").getChildren())$

          $CMS_IF(section.getName().equals("list_of_features"))$

                    $CMS_SET(set_entryList, section.getFormData().get(#global.project.masterLanguage, "cs_entries").get())$

          $CMS_END_IF$

$CMS_END_FOR$

Anschliessend kannst du wieder über set_entryList iterieren. (das get() habe ich jetzt schon in das CMS_SET geschrieben)

Viele Grüße

Rouven

View solution in original post

17 Replies
broszeit
I'm new here

Hallo Patric,

könntest Du noch nähere Informationen zu dem konkreten Anwendungsfall geben? Wofür werden nicht gerenderten Inhalte benötigt?

Ist cs_entries eine FS_LIST die Datenquellen enthält? Dann wäre es eventuell einfacher direkt eine contentSelect Abfrage zu machen.

Vielen Dank

Gruß, Rouven

0 Kudos

Hallo Rouven,

vielen Dank für deine Antwort Smiley Happy Vielleicht Hilft zum Verständnis mein anders Thema weiter.

Die cs_entries sind eine CMS_INPUT_CONTENTLIST, die Einträge in der Übersichtsseite werden redaktionell ausgewählt (DB-Schema). Das contentSelect ist in meinem Fall vermutlich nicht zu verwenden, da es für "redaktionell ausgewähl" keine Abfrage angegeben werden kann.

So wie ich deinen Beitrag lese, scheint es nicht (einfach) möglich zu sein, auf die Inhalte einer referenzierten Seite zuzugreifen, oder?

Wäre eine zusätzliche Kategorie in meinem DB-Schema eine Möglichkeit? Dann wären die Einträge auf der Übersichtsseite nicht redaktionell gepflegt, sondern die Reihenfolge bestimmt durch Datum oder Titel. Dann wäre vermutlich die contentSelect eine Möglichkeit, über die Kategorie an meine Daten zu kommen.

Grüße, Patric

0 Kudos

Hallo Patric,

doch doch, es ist schon möglich auf die Inhalte einer referenzierten Seite zuzugreifen.

Dein Ansatz war da schon nicht so verkehrt. Man kann sich vom Body den Store holen und dann die Absätze über getStoreElement().

Für dein Beispiel von oben sähe der Code dann ungefähr so aus: (<ID> durch die ID des Absatzes ersetzen in welchem sich die CMS_INPUT_CONTENTLIST befindet)

$CMS_SET(set_formData, ref(ss_overview).page.body("content").getStore().getStoreElement(<ID>).getFormData())$

$CMS_SET(set_entryList, set_formData.get(#global.project.masterLanguage, "cs_entries"))$

Dann hast du eine Liste mit allen Entries und kannst darüber iterieren:

$CMS_FOR(entry, set_entryList.get())$

     $CMS_VALUE(entry.title)$

$CMS_END_FOR$

Viele Grüße

Rouven

Hallo Rouven,

das ist fast perfekt Smiley Wink

Das set_entryList ist ein FormField... also muss set_entryList.get aufgerufen werden.

$CMS_FOR(entry, set_entryList.get)$

     $CMS_VALUE(entry.title)$

$CMS_END_FOR$

Aber ich möchte natürlich nicht über die ID das StoreElement suchen.

$CMS_SET(set_formData, ref(ss_overview).page.body("content").getStore().getStoreElement(5168).getFormData())$

sondern über

$CMS_SET(set_formData, ref(ss_overview).page.body("content").getStore().getStoreElement("list_of_features", <uidType>).getFormData())$

wobei "list_of_features" der  Referenznamen (UID) des Absatzes ist. Jedoch finde ich keinen passenden uidType.

Das wäre das letzte Teil meines Puzzles.

Viele Grüße, Patric

Hallo Patric,

ok, hierbei gilt es zu beachten, dass Absätze keine Referenznamen haben, die global verwendet werden. Absatznamen sind nur innerhalb einer Seite eindeutig. Das macht es etwas schwieriger einen Absatz auszuwählen.

Wenn man den Body der Seite hat kann man über alle Children (also Absätze) iterieren und prüfen ob deren Name dem gewünschten Namen entspricht.

$CMS_FOR(section, ref(ss_overview).page.body("content").getChildren())$

          $CMS_IF(section.getName().equals("list_of_features"))$

                    $CMS_SET(set_entryList, section.getFormData().get(#global.project.masterLanguage, "cs_entries").get())$

          $CMS_END_IF$

$CMS_END_FOR$

Anschliessend kannst du wieder über set_entryList iterieren. (das get() habe ich jetzt schon in das CMS_SET geschrieben)

Viele Grüße

Rouven

hmmm ok, bei getChildren und der Überprüfung nach Namen war ich auch schon, allerdings bin ich bei meinen Versuchen nicht über die getFormData-Methode gegangen, wieso weiß ich nicht mehr. Da war ich schon ganz schön nah dran. Aber dein Beispiel paßt. Perfekt.

Und ich nehme an ich kann #global.project.masterLanguage durch #global.language ersetzen, damit es auch mit den anderen Sprachen funktioniert?

Grüße, Patric

ps. Wieso der Referenznamen nicht bei getStoreElement zu verwenden ist, verstehe ich aber nicht :smileyconfused:

0 Kudos

ps. Wieso der Referenznamen nicht bei getStoreElement zu verwenden ist, verstehe ich aber nicht :smileyconfused:

Der Store ist in diesem Fall der Pagestore, also die gesamte Inhalte-Verwaltung. Um es zu ermöglichen, dass mehrere Seiten einen Absatz mit dem Namen "Infos" haben, sind die Absatznamen keine eindeutigen Referenznamen. Das ist in großen Projekten fast unumgänglich, sonst würden irgendwann die Namen ausgehen bzw. man hätte einen Absatz "Infos_347".

Da der Store die oberste Ebene ist, kann man nicht einfach getStoreElement() mit einem Namen aufrufen um einen Absatz zu bekommen, denn der Name ist nicht eindeutig.

Ich hoffe das ist so weit verständlich.

Viele Grüße

Rouven

Danke für die Erklärung! Ich muss mich wohl erst an die Art und Weise gewöhnen. Aber ich denke die Problematik verstanden zu haben.

Grüße, Patric

0 Kudos

Ich arbeite mit der API auf Java-Ebene und bin auf die gleiche Problematik gestoßen. Ich verstehe auch deine Begründung (keine Eindeutigkeit der Sections).

Allerdings gibt es ja die Methode "getChildByName(Class<T> childInstance, String name)" bei der man auch eine Section über den Referenznamen bekommt (die Methode ist aber deprecated und verweist auf die Methode "getStoreElement(...)" die aber im Grunde genommen gar nicht die gleiche Funktionalität zur Verfügung stellt. Das macht für mich an der Stelle keinen Sinn.

Zudem könnte man ja ermöglichen, dass man (da keine Eindeutigkeit bei Sections über den Referenznamen herrscht) mehrere Elemente zurückgeben, die alle diesen Namen haben und man selbst kann dann z.B. über den Kontext rausfinden, ob das die Section ist die man haben wollte.

Finds irgendwie etwas unschön, dass man selbst darüber iterieren muss und jeden Namen vergleichen soll. Oder gibt es da evtl. noch eine andere Alternative ?

Grüße

Jan

0 Kudos