Aller au contenu principal

Datenquelle / FS_CATALOG mit Absatztemplates

Commentaires

13 commentaires

  • Zendesk API User
    Author: hoebbel - 3/3/2021 8:03

    Hallo Dietmar,

    um die Eingabekomponenten der jeweiligen Card zu bekommen, benötigst Du die Schreibweise

    $CMS_IF(!ct_contentlist.empty)$

         $CMS_FOR(content,ct_contentlist)$

              $CMS_VALUE(content.item.<Bezeichner>)$

         $CMS_END_FOR$

    $CMS_END_IF$

    Um die Catalog Eingabekomponente über die Vorlagen der einzelnen, inneren Absatztemplates auszugeben, reicht ein

    $CMS_VALUE(ct_contentlist)$

    Wenn ich es richtig verstanden habe, suchst Du letzteres.

    Doku dazu: Online Dokumentation FirstSpirit - Datentyp Card

    Anmerkung: Es gibt inzwischen auch die inline JSON Funktion. Diese erzeugt JSON für eine Seite, einen Absatz oder eine einzelne Eingabekomponente.

    Damit würde es so aussehen (wenn nur die CATALOG Eingabekomponente ausgegeben werden soll:

    $CMS_VALUE(json(ct_contentlist))$

    und in den einzelnen Absätzen:

    $CMS_VALUE(json(#this))$

    Dokumentationseinstieg dazu:

    Online Dokumentation FirstSpirit - Json Funktion

    bzw.

    Online Dokumentation FirstSpirit - Ein Ausdruck für Alles

    Hinweis: Die JSON Funktion steht seit der FirstSpirit Version 2019-12 zur Verfügung und wird regelmäßig erweitert. Für die Nutzung sollte also eine möglichst aktuelle FirstSpirit Version verwendet werden.

    Viele Grüße aus Dortmund

    Holger

    0
  • Zendesk API User
    Author: dspieser - 3/3/2021 9:50

    Hallo Holger,

    danke für deinen Beitrag.

    Das habe ich bereits verstanden, es löst aber nicht mein Problem.

    Wenn ich ein $CMS_VALUE(#row.ContentList)$ mache bekomme ich das erwartete Verhalten.
    Es komm das raus was in der Absatzvorlage definiert wurde bzw. steht.

    {"content":"Bühne Test","template":"Content.contentpage","templatename":"ContentPage","type":"type"}

    Wenn ich aber den Inhalt in ein SET  $CMS_SET(void,setJsonArticleObj.put("content",#row.ContentList))$ schreibe

    liefert mir die Preview Ausgabe : $CMS_VALUE(setJsonArticleObj.toJSON)$

    "content": ["de.espirit.firstspirit.generate.IdentifiableCatalogCard@8f7cab"],

    Vielleicht ist es jetzt deutlicher.

    Ich kann die Unterschiedliche Ausgabe nicht ganz verstehen.
    Es muss mit dem SET zusammen hängen.

    Grüße

    Dietmar

    0
  • Zendesk API User
    Author: hoebbel - 3/3/2021 9:58

    Hallo Dietmar,

    funktioniert $CMS_SET(setJsonArticleObj["content"],eval(#row.ContentList))$ ?

    Erklärung: $CMS_SET(setJsonArticleObj["content"], ist dasselbe wie $CMS_SET(void,setJsonArticleObj.put("content", - nur das kein temporäres Objekt erzeugt wird.

    eval(#row.ContentList) löst das Objekt auf (wie $CMS_VALUE()$), anstatt es direkt zu übergeben.

    Viel Grüße

    Holger

    0
  • Zendesk API User
    Author: dspieser - 3/3/2021 10:38

    Hallo Holger,

    leider nein.

    Ausgabe jetzt:

    "content": "[de.espirit.firstspirit.generate.IdentifiableCatalogCard@72a27c55, de.espirit.firstspirit.generate.IdentifiableCatalogCard@590678a1, de.espirit.firstspirit.generate.IdentifiableCatalogCard@124cdb23, de.espirit.firstspirit.generate.IdentifiableCatalogCard@530b7042, de.espirit.firstspirit.generate.IdentifiableCatalogCard@32aaeea2]",

    Grüße

    Dietmar

    0
  • Zendesk API User
    Author: hoebbel - 3/3/2021 11:54

    Hallo Dietmar,

    ich hab es jetzt mal selber versucht und dabei verstanden, wo das Problem liegt :smileysad:

    Funktioniert das hier bei Dir:

    Absatz (oder auch so lassen, wie Du den bereits hast):

    $CMS_SET(setSectionObj, {:})$ $--setzt direkt eine leere Map --$

    $CMS_SET(setSectionObj["content"], "Text Bild")$ $--spart das temporäre "void" Objekt --$

      

    Datensatz Template:

    $CMS_IF(!ct_contentlist.empty)$

         $CMS_FOR(content,st_bestandsliste)$

              $CMS_SET(set_Content)$$CMS_VALUE(content.item)$$CMS_END_SET$

              $CMS_SET(void,setContentList.add(set_Content.toString()))$

         $CMS_END_FOR$

    $CMS_END_IF$

    Der "Trick" ist, das CMS_SET als Templatefragment zu setzen (also mit $CMS_END_SET$) und dann mit toString() dessen Inhalt zu übergeben.

    Viele Grüße

    Holger

    0
  • Zendesk API User
    Author: dspieser - 3/4/2021 6:41

    Guten Morgen Holger,

    hatte mich schon gefreut, da das JSON Valide war.

    Allerdings wird das gesamte JSON-Object des Absatzes als String ausgegeben.

    "content": ["{\"basicLayout\":{\"highlighted\":\"normal\",\"marginBottom\":\"mb-3\"},\"content\":{\"sectionText\":\"<p>Diese Europameisterschaft der Berufe soll die besondere Rolle des Handwerks als Stütze der EU-Wirtschaftskraft betonen und das Ansehen des Handwerks stärken. Im Mittelpunkt stehen junge Handwerker und ihre Leistungen. Denn ein ganz konretes Ziel ist es, mehr junge Menschen für einen der etwa 130 Handwerksberufe zu begeistern. Würth ist Mitglied der WorldSkills Germany und unterstützt als Sponsor auch die EuroSkills, die Ende September in Budapest zum sechsten Mal ausgetragen wurden.<\\/p>\"},\"sectionLayout\":{\"basicLayout\":\"01\",\"imageSide\":\"image_left\",\"slideText\":\"false\",\"textWidthRestrict\":\"false\",\"wrapText\":\"true\"},\"template\":\"section00\",\"templatename\":\"01. Text-Bild\"}",

    Wenn du dafür auch noch ne Antwort hättest?

    Danke nochmal

    Gruß

    Dietmar

    0
  • Zendesk API User
    Author: hoebbel - 3/4/2021 8:06

    Guten Morgen Dietmar,

    um herauszufinden, wo die Problemstelle ist, ändere doch mal die innere Vorlage so ab, dass dort manuell JSON ausgegeben wird, also zum Beispiel in

    {"test":"Dies ist einfaches JSON","number":7}

    $--

    bisherige Code der Vorlage - das Klappt aber nur, wenn dort nicht schon FirstSpirit Kommentare (oder genauer die Zeichenkombination --$) vorhanden sind

    --$

    Wenn Du dann weiterhin innerhalb der content-Liste Strings bekommst, liegt das Problem in der äußeren Vorlage. Wenn der Inhalt der content-Liste dann aber korrektes JSON ist, liegt das Problem in der inneren Vorlage.

    Anhand der Ausgabe, die Du gepostet hast, gehe ich aber davon aus, dass hier auf den String (der nach meinem Verständnis valides JSON enthält) nochmals irgendwo toJson() angewandt wird. (es müsste also in der äußeren Vorlage passieren)

    Es könnte "$CMS_VALUE(setJsonArticleObj.toJSON)$" sein - brauchst Du das wirklich? Funktioniert hier evtl. auch $CMS_VALUE(setJsonArticleObj)$?

    Viele Grüße

    Holger

    0
  • Zendesk API User
    Author: dspieser - 3/4/2021 8:18

    Hallo Holger,

    mit innere Vorlage ist der Absatz richtig? (Also welcher in der Card steht)

    Dort habe ich jetzt dein Beispiel in der Ausgabe eingetragen.

    Ausgabe:

    content": ["{\"test\":\"Dies ist einfaches JSON\",\"number\":7}"],

    Das "toJSON" brauche ich damit der Datensatz überhaupt JSON wird.

    Ohne toJSON:

    {article_description=Junge Talente fördern und gut ausgebildete Fachkräfte an Unternehmen vermitteln – diese Ziele verfolgt der Verein WorldSkills Germany e.V. Durch Partner wie Würth verfügt der Verein über ein großes Netzwerk, in dem Ausbilder und Talente zueinander finden. Vor allem im Bereich Handwerk fördert WorldSkills Germany den Nachwuchs und organisiert alle zwei Jahre im Verbund mit Vereinen anderer europäischer Länder den Wettbewerb EuroSkills., article_id=57216, article_link=/fs5preview/preview/3794790/site/DE/current/4548805/4019247/contentId=57216, article_shortdescription=Junge Talente fördern und gut ausgebildete Fachkräfte an Unternehmen vermitteln – diese Ziele verfolgt der Verein WorldSkills Germany e.V. Durch Partner wie Würth verfügt der Verein über ein großes Netzwerk, in dem Ausbilder und Talente zueinander finden. Vor allem im Bereich Handwerk fördert WorldSkills Germany den Nachwuchs und organisiert alle zwei Jahre im Verbund mit Vereinen anderer europäischer Länder den Wettbewerb EuroSkills., article_title=EuroSkills 2018: Würth fördert größten Talent-Wettbewerb des Handwerks, article_titletag=EuroSkills 2018: Würth fördert größten Talent-Wettbewerb des Handwerks, content=[{"test":"Dies ist einfaches JSON","number":7}], mainObject={cta={}, image=/fs5preview/preview/3794790/media/DE/current/4230632/res_wl2_frontpage_1200/wuerth_euroskills2018_061_klein_1.jpg, teaser={alttag=Magazin Teaser wuerth_euroskills2018_063_quadrat, image=/fs5preview/preview/3794790/media/DE/current/4230643/res_wl2_frontpage_1200/wuerth_euroskills2018_063_quadrat.jpg, titletag=Magazin Teaser wuerth_euroskills2018_063_quadrat}, text=<h2 class="heading-alt text-primary">Die EM der Handwerksberufe</h2>

    <p>Junge Menschen für das Handwerk begeistern und die Bedeutung des Handwerks für die Wirtschaft unterstreichen - das ist das erklärte Ziel dieses Wettbewerbs. Im Beitrag erfahren Sie mehr über die Hintergründe und wie das deutsche Team abgeschnitten hat. </p>}, prodCat=null}

    Gruß

    Dietmar

    0
  • Zendesk API User
    Author: hoebbel - 3/4/2021 15:23

    Hallo Dietmar,

    Das Problem hier ist, dass aus dem Absatz nun gültiges JSON zurückkommt, der Rest aber in einem anderen Format vorliegt.

    Wie sehen denn Listen in dem Format an anderen Stellen aus?

    Ich sehe hier zwei Lösungsansätze - entweder den Inhalt der inneren Absätze nicht als JSON, sondern so zurück liefern, dass das Format anschließend in JSON umgewandelt wird. Also eine Liste in diesem {"key"="value",...} Format.

    Oder bei der Umwandlung des Datensatzes in JSON die inneren Absätze weglassen und diese anschließend dem fertigen JSON hinzufügen.

    JSON müsste ja ein einfacher String sein, also beispielsweise so:

    $CMS_SET(myjson,"{\"test\":\"Dies ist JSON\",\"number\":7}")$$-- das erzeugt nur irgendeinen String, der gültiges JSON--$

    $CMS_VALUE(myjson.substring(0,myjson.length-1)+",\"content\":"+setContentList+"}")$ $-- das schneidet das letzte Zeichen des JSON ab (sollte immer ein "}" sein) und fügt den Inhalt der inneren Absätze hinzu und schließt das JSOn wieder mit einem "}"--$

    $-- Wenn das letzte Zeichen auch ein "]" sein kann, dann anstelle des schließenden "}" einfach myjson.substring(myjson.length-1) verwenden --$

    Da ich aber nicht genau weiß, was hier wie wann gemacht wird, fällt es mir sehr schwer, eine sinnvolle Lösung zurückzuschreiben.

    Wenn das auf die einfache Art, das JSON um die inneren Absätze zu erweitern, nicht klappt, kannst Du mal an einem möglichst kurzen Beispiel zeigen, was Ihr genau macht?

    z.B wie {test=Dies soll json werden,number=7} in JSON umgewandelt wird?

    Und wie eine Liste in diesem Format aussehen soll?

    Ich hoffe, dass ich dann  morgen Zeit finde, eine passende Lösung zu suchen.

    Viele Grüße

    Holger

    0
  • Zendesk API User
    Author: dspieser - 3/4/2021 15:52

    Hallo Holger,

    Danke für deine Zeit.

    Ich habe es jetzt komplett umgebaut.

    Die Verweisvorlagen und die Absatzvorlagen ohne FS_CATALOG habe ich mit $CMS_SET(set_LIST,{:}) umgesetzt und alle anderen in etwa so:

    {

    "article_id": "$CMS_VALUE(#row.fs_id)$",

    "article_link": "$CMS_VALUE(setLinktoArticle.toString().trim())$",

    "mainObject": $CMS_VALUE(setMainObj.toJSON)$,

    $CMS_IF(!ct_startdate.empty)$

          "startdate": "$CMS_VALUE(ct_startdate)$",

    $CMS_END_IF$

    $CMS_IF(!ct_enddate.empty)$

          "enddate": "$CMS_VALUE(ct_enddate)$",

    $CMS_END_IF$

    "article_title": "$CMS_VALUE(#row.ContentTitle.toString().replaceAll("®","<sup>®</sup>"))$",

    "article_titletag": "$CMS_VALUE(#row.ContentTitle.toString().trim)$",

    "article_shortdescription": $CMS_VALUE(setShortDescription.toJSON)$,

    "article_description": $CMS_VALUE(setDescription.toJSON)$,

    "content": $CMS_VALUE(setContentList)$

    }

    im content kommen dann die Absätze raus.

    Bsp.:

    "content": [{"template": "section00","templatename": "01. Text-Bild","basicLayout": {"highlighted": "normal","marginBottom": "mb-3"},"sectionLayout": {"basicLayout": "01","imageSide": "image_left","slideText": "false","textWidthRestrict": "false","wrapText": "true"},"content": {"teaserText": "","sectionText": "<p>Diese Europameisterschaft der Berufe soll die besondere Rolle des Handwerks als Stütze der EU-Wirtschaftskraft betonen und das Ansehen des Handwerks stärken. Im Mittelpunkt stehen junge Handwerker und ihre Leistungen. Denn ein ganz konretes Ziel ist es, mehr junge Menschen für einen der etwa 130 Handwerksberufe zu begeistern. Würth ist Mitglied der WorldSkills Germany und unterstützt als Sponsor auch die EuroSkills, die Ende September in Budapest zum sechsten Mal ausgetragen wurden.</p>","mediaList": []}}, ...

    Das scheint so zu funktionieren und ich kann erstmal weiter machen.

    Schönen Abend.

    Gruß

    Dietmar

    0
  • Zendesk API User
    Author: hoebbel - 3/4/2021 18:24

    Hallo Dietmar,

    Dank für die positive Rückmeldung. Ich bin froh, dass Du das Problem lösen konntest :smileyhappy:

    Bezüglich JSON fällt mir noch der Hinweis ein, dass es einen JSON Präsentationskanal gibt, der (in der Vorschau) prüft, ob der Inhalt des Kanals gültiges JSON ist und wenn nicht, die entsprechenden Stellen markiert. Falls Du das noch nicht wusstest [und deine FirstSpirit Version nicht sehr alt ist], hilft das evtl. auch.

    Präsentationskanäle kann man über den ServerManager->Projekt->Eigenschaften->Vorlagensätze-><Vorlagensatz für JSON>->und dort in der Dropdown Box Präsentationskanal auswählen. Wenn es dort einen Kanal JSON gibt, hat der die entsprechenden Eigenschaften.

    Bei älteren FirstSpirit Versionen muss dann noch die Option Template Inspection ausgeschaltet bleiben (führt zu invalidem JSON), in aktuellen Versionen wird die ignoriert.

    Auch Dir einen schönen Abend

    Holger

    0
  • Zendesk API User
    Author: dspieser - 3/5/2021 6:18

    Guten Morgen Holger,

    danke, die Auswahl JSON gibt es bei unserer Version wohl noch nicht.

    Das werde ich aber nach dem Update , das wir hoffentlich bald mal machen, dann testen.

    Grüße

    Dietmar

    0
  • Zendesk API User
    Author: hoebbel - 3/5/2021 7:13

    Guten Morgen Dietmar,

    den JSON Kanal gibt es ab der FirstSpirit Version 2019-08 und den Validator selber seit 2019-01.

    Wenn Ihr eine FirstSpirit Version dazwischen einsetzt, kannst Du den Validator so nutzen:

    ServerManager->Server/Eigenschaften->Präsentationskanäle->hinzufügen

    Im Dialog dann einen sinnvollen Namen und eine Standard Dateierweiterung vergeben (z.B. JSON-Channel & json) und unter Nachbearbeitung den JSON Validator auswählen.

    Für die Aktion werden Server-Admin Rechte benötigt.

    Viele Grüße,

    Holger

    0

Vous devez vous connecter pour laisser un commentaire.