Questions & Answers

SOLVED
RZoller
Returning Observer

Innerhalb einer CONTENTAREALIST auf diese zugreifen

Jump to solution

Hallo zusammen,

ich habe folgendes Problem:

Ich habe zwei Vorlagen mit der gleichen CONTENTAREALIST aufgebaut:

<CMS_INPUT_CONTENTAREALIST name="cs_contacts_ordered" hFill="yes" rows="2">
    <LANGINFOS>
      <LANGINFO lang="*" label="Ansprechpartner"/>
      <LANGINFO lang="EN" label="Contact Person"/>
    </LANGINFOS>
    <SOURCES>
      <TEMPLATE name="ansprechpartnereintrag"/>
    </SOURCES>
  </CMS_INPUT_CONTENTAREALIST>

Abhรคngig von der Vorlage muss die Anzeige aber etwas verรคndert werden, so dass ich innerhalb von "ansprechpartnereintrag" herausfinden muss, aus welcher Vorlage "ansprechpartnereintrag" aufgerufen wurde. Ist dies mรถglich?

Ich habe innerhalb von "ansprechpartnereintrag" schon $CMS_VALUE(#global.section.getParent())$ versucht, bekomme aber immer null zurรผckgeliefert.

Vielen Dank fรผr die Hilfe!

Renรฉ Zoller

0 Kudos
1 Solution

Accepted Solutions

Ich habe mal sowas umgesetzt, mit folgender Logik. Es handelt sich auch um eine  ContentAreaList, die ineinander verschachtelt werden kann.

$--
The first nested grid (grid inside a grid) needs to have the "first" class applied
Context for a nested grid looks like this: page -> section -> for -> section
So we check if the parent.parent is a section and if that section is the first section-list in the widgetcontainer
--$
$CMS_IF(#global.context.parentContext.parentContext != null && #global.context.parentContext.parentContext.name == "section" && #global.context.parentContext.parentContext.definedVariableValue("set_st_isFirstColumn"))$
    $CMS_SET(set_st_isFirstNestedContainer," first")$
$CMS_ELSE$
    $CMS_SET(set_st_isFirstNestedContainer,"")$
$CMS_END_IF$

View solution in original post

0 Kudos
6 Replies
StefanSchulz
I'm new here

Warum kommen keine zwei unterschiedlichen Vorlagen"ansprechpartnereintrag1" und "ansprechpartnereintrag2" in Frage?

0 Kudos

Es handelt sich um eine Tabelle, in der Ansprechpartner in einer bestimmten Reihenfolge einer Rolle zugeordnet werden. Die Darstellung der Rolle ist aber im Hauptbereich der Webseite anders als in der Marginalspalte. Dafรผr wurden zwei Absatztemplates erstellt, in der man diese CONTENTAREALIST hat. Jetzt habe ich aber das Problem, dass herausbekommen muss, wie in welcher Vorlage ich mich befinde.

Mit diesem Ansatz umgehen ich die Problematik, dass ich in einer M:N Beziehung zwischen zwei Tabellen keine Reihenfolge speichern kann.

0 Kudos

Mir ist der Aufbau immer noch nicht gnz klar, weil ContentAreaList und N:M fรผr mich keine Verbindung haben.

Vielleicht hilft aber folgender Weg: Man sollte eigentlich immer aus einer inneren Vorlage auf Variablen aus รคuรŸeren Vorlagen zugreifen kรถnnen. Wenn also die die ContentAreaList aufrufende Vorlage vorher eine Variable setzt (z. B. per $CMS_SET()$), sollte diese auch in den einzelnen Absรคtzen der ContentAreaList abfragbar sein.

0 Kudos

Hallo Stefan, vielen Dank fรผr Deine Mรผhe!

Das Senario sieht so aus: Ansprechpartner und deren Rollen werden in einer Datenquelle gepflegt und mรผssten N:M verknรผpft sein. Da man in einer CONTENTLIST bei einer N:M-Beziehung keine Reihenfolge speichern kann haben wir uns entschieden, dass wir dies mit einer CONENTAREALIST lรถsen.

Dafรผr haben wir eine Vorlage "ansprechpartnereintrag" angelegt, die den Datensatz rendern soll und รผber eine CONTENAREALIST in das Datenbanktemplate eingebunden.

Ausschnitt DB-Template Rolle

<CMS_INPUT_CONTENTAREALIST name="cs_contacts_ordered" hFill="yes" rows="2">
    <LANGINFOS>
      <LANGINFO lang="*" label="Ansprechpartner  (Service)"/>
      <LANGINFO lang="EN" label="Contact Person  (Service)"/>
    </LANGINFOS>
    <SOURCES>
      <TEMPLATE name="ansprechpartnereintrag"/>
    </SOURCES>
  </CMS_INPUT_CONTENTAREALIST>


Fรผr die Ausgabe will der Redakeuer die Rolle auswรคhlen und die Ansprechpartner werden dann entsprechend รผber die CONTENTAREALIST ausgegeben. Allerdings gibt es hier jetzt zwei Stellen, wo er das machen kann, fรผr die wir jeweils ein Template angelegt haben. In den Templates kann man รผber eine OBJECTCHOOSER die Rolle auswรคhlen:

<CMS_INPUT_OBJECTCHOOSER name="st_roll" hFill="yes" table="contact_person.roll" useLanguages="no">
    <LANGINFOS>
      <LANGINFO lang="*" label="Auswahl Rolle"/>
      <LANGINFO lang="EN" label="Choose Roll (Contact Person)"/>
    </LANGINFOS>
  </CMS_INPUT_OBJECTCHOOSER>

Die Daten werden dann รผber eine FOR-Schleife ausgegeben:

$CMS_IF(!st_roll.isEmpty)$

$CMS_IF(!st_roll.contacts_ordered.isEmpty)$
   $CMS_FOR(person,roll_entry.contacts_ordered)$
    $CMS_VALUE(person)$
    $CMS_SET(set_entry,set_entry+1)$
   $CMS_END_FOR$
  $CMS_END_IF$

$CMS_END_IF$

Mit $CMS_VALUE(person)$ wird also รผber "ansprechpartnereintrag" die person gerendert. Da ich aber je nach Template eine andere Darstellung benรถtig, mรถchte ich in "ansprechpartnereintrag" herausfinden, welches Template gerade die FOR-Schleife ausfรผhrt.

Ich habe jetzt folgendes in Template A probiert:

$CMS_SET(this_template, 0)$

$CMS_IF(!st_roll.isEmpty)$

$CMS_IF(!st_roll.contacts_ordered.isEmpty)$
   $CMS_FOR(person,roll_entry.contacts_ordered)$
    $CMS_VALUE(person)$
    $CMS_SET(set_entry,set_entry+1)$
   $CMS_END_FOR$
  $CMS_END_IF$

$CMS_END_IF$

Und entsprechend in Template B $CMS_SET(this_template, 1)$

In "ansprechpartnereintrag" versuche ich jetzt zu testen, ob ich auf die Variable zugreifen kann mit

$CMS_VALUE(!isSet(this_template))$

Dies liefert mir aber immer false.

Ich hoffe, man kann das Problem jetzt besser verstehen?!?

0 Kudos

Ich habe mal sowas umgesetzt, mit folgender Logik. Es handelt sich auch um eine  ContentAreaList, die ineinander verschachtelt werden kann.

$--
The first nested grid (grid inside a grid) needs to have the "first" class applied
Context for a nested grid looks like this: page -> section -> for -> section
So we check if the parent.parent is a section and if that section is the first section-list in the widgetcontainer
--$
$CMS_IF(#global.context.parentContext.parentContext != null && #global.context.parentContext.parentContext.name == "section" && #global.context.parentContext.parentContext.definedVariableValue("set_st_isFirstColumn"))$
    $CMS_SET(set_st_isFirstNestedContainer," first")$
$CMS_ELSE$
    $CMS_SET(set_st_isFirstNestedContainer,"")$
$CMS_END_IF$

0 Kudos

Super, damit hat es funktioniert Smiley Happy ! Vielen Dank!

0 Kudos

Type a product name