Bratzell
I'm new here

Auflistung aller Datei Refferenzen .getIncomingReferences

Jump to solution

Hallo zusammen,

ist es möglich herauszufinden auf welchen Seiten eine Datei genutz wird?

Ich habe unterm Text meinen Code angegeben und es dort mit $CMS_VALUE(for_media.getIncomingReferences)$ versucht.

Die anzeige in der Preview ist jedoch nich so wie es gerne hätte.

Ändert sich das beim Staging oder muss ich eine andere Lösung finden.

Das ganze ist Teil einer CSV-Tabelle erstellt als Page-Template zu der ich hier schon mal Fragen gestellt habe.

$CMS_TRIM(level:3)$

$CMS_SET(set_mediastoreRoot, #global.project.userService.getStore(class("de.espirit.firstspirit.access.store.Store$Type").MEDIASTORE, !#global.preview))$

Refferenzname|Ablageort|Dateigröße|Seitenrefferenz|CRC

$CMS_SET(Media, class("de.espirit.firstspirit.access.store.mediastore.Media"))$

$CMS_FOR(for_media,set_mediastoreRoot.getChildren(Media,true))$

$CMS_IF(for_media.getType()==Media.FILE)$

$CMS_SET(set_file, for_media.getFile(#global.language))$

$CMS_IF(set_file.extension=="pdf")$

$CMS_TRIM(level:4)$

$CMS_VALUE(for_media.uid + "|")$$CMS_VALUE(for_media.getIncomingReferences)$|$CMS_REF(for_media)$|$CMS_VALUE(set_file.getSize() + "|")$$CMS_VALUE(set_file.getCrc())$

$CMS_END_TRIM$

$CMS_END_IF$

$CMS_END_IF$

$CMS_END_FOR$

$CMS_END_TRIM$

Grüße

Artur

0 Kudos
1 Solution

Accepted Solutions
mbergmann
Crownpeak employee

Hallo Artur,

das Ganze ist leider etwas komplexer. Das .getIncomingReferences() liefert erstmal eine Liste (bzw. Array) von ReferenceEntries. Darüber kommst Du jeweils über getReferencedElement() an das Objekt von dem die Referenz ausgeht.

Das kann allerdings alles mögliche sein, insbesondere ist es normalerweise keine Seitenreferenz sondern eher eine Page oder eine Section oder ein Datensatz (theoretisch kann es noch mehr sein wie eine globale Inhaltsseite, ein Ordner in der Inhalts- oder Strukturverwaltung (über Metadaten) usw., aber eher unwahrscheinlich - kommt aufs Projekt an).

D.h. ab hier musst Du eine Fallunterscheidung machen. Z.B. von einer Section erst zur Page laufen.

Zur Page müsstest Du dann (wieder über getIncomingReferences()) alle ( ! ) Seitenreferenzen finden - erst DIE haben ja eine URL.

Für Datensätze wird es noch komplizierter...

Viele Grüße

Michael

View solution in original post

0 Kudos
2 Replies
mbergmann
Crownpeak employee

Hallo Artur,

das Ganze ist leider etwas komplexer. Das .getIncomingReferences() liefert erstmal eine Liste (bzw. Array) von ReferenceEntries. Darüber kommst Du jeweils über getReferencedElement() an das Objekt von dem die Referenz ausgeht.

Das kann allerdings alles mögliche sein, insbesondere ist es normalerweise keine Seitenreferenz sondern eher eine Page oder eine Section oder ein Datensatz (theoretisch kann es noch mehr sein wie eine globale Inhaltsseite, ein Ordner in der Inhalts- oder Strukturverwaltung (über Metadaten) usw., aber eher unwahrscheinlich - kommt aufs Projekt an).

D.h. ab hier musst Du eine Fallunterscheidung machen. Z.B. von einer Section erst zur Page laufen.

Zur Page müsstest Du dann (wieder über getIncomingReferences()) alle ( ! ) Seitenreferenzen finden - erst DIE haben ja eine URL.

Für Datensätze wird es noch komplizierter...

Viele Grüße

Michael

0 Kudos

Hallo Michael,

Ich hab das jetzt soweit hinbekommen hier der fertige Code:

$CMS_TRIM(level:3)$

$CMS_SET(set_mediastoreRoot, #global.project.userService.getStore(class("de.espirit.firstspirit.access.store.Store$Type").MEDIASTORE, !#global.preview))$

Refferenzname|Ablageort|Dateigroesse|Seitenrefferenz|CRC

$CMS_SET(Media, class("de.espirit.firstspirit.access.store.mediastore.Media"))$

$CMS_FOR(for_media, set_mediastoreRoot.getChildren(Media,true))$

$CMS_IF(for_media.getType()==Media.FILE)$

$CMS_SET(set_file, for_media.getFile(#global.language))$

$CMS_IF(set_file.extension=="pdf")$

$CMS_TRIM(level:4)$

"$CMS_VALUE(for_media.uid)$"|"$CMS_REF(for_media)$"|$CMS_VALUE(set_file.getSize())$|"$CMS_FOR(for_media_item, for_media.getIncomingReferences())$$CMS_IF(for_media_item.getId() == -1)$$CMS_SET(media_value_1, for_media_item.getReferencedElement.getId())$$CMS_VALUE(media_value_1 + " ")$$CMS_ELSE$$CMS_SET(media_value_2, for_media_item.getReferencedObject())$$CMS_SET(media_parent_1, media_value_2.getParent())$$CMS_SET(media_parent_2, media_parent_1.getParent())$$CMS_FOR(media_site_1, media_parent_2.getIncomingReferences())$$CMS_SET(media_site_2, media_site_1.getReferencedObject())$$CMS_REF(media_site_2)$$CMS_END_FOR$$CMS_END_IF$$CMS_END_FOR$"|$CMS_VALUE(set_file.getCrc())$

$CMS_END_TRIM$

$CMS_END_IF$

$CMS_END_IF$

$CMS_END_FOR$

$CMS_END_TRIM$

Der Größe Block ab "CMS_...... muss so sein weil aus irgendeinem Grund ein Absatz in der .csv ein Leerzeichen verursacht.

Daher ist alles in eine Zeile gepresst worden.

Grüße

Artur

0 Kudos