kraemer
I'm new here

Generierte Sprachen im Template herausfinden

Jump to solution

Hallo,

ich versuche in einem Template herauszufinden, ob eine Seite mit dem aktuell laufenden Generierungsjob in einer bestimmten Sprache X generiert wird oder nicht.

$CMS_FOR(for_lang,#global.project.languages)$

  $CMS_IF(for_lang != #global.language && for_lang.shouldGenerate() && #global.page.isTranslated(for_lang))$

    <a href="$CMS_REF(#global.node,lang:for_lang)$<%= detailParam %>"><img src="$CMS_REF(media:"lang_"+for_lang.abbreviation.toLowerCase,res:"flag_square_w29h19")$"></a>

  $CMS_END_IF$

$CMS_END_FOR$

In unserem Projekt ist es allerdings so, dass sozusagen mehrere Microsites in einem FS-Projekt verwaltet werden und es im Pagestore teilweise Seiten gibt, die auf mehreren Microsites verwendet werden. Dadurch kann es sein, dass eine Seite in deutsch, französisch und schwedisch übersetzt ist, aber auf einer bestimmten Microsite nur Deutsch/Französisch generiert wird. Der einzige Ort, an dem zuverlässig definiert ist welche Sprachen im Rahmen einer Microsite verwendet werden, ist die Einstellung am entsprechenden Generierungstask in der Auftragsverwaltung.

Der oben dargestellte Code ist für den Sprachwechsler. Der funktioniert leider so nicht perfekt, da lang.shouldGenerate() sich nicht auf den Job sondern auf allgemeine Projekteinstellungen bezieht. Dadurch würde dann eine schwedisch übersetzte Seite auf einer Microsite die kein schwedisch generiert trotzdem den Link für die schwedische Sprache bekommen. Das wiederum erzeugt einen 404, da die Seite auf schwedisch nicht generiert wird.

Und nun zur Frage: Hat jemand eine Idee, wie ich im Template herausfinden kann, ob der aktuelle Generierungstask eine bestimmte Sprache generiert oder nicht?

Für die Preview könnte ich noch eine Weiche einbauen und dann einfach dort alle anzeigen, aber im Rahmen eines ScheduleContext würde ich es gern richtig lösen.

Danke & Gruss

Michel

0 Kudos
1 Solution

Accepted Solutions
cthomas
I'm new here

Hallo Michael,

du kannst im Template eben diese Information aus dem Generierungsauftrag auslesen (das funktioniert natürlich nicht für die Preview).

$CMS_FOR(for_lang,#global.project.languages)$

  $CMS_IF(for_lang != #global.language && for_lang.shouldGenerate() && #global.page.isTranslated(for_lang))$

    $CMS_IF(#global.preview || #global.scheduleContext.task.getGenerateFlag(for_lang, #global.templateSet))$

      <a href="$CMS_REF(#global.node,lang:for_lang)$<%= detailParam %>"><img src="$CMS_REF(media:"lang_"+for_lang.abbreviation.toLowerCase,res:"flag_square_w29h19")$"></a>

    $CMS_END_IF$

  $CMS_END_IF$

$CMS_END_FOR$

oder in Form eines Lambda Ausdrucks:

$CMS_IF(#global.preview)$

  $CMS_SET(set_langs, #global.project.languages.filter(x->x != #global.language && x.shouldGenerate() && #global.page.isTranslated(x))$

$CMS_ELSE$

  $CMS_SET(set_langs, #global.project.languages.filter(x->#global.scheduleContext.task.getGenerateFlag(x, #global.templateSet) && x != #global.language && x.shouldGenerate() && #global.page.isTranslated(x))$

$CMS_END_IF$

$CMS_IF(set_langs.size() > 0)$

  ...

    $CMS_FOR(for_lang, set_langs)$

      <a href="$CMS_REF(#global.node,lang:for_lang)$<%= detailParam %>"><img src="$CMS_REF(media:"lang_"+for_lang.abbreviation.toLowerCase,res:"flag_square_w29h19")$"></a>

    $CMS_END_FOR$

  ...

$CMS_END_IF$

View solution in original post

0 Kudos
1 Reply
cthomas
I'm new here

Hallo Michael,

du kannst im Template eben diese Information aus dem Generierungsauftrag auslesen (das funktioniert natürlich nicht für die Preview).

$CMS_FOR(for_lang,#global.project.languages)$

  $CMS_IF(for_lang != #global.language && for_lang.shouldGenerate() && #global.page.isTranslated(for_lang))$

    $CMS_IF(#global.preview || #global.scheduleContext.task.getGenerateFlag(for_lang, #global.templateSet))$

      <a href="$CMS_REF(#global.node,lang:for_lang)$<%= detailParam %>"><img src="$CMS_REF(media:"lang_"+for_lang.abbreviation.toLowerCase,res:"flag_square_w29h19")$"></a>

    $CMS_END_IF$

  $CMS_END_IF$

$CMS_END_FOR$

oder in Form eines Lambda Ausdrucks:

$CMS_IF(#global.preview)$

  $CMS_SET(set_langs, #global.project.languages.filter(x->x != #global.language && x.shouldGenerate() && #global.page.isTranslated(x))$

$CMS_ELSE$

  $CMS_SET(set_langs, #global.project.languages.filter(x->#global.scheduleContext.task.getGenerateFlag(x, #global.templateSet) && x != #global.language && x.shouldGenerate() && #global.page.isTranslated(x))$

$CMS_END_IF$

$CMS_IF(set_langs.size() > 0)$

  ...

    $CMS_FOR(for_lang, set_langs)$

      <a href="$CMS_REF(#global.node,lang:for_lang)$<%= detailParam %>"><img src="$CMS_REF(media:"lang_"+for_lang.abbreviation.toLowerCase,res:"flag_square_w29h19")$"></a>

    $CMS_END_FOR$

  ...

$CMS_END_IF$

0 Kudos