Search the FirstSpirit Knowledge Base
Servus,
ich möchte in einem Fliesstext Textstellen markieren, die als Link ausgegeben werden sollen und wenn man darauf klickt, soll sich ein Modal-Layer öffnen. Dessen HTML-Markup muss nach der Ausgabe des Fliesstextes erfolgen. Für den Fliesstext habe ich ein CMS_INPUT_DOM mit folgender erlaubter Verweisvorlage: <LINKEDITOR name="elm_link_info_layer"/>
Diese Verweisvorlage schreibt die Eingaben zum Modal-Layer in den Page-Context:
$CMS_SET(set_lt_info_layer_map,{"uid":sc_uid})$
$CMS_IF(#global.context("PAGE")["INFOLAYER"].isEmpty)$
$CMS_SET(#global.context("PAGE")["INFOLAYER"], {sc_uid:set_lt_info_layer_map})$
$CMS_ELSE$
$CMS_SET(void, #global.context("PAGE")["INFOLAYER"].put(sc_uid,set_lt_info_layer_map))$
$CMS_END_IF$
Nach dem Fliesstext gebe ich dann diese Infos aus:
$CMS_FOR(for_info_layer,#global.context("PAGE")["INFOLAYER"])$
<h2>Ausgabe $CMS_VALUE(for_info_layer.value.uid)$</h2>
$CMS_END_FOR$
Das funktioniert soweit, allerdings erhalte ich bei der Ausgabe jeden Modal-Layer doppelt. Da ich noch eine eindeutige Idee vergebe, funktionieren die Modal-Layer, aber ich erkenne damit auch deutlich die Dopplung.
Wird die Verweisvorlage zweimal aufgerufen? Wenn ja, von wem und wie kann ich dies unterscheiden? Ich würde gerne nur einmal das HTML-Markup für den Modal-Layer ausgeben...
Mit freundlichem Gruß
Thorben Hischke
Hallo Thorben,
in den von dir geposteten Codezeilen kann ich keinen Grund für dein Problem finden. Wie ist denn die Verweisvorlage eingebunden? Vermutlich wird diese ja zweimal aufgerufen. Kannst du etwas mehr Code posten?
Grüße
Jan
Um die Stelle schnell zu finden kannst du in die Verweisvorlage temporär ein $CMS_VALUE(#global.logError"xxx")$ einfügen. Dann sieht man im Log die aufrufende(n) Stelle(n).
Hallo Jan,
In der Absatzvorlage:
<CMS_INPUT_DOM
name="st_text"
bold="yes"
enableImport="no"
hFill="yes"
italic="no"
list="yes"
listConfig="style:Typ[1:Bullet|2:Nummeriert|8:OK-Haken]"
listDefaultConfig="style=1,pre=OK"
rows="20"
useLanguages="yes">
<FORMATS>
<TEMPLATE name="p"/>
<TEMPLATE name="h3"/>
<TEMPLATE name="h4"/>
<TEMPLATE name="h5"/>
<TEMPLATE name="h6"/>
<TEMPLATE name="sub"/>
<TEMPLATE name="sup"/>
</FORMATS>
<LANGINFOS>
<LANGINFO lang="*" label="Text" description="Fließtext inkl. Formatierungen und Links"/>
</LANGINFOS>
<LINKEDITORS>
<LINKEDITOR name="elm_link_info_layer"/>
</LINKEDITORS>
</CMS_INPUT_DOM>
Die Verweisvorlage elm_link_info_layer:
<CMS_MODULE>
<CMS_INPUT_TEXT name="lt_linktext" hFill="yes" singleLine="no" useLanguages="no">
<LANGINFOS>
<LANGINFO lang="*" label="Link Text" description="Text for the link"/>
<LANGINFO lang="DE" label="Linkbezeichnung" description="Text des Links"/>
</LANGINFOS>
</CMS_INPUT_TEXT>
<CMS_INPUT_TEXT name="lt_headline" hFill="yes" singleLine="no" useLanguages="no">
<LANGINFOS>
<LANGINFO lang="*" label="Info Layer Headline" description="Headline Info Layer"/>
<LANGINFO lang="DE" label="Info Layer Überschrift" description="Überschrift im Info Layer"/>
</LANGINFOS>
</CMS_INPUT_TEXT>
<CMS_INPUT_DOM
name="lt_text"
bold="yes"
enableImport="no"
hFill="yes"
italic="no"
list="yes"
listConfig="style:Typ[1:Bullet|2:Nummeriert|8:OK-Haken]"
listDefaultConfig="style=1,pre=OK"
rows="20"
useLanguages="no">
<FORMATS>
<TEMPLATE name="p"/>
<TEMPLATE name="h3"/>
<TEMPLATE name="h4"/>
<TEMPLATE name="h5"/>
<TEMPLATE name="h6"/>
<TEMPLATE name="sub"/>
<TEMPLATE name="sup"/>
</FORMATS>
<LANGINFOS>
<LANGINFO lang="*" label="Text" description="Fließtext inkl. Formatierungen und Links"/>
</LANGINFOS>
</CMS_INPUT_DOM>
</CMS_MODULE>
Der HTML-Ausgabekanal der Verweisvorlage:
$CMS_TRIM(level:3)$
$CMS_RENDER(script:"get_id")$
<span class="mod-114"><a href="" data-id="#$CMS_VALUE(sc_uid)$" class="elm-003 wrapper modal disclaimer">$CMS_VALUE(lt_linktext)$</a></span>
$CMS_SET(set_lt_info_layer_map,{"uid":sc_uid})$
$CMS_SET(void,set_lt_info_layer_map.put("headline", lt_headline))$
$CMS_SET(void,set_lt_info_layer_map.put("text", lt_text))$
$CMS_SET(void,set_lt_info_layer_map.put("ctx", set_ctx))$
$CMS_IF(#global.context("PAGE")["INFOLAYER"].isEmpty)$
$CMS_SET(#global.context("PAGE")["INFOLAYER"], {sc_uid:set_lt_info_layer_map})$
$CMS_ELSE$
$CMS_SET(void, #global.context("PAGE")["INFOLAYER"].put(sc_uid, set_lt_info_layer_map))$
$CMS_END_IF$
$CMS_END_TRIM$
Das Skript get_id:
//!Beanshell
import java.util.UUID;
uuid = UUID.randomUUID().toString();
context.getContext().getParentContext().setVariableValue("sc_uid",uuid);
Und für die Ausgabe:
$CMS_IF(!#global.context("PAGE")["INFOLAYER"].isEmpty)$
$CMS_FOR(for_info_layer,#global.context("PAGE")["INFOLAYER"])$
$CMS_IF(!for_info_layer.value.uid.isEmpty)$
<div class="mod mod-118 inline" id="$CMS_VALUE(for_info_layer.value.uid)$">
<h2 class="elm elm-104">
<span class="text">$CMS_VALUE(for_info_layer.value.headline)$</span>
</h2>
<div class="scrollpane">
<div class="elm elm-105">
$CMS_VALUE(for_info_layer.value.text)$
</div>
</div>
</div>
$CMS_END_IF$
$CMS_END_FOR$
$CMS_SET(#global.context("PAGE")["INFOLAYER"],"")$
$CMS_END_IF$
Hoffe, das hilft weiter ...
Mit freundlichem Gruß
Thorben Hischke
Wo wird denn "lt_text"
ausgegeben?
Ok, durch welches Statement genau? Ich seh das nicht...?!
Das Problem liegt darin, dass die Verweisvorlage doppelt aufgerufen wird und jedesmal wird eine ID erzeugt, die als key im Page-Kontext benutzt wird. Ich habe FS nicht dazu bringen können, sich um diese ID automatisch zu kümmern, selbst die Wahl des HashCodes eines Eingabefeldes der Verweisvorlage (bspw. Überschrift) hat nicht geholfen ?!?
Ich habe mir nun so geholfen, dass ich ein weiteres manuelles Eingabefeld für diese ID erstellt habe.