thischke
Returning Observer

Verweisvorlage wird doppelt aufgerufen

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

0 Kudos
7 Replies
kohlbrecher
Crownpeak employee

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

0 Kudos
Peter_Jodeleit
Crownpeak employee

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).

Peter
0 Kudos

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

0 Kudos

Wo wird denn "lt_text" ausgegeben?

Peter
0 Kudos

In der Formatvorlage (letzter Code-Schnipsel), welche aus der Seitenvorlage gerendert wird. Der Wert wird dort aus dem Page-Kontext gelesen.

Ein Minimal-Beispiel habe ich als Feature hinzugefügt.

0 Kudos

Ok, durch welches Statement genau? Ich seh das nicht...?!

Peter
0 Kudos
thischke
Returning Observer

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.