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?!?