Questions & Answers

SOLVED
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

Type a product name