Questions & Answers

SOLVED
thomas_ritter
I'm new here

FS_INDEX Abfrage Value

Jump to solution

Hallo zusammen,

ich hab derzeit ein Problem mit der Abfrage eines FS_INDEX Eintrages innerhalb von Datenquellen. Ich mรถchte in einer Tabellevorlage eine FS_INDEX-Liste pflegen und den Value der Eintrรคge (ttName) in einer Seitevorlage ausgeben.

Mein Aufbau:

Tablle 1: rewriteurls

--> Feld: ttHostList (FS_INDEX)   --> schema: hostlist (xml)

Tabelle 2: hosts

--> Feld: ttName (TEXT)

Seitenvorlage:

<CMS_HEADER>

    <CMS_FUNCTION name="contentSelect" resultname="frRewriteUrls">

      <CMS_PARAM  name="schema" value="osram" />

        <QUERY entityType="rewriteurls" limit="0"></QUERY>

    </CMS_FUNCTION>

</CMS_HEADER>$CMS_TRIM(level:1)$

<urlrewrite>

$CMS_IF(!frRewriteUrls.isEmpty)$

  $CMS_FOR(_item, frRewriteUrls)$

      $CMS_FOR(_itemHostList,_item.hostlist)$

      <rule>

       <from>^/web/$CMS_VALUE(_item.shorturl)$</from>

       <to type="redirect">http://$CMS_VALUE(_itemHostList.?????????)$$CMS_VALUE(_item.postfix)$/TemplateMaster/$CMS_REF(_item.targeturl)$</to>       

       <condition name="host" operator="equal">$CMS_VALUE(_itemHostList.?????????)$</condition>      

    </rule>

    $CMS_END_FOR$

  $CMS_END_FOR$

$CMS_END_IF$

</urlrewrite>

$CMS_END_TRIM$

Ich hole mir รผber einen ContentSelect alle Datensรคtze der Tabelle rewriteurls und interiere dann mit 2 FOR-Schleifen darรผber. Leider komme ich nicht auf "ttName" der Eintrรคge in der FS_INDEX.

Ich habe schon sรคmtliche Varianten mit

_item.hostlist.values

_itemHostList.formData

etc. probiert. Jedoch ohne Erfolg.

Hat jemand eine Idee?

LG Thomas

1 Solution

Accepted Solutions

Ok, Danke.

Dann werde ich es direkt in der Tabellenvorlage Umsetzen mรผssen und diese als Content einbinden in das Pagetemplate.

$CMS_TRIM(level:2)$

<urlrewrite>

  $CMS_FOR(_item, ttHostList)$     

      <rule>

       <from>^/web/$CMS_VALUE(ttShortURL)$</from>

       <to type="redirect">http://$CMS_VALUE(_item.ttName)$$CMS_VALUE(_item.postfix)$/TemplateMaster$CMS_REF(ttTargetUrl)$</to>       

       <condition name="host" operator="equal">$CMS_VALUE(_item.ttName)$</condition>  

    </rule>

  $CMS_END_FOR$

</urlrewrite>

$CMS_END_TRIM$

lg thomas

View solution in original post

16 Replies
marza
I'm new here

Hallo Thomas,

bei Deinem Problem hilft immer ein Blick ins ODFS. Ein FS_INDEX gibt im Iterator Objekte vom Typ Record wieder. Alternativ hรคngt man an die Laufvariable im Template-Code ein .class an, dann mรผsste man den Klassennamen sehen.

Wenn das Element eine Entity ist und eine eigene Tabellenvorlage hat (in dem die Entity ausgegeben wird), dann mรผsste eigentlich per $CMS_VALUE()$ dieses Template ausgegeben werden.

Falls das nicht funktioniert, ich sehe gerade, ein Objekt vom Typ Record hat eine ToJSON-Methode. Man kรถnnte sich also on-the-fly per CMS_SET ein neues Objekt erstellen lassen kรถnnen, auf dass man, wie unter dem CMS_SET-ODFS-Eintrag beschrieben, zugreifen kann.

GrรผรŸe Marian

0 Kudos
StefanSchulz
I'm new here

Hi Thomas,

fรผr die iterative Abarbeitung der Index-Inhalte steht eine gesonderte Funktionalitรคt zur Verfรผgung. Hierzu lรคuft die Schleife nicht รผber den Index direkt, sondern รผber dessen Eigenschaft values.

In deinem Fall wie folgt:

$CMS_FOR(item,_item.hostlist.values)$

Die Variable item enthรคlt dann in jedem Durchlauf direkt das Werteobjekt und der Zugriff mit item.ttName sollte reibungslos funktionieren.

Beste GrรผรŸe

Stefan

0 Kudos

Hallo zusammen,

zu Lรถsung Marian:

habe es so leider nicht lรถsen kรถnnen. Im JSON steht die Information die ich benรถtige nicht drin, sondern nur wenige Informationen zu jedem RECORD:


   "FS_GID":"c80cd0cc-e45c-4fd0-abd9-860564d19a1e",
   "shorturl":"test",
   "hostlist":"<CMS_VALUE name=\"ttHostList\" tag=\"FS_INDEX\"><LANG id=\"ยง\" set=\"1\"><INDEX><RECORD>{\"schema\":\"osram\",\"gid\":\"c10caf10-4531-4d97-bb99-761ef5487fdf\",\"table\":\"hosts\"}<\/RECORD><RECORD>{\"schema\":\"osram\",\"gid\":\"dd22c2c9-501b-4bac-af02-7e68e93953c5\",\"table\":\"hosts\"}<\/RECORD><RECORD>{\"schema\":\"osram\",\"gid\":\"8e7e962d-e3ce-4e76-b584-10c37f31fef5\",\"table\":\"hosts\"}<\/RECORD><RECORD>{\"schema\":\"osram\",\"gid\":\"379a6de1-4d31-4b92-ad9a-1845c37389ad\",\"table\":\"hosts\"}<\/RECORD><\/INDEX><\/LANG><\/CMS_VALUE>",
   "released by":3244,
   "changed by":3244,
   "wf col":null,
   "wf id":null,
   "host":"www.cms-web-dev.os4.spacenet.de",
   "postfix":"/test", 
   "targeturl":"<CMS_VALUE name=\"ttTargetUrl\" tag=\"FS_REFERENCE\"><LANG id=\"ยง\" set=\"1\"><UID>shorturl<\/UID><UIDTYPE>SITESTORE_LEAF<\/UIDTYPE><REMOTE/><\/LANG><\/CMS_VALUE>",
   "fs_id":258
}

zu Lรถsung Stefan:

komme so leider auch nicht drauf, da ich einen Error erhalte wenn ich wie beschrieben die FOR-Schleife gestalte:

06.04.2016 14:15:53.109 ERROR ($CMS_FOR( _itemHostList, _item.hostlist.values )$ at 10, 4): Cannot iterate over: class de.espirit.firstspirit.parser.eval.Undefined

    inside of: Template 'pt_rewriteurls__448_dev' (id=33847)

    inside of: $CMS_TRIM(level:1)$ - at 6, 14

    inside of: $CMS_IF(  ! frRewriteUrls.isEmpty )$ - at 8, 1

    inside of: $CMS_FOR( _item, frRewriteUrls )$ - at 9, 3

    inside of: $CMS_FOR( _itemHostList, _item.hostlist.values )$ - at 10, 4

lg thomas

0 Kudos

Hm, sehe gerade erst, dass du direkt auf die Spalten der Datenbank zugreifst und nicht auf das Formular, richtig? Dann geht das so nicht und anders vermutlich auch eher schwer. Deine Ausgabe (RECORD) oben zeigt keinen Record sondern einen Datensatzeintrag mit den einzelnen Spalten. Auf diesem Weg fehlt jegeliche Verknรผpfung zum Formular und somit auch zur Auswertung des FS_INDEX.

GruรŸ

Stefan

Ok, Danke.

Dann werde ich es direkt in der Tabellenvorlage Umsetzen mรผssen und diese als Content einbinden in das Pagetemplate.

$CMS_TRIM(level:2)$

<urlrewrite>

  $CMS_FOR(_item, ttHostList)$     

      <rule>

       <from>^/web/$CMS_VALUE(ttShortURL)$</from>

       <to type="redirect">http://$CMS_VALUE(_item.ttName)$$CMS_VALUE(_item.postfix)$/TemplateMaster$CMS_REF(ttTargetUrl)$</to>       

       <condition name="host" operator="equal">$CMS_VALUE(_item.ttName)$</condition>  

    </rule>

  $CMS_END_FOR$

</urlrewrite>

$CMS_END_TRIM$

lg thomas

Hallo Thomas,

ist dieses Posting noch offen? Benรถtigst du noch weitere Hilfe oder war der direkte Weg รผber die Tabellenvorlage erfolgreich?

Viele GrรผรŸe

Michaela

0 Kudos

Hallo Michaela,

das Problem ist damit erledigt.

Danke.

0 Kudos
TimoMeister
Returning Responder

Hallo zusammen,

wenn ich das richtig lese, kommt man รผber ein contentSelect nicht direkt an die Werte des FS_INDEX, richtig?

Wie komme ich dann an die Werte?

In meinem Anwendungsfall kann ich es nicht direkt in der Tabellenvorlage umsetzen.

Viele GrรผรŸe

Timo

0 Kudos

Hi Timo,

poste doch mal ein Beispiel bzw. Ausschnitt deines Codes und eine Erklรคrung warum du nicht direkt auf die Tabellevorlage zugreifen kannst.

0 Kudos

Type a product name