Aller au contenu principal

Inhalt einer referenzierte Seite auslesen

Commentaires

13 commentaires

  • Zendesk API User
    Author: broszeit - 4/4/2012 9:51

    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
  • Zendesk API User
    Author: patric_dosch - 4/4/2012 10:05

    Hallo Rouven,

    vielen Dank für deine Antwort :smileyhappy: 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
  • Zendesk API User
    Author: broszeit - 4/4/2012 10:51

    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

    0
  • Zendesk API User
    Author: patric_dosch - 4/4/2012 13:15

    Hallo Rouven,

    das ist fast perfekt :smileywink:

    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

    0
  • Zendesk API User
    Author: broszeit - 4/4/2012 14:34

    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

    0
  • Zendesk API User
    Author: patric_dosch - 4/4/2012 14:45

    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
  • Zendesk API User
    Author: broszeit - 4/4/2012 14:59

    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

    0
  • Zendesk API User
    Author: patric_dosch - 4/4/2012 15:39

    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
  • Zendesk API User
    Author: jan_fruehwacht - 6/19/2012 7:30

    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
  • Zendesk API User
    Author: Prinzessin - 2/27/2014 9:42

    Hallo ich habe ein ähnliches Problem.

    Über die Navigation-Funktion lasse ich mir die Seiten, aus einem Ordner in der Struktur ausgeben.

    Die referenzierten Seiten enthalten Absätze. In den Absätzen sind Einträge aus Datenquellen über das FS_LIST-Element eingebunden.

    Nun möchte ich über die Seite, auf die Absätze (nur der allererste Absatz) auf diese zugeordneten Datenquellen-Einträge zugreifen und dort die hinterlegte Überschrift des Datensatzes auslesen.

    Die Seite sieht im Inhalt so aus und darunter habe ich noch den Ausschnitt aus dem Absatztemplate zur Einbindung der Datenquelle eingefügt:

    Meine Navigation-Funktion sieht momentan so aus:

        <CMS_FUNCTION name="Navigation" resultname="fr_result">

            <CMS_PARAM name="expansionVisibility" value="all"/>

            <CMS_PARAM name="wholePathSelected" value="1"/>

            <CMS_PARAM name="siteMap" value="1" />       

            <CMS_VALUE_PARAM name='root' value='folder'/>

            <CMS_ARRAY_PARAM name="pageRefRendering">

                <CMS_ARRAY_ELEMENT index="0..7"><![CDATA[

                $CMS_IF(page == #nav.ref.referenceName)$

                 $CMS_IF(#nav.ref.getPage().getTemplate.getUid() ==  "overview")$

                   $CMS_SET(pagelist, #nav.ref.getPage().getBodyByName("content").getChildren())$

                   $CMS_SET(my_pagelist, pagelist.toList())$

                        $CMS_IF(my_pagelist.size > 0)$                                             

                            $CMS_FOR(section_item, my_pagelist.get(0).getData())$

                                $CMS_IF(section_item.getName() == "st_viewportlist")$

                                    $CMS_VALUE(section_item.getFormData().get(#global.project.masterLanguage, "st_viewportlist").get())$

                                    $--CMS_VALUE(section_item.getData().get("st_viewportlist").toList())--$

                                $CMS_END_IF$

                            $CMS_END_FOR$                            

                        $CMS_END_IF$

                    $CMS_END_IF$

                $CMS_END_IF$

                ]]></CMS_ARRAY_ELEMENT>

            </CMS_ARRAY_PARAM>

        </CMS_FUNCTION>

    Bei den fett gedruckten Befehlen komme ichnun nicht weiter. Ich befinde mich schon auf dem ersten Absatz und möchte dort das Element st_viewportlist auslesen, damit ich die Datensätze im Zugriff habe.

    Auf dem Datensatz möchte ich dann das Feld cs_headline ausgeben.

    Kann hier jemand helfen?

    0
  • Zendesk API User
    Author: Prinzessin - 2/27/2014 13:29

    Ich habe gerade auch noch diese Variante ausprobiert:

    $CMS_SET(my_list, section_item.getData().get("st_viewportlist"))$

    $CMS_VALUE(my_list.get(0).cs_headline)$

    Leider auch ohne Erfolg.

    0
  • Zendesk API User
    Author: patric_dosch - 2/27/2014 13:56

    Hey, mein Thema ist leider schon so lange her, aber wenn ich mich richtig erinnere solltest du

    $CMS_SET(set_viewportlist,section_item.getFormData().get(#global.project.masterLanguage, "st_viewportlist").get())$

    Danach über die Liste.

    $CMS_FOR(entry, set_viewportlist)$

        $CMS_VALUE(entry.title)$

    $CMS_END_FOR$

    Ich hoffe ich kann dir helfen.

    Grüße, Patric

    0
  • Zendesk API User
    Author: Prinzessin - 2/27/2014 14:13

    Hallo, danke für die Antwort. Leider bekomme ich hier kein Ergebnis zurück :-(

    0

Vous devez vous connecter pour laisser un commentaire.