Mchrobok
Occasional Observer

Error resolving reference - reference to pagestore not allowed in generation

Jump to solution

Ich versuche die Referenz einer Seite mit dem Template "Jobbörse" im aktuellen Ordner zu finden.

$CMS_FOR(Bruderelement,#global.page.parent.parent.getChildren())$

$CMS_IF(!Bruderelement.isFolder())$

$CMS_IF(Bruderelement.getTemplate().getName().equals("Jobbörse"))$

   //$CMS_VALUE(Bruderelement.getDisplayName(#global.language))$

  var RefJobboerse ='$CMS_REF(Bruderelement, templateSet:"JSON")$' 

$CMS_END_IF$

$CMS_END_IF$

$CMS_END_FOR$

In der Vorschau klappt das auch ohne Probleme. Smiley Happy

Beim Generieren bekomme ich jedoch folgenden Fehler::smileyconfused:

Error resolving reference - reference to pagestore not allowed in generation ($CMS_REF(Bruderelement, templateSet:"JSON")$

Hat jemand eine Idee wie ich das anders lösen kann?

1 Solution

Accepted Solutions
felix_reinhold
Returning Responder

Hallo Michael,

du arbeitest da gerade auf dem Pagestore - also im Inhaltebereich (grün). Solche Seiten haben aber keine Links, sondern nur Seitenreferezen aus dem Sitestore (blau).

Klingt für mich im ersten Moment auch konzeptionell eher fragwürdig Siblings im pagestore anzuschauen, da die Ordner im pagestore nichts mit der späteren Struktur zu tun haben. Solltet ihr eigtl. den sitestore meinen, dann müsstest du #global.page nur durch #global.node ersetzen und bei der Templateabfrage Bruderelement.page.template nehmen. Sollte tatsächlich der pagestore korrekt sein, dann müsstest du noch die eingehenden Referenzen der Seite durchsuchen. Dabei müsst ihr bedenken, dass eine Page mehrere Seitenreferenzen haben kann. Im Beispiel nehme ich mal nur die erste. Dazu noch eine Sache: Die Identifikation des Templates sollte über die UID laufen und nicht über einen Anzeigenamen:

$CMS_FOR(for_sibling, #global.page.parent.parent.getChildren(class("de.espirit.firstspirit.access.store.pagestore.Page"), true).filter(x -> x.template.uid == "joboffers"))$

     $CMS_FOR(ref, for_sibling.getIncomingReferences())$

          $CMS_IF(ref.isType(2))$

               var refJobboerse = "$CMS_REF(ref.getReferencedElement(), templateSet: "JSON")$";

               $CMS_SET(void, #for.BREAK)$

          $CMS_END_IF$

     $CMS_END_FO$

$CMS_END_FOR$

Die äußere Schleife sollte man dann vermutlich auch unterbrechen, weil du ja sonst die Variable mehrfach geprintet bekommst, wenn es mehrere Brüderelemente mit diesem Template gibt Smiley Wink

Gruß

Felix

View solution in original post

3 Replies
felix_reinhold
Returning Responder

Hallo Michael,

du arbeitest da gerade auf dem Pagestore - also im Inhaltebereich (grün). Solche Seiten haben aber keine Links, sondern nur Seitenreferezen aus dem Sitestore (blau).

Klingt für mich im ersten Moment auch konzeptionell eher fragwürdig Siblings im pagestore anzuschauen, da die Ordner im pagestore nichts mit der späteren Struktur zu tun haben. Solltet ihr eigtl. den sitestore meinen, dann müsstest du #global.page nur durch #global.node ersetzen und bei der Templateabfrage Bruderelement.page.template nehmen. Sollte tatsächlich der pagestore korrekt sein, dann müsstest du noch die eingehenden Referenzen der Seite durchsuchen. Dabei müsst ihr bedenken, dass eine Page mehrere Seitenreferenzen haben kann. Im Beispiel nehme ich mal nur die erste. Dazu noch eine Sache: Die Identifikation des Templates sollte über die UID laufen und nicht über einen Anzeigenamen:

$CMS_FOR(for_sibling, #global.page.parent.parent.getChildren(class("de.espirit.firstspirit.access.store.pagestore.Page"), true).filter(x -> x.template.uid == "joboffers"))$

     $CMS_FOR(ref, for_sibling.getIncomingReferences())$

          $CMS_IF(ref.isType(2))$

               var refJobboerse = "$CMS_REF(ref.getReferencedElement(), templateSet: "JSON")$";

               $CMS_SET(void, #for.BREAK)$

          $CMS_END_IF$

     $CMS_END_FO$

$CMS_END_FOR$

Die äußere Schleife sollte man dann vermutlich auch unterbrechen, weil du ja sonst die Variable mehrfach geprintet bekommst, wenn es mehrere Brüderelemente mit diesem Template gibt Smiley Wink

Gruß

Felix

Hallo Felix,

#global.node hatte ich zuerst versucht. Das Bruderelement.page hatte mir gefehlt. Danke für den Tipp.

Natürlich habe ich auch deinen Tipp mit der UID beherzigt und den BREAK eingebaut.Smiley Wink

$CMS_FOR(Bruderelement,#global.node.parent.getChildren())$

        $CMS_IF(!Bruderelement.isFolder())$                

            $CMS_IF(Bruderelement.page.template.uid.equals("jobs"))$

             var RefJobboerse ='$CMS_REF(Bruderelement, templateSet:"JSON")$'

             $CMS_SET(void, #for.BREAK)$  

        $CMS_END_IF$

    $CMS_END_IF$

$CMS_END_FOR$

Den Filter kann man sicher auch mal gebrauchen.

isType(2) sieht Interessant aus? Wo finde ich den eine Übersicht welcher int Wert welcher Typ ist?

Beste Grüße

Michael

0 Kudos

Hallo Michael,

die zugehörigen Nummern der Referenztypen findest du hier:

Constant Field Values (FirstSpirit Access-API)

Und bitte bitte mach aus Bruderelement einen englischen Namen in lower/camel case :smileygrin:

Viele Grüße

Felix