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