B_Schwab
I'm new here

Media-Folder Pfad ausgeben mit FS_REFERENCE?

Jump to solution

Hallo zusammen,

für Konfigurationsangaben in einem JavaScript benötige ich nur den Pfad eines Media-Folders. Damit dieser nicht hartcodiert im JavaScript hinterlegt werden muss, möchte ich dies z.B. mit FS_REFERENCE pflegbar machen.

Über das Ergebnis "TargetReference" habe ich bisher mit Hilfe der API keine Möglichkeit gefunden, mir den reinen Pfad auszugeben. Auch über CMS_INPUT_FILE hatte ich noch keinen Erfolg.

Über CMS_INPUT_FILE kann ich ja z.B. bei einer Datei selbst über $CMS_VALUE(ref(st_file))$ die Pfadangaben der Datei ausgeben, was bei Verzeichnissen leider nicht funktioniert.

Sehe leider gerade vor lauter Bäumen den Wald nicht mehr.

Hat evtl. jemand eine Idee, wie man dies realisieren könnte? Ist FS_REFERENCE oder CMS_INPUT_FILE dafür überhaupt der richtige Ansatz?

Vielen Dank.

B. Schwab

1 Solution

Accepted Solutions
hoebbel
Crownpeak employee

Hallo Herr Schwab,

hier noch eine Verbesserung der Syntax (kürzer und performanter, da nicht mehr über die Kinder iteriert wird)

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

$CMS_SET(media,foldername.get().children(mediaClass).getFirst())$

$CMS_VALUE(ref(media,abs:2).url.substring(0,ref(media,abs:2).url.lastIndexOf("/")+1))$

[Dank an Gockel für den Hinweis]

Viele Grüsse aus Dortmund,

  Holger Höbbel

View solution in original post

0 Kudos
19 Replies
C_Klingbeil
I'm new here

Hallo Herr Schwab,

ich tendiere zu FS_REFERENCE, da CMS_INPUT_FILE mit der Version 5.0 wegfallen wird. Es ist jedoch zu beachten, dass FS_REFERENCE in der 4.2 noch nicht offiziell freigegeben ist. Die Referenz auf einen MediaFolder sollte man über folgenden Code bekommen:

$CMS_REF( pagefolder:fsReferenceFieldName.getUid(), abs:0 )$

abs:0 ist nur ein Beispiel. abs:0-4 liefert absolute bis relative Links mit und ohne Präfix. Nachzulesen in der Doku:

http://www.e-spirit.com/odfs42/de/vorlagenentwicklung/vorlagensyntax/anweisungen/cms_ref/cms_ref.htm...

Hoffe, das hilft.

Viele Grüße,

C. Klingbeil

0 Kudos

Hallo Herr Klingbeil,

vielen Dank für Ihre Antwort.

Leider hilft mir dies noch nicht weiter.

Folgendes habe ich im Formular stehen:

      <FS_REFERENCE name="foldername" upload="no">

        <FILTER>

          <HIDE type="all"/>

          <ALLOW type="folders"/>

        </FILTER>

        <LANGINFOS>

          <LANGINFO lang="*" label="Folderdescription=""/>

        </LANGINFOS>

        <PROJECTS>

          <LOCAL name=".">

            <SOURCES>

              <FOLDER name="root" store="mediastore"/>

            </SOURCES>

          </LOCAL>

        </PROJECTS>

      </FS_REFERENCE>

In der Ausgabe habe ich nun Ihren Hinweis versucht

$CMS_REF(pagefolder:foldername.getUid(), abs:0 )$

Dabei erhalte ich dann die folgende Fehlermeldung:

16.03.2011 11:33:56.449 ERROR ($CMS_REF(pagefolder:foldername.getUid(), abs:0)$ at 169, 3): missing target for $CMS_REF()$: {pagefolder=null, abs=0}

Möchte ich mir dann anzeigen lassen, was getUid() liefert erhalte ich folgenden Hinweis:

16.03.2011 11:33:56.449 WARN  ($CMS_VALUE(foldername.getUid())$ at 168, 4): Replacing null value with empty default!

Um dann auf Nummer sicher zu gehen, ob in der Variable überhaupt etwas gespeichert wurde habe ich mir diese direkt ausgeben lassen und folgendes erhalten:

de.espirit.firstspirit.access.editor.value.TargetReferenceImpl@4cd63a91

Habe ich evtl. noch etwas übersehen oder einen Denkfehler?

Nochmals vielen Dank!

0 Kudos

Sorry, es ist natürlich kein pagefolder sondern ein mediafolder. Trotzdem sollte die TargetReference eine getUid Methode haben. Ich prüfe mal, ob sich noch ein weiterer Fehler eingeschlichen hat.

0 Kudos
hoebbel
Crownpeak employee

Wobei dann noch zu beachten bleibt, dass es meines Wissens nach nur für physikalische Dateien [Seitenreferenzen, Medien] möglich ist, einen Pfad zu erzeugen.

Einfachste Lösung: Man holt sich von dem Ordner ein Kind, von welchem ein Pfad erzeugt werden kann und erzeugt diesen Pfad. Dann muss man nur noch von dem entsprechenden String alles nach dem letzten / wegschneiden, schon hat man das gewünschte Ergebnis.

Der Code müsste ungefähr so aussehen <mediaRefname> ist der Referenzname eines Mediums im Ordner:

$CMS_VALUE(ref(media:"<mediaRefname>",abs:2).url.substring(0,ref(media:"<mediaRefname>",abs:2).url.lastIndexOf("/")+1))$

Viele Grüsse aus Dortmund,

  Holger Höbbel

0 Kudos

Und alles nur, weil $CMS_REF()$ für den IDProvider MediaFolder keine Referenz erzeugen kann... Wär das nicht etwas für ein Feature Request? Ich würde mir dann auch noch den PageFolder wünschen 😉

0 Kudos

Hallo Frau Klingbeil,

dem möchte ich nicht widersprechen Smiley Wink

Ach ja, die interne ID für den entsprechenden Feature Request ist übrigens 48418 [was aber niemenden davon abhalten soll, hier in der Community einen entsprechenden, neuen Feature Request zu erstellen]

Viele Grüsse aus Dortmund,

  Holger Höbbel

0 Kudos

Über FS_REFERENCE dürfte ich dann aber mit meinem momentanen Stand nicht wirklich weiter kommen, oder?

Wie oben schon kurz erwähnt verläuft ja eine Abfrage auf foldername.getUid() ohne Ergebnis. Auch der Versuch mit foldername.get() auf den IDProvider zuzugreifen bleibt ohne Ergebnis. Darüber hätte ich vermutet, auf die Kinder des Ordners zuzugreifen.

Sorry, stehe jetzt leider völlig auf dem Schlauch :smileyconfused:

0 Kudos
hoebbel
Crownpeak employee

Hallo Herr Schwab,

versuchen Sie es mal so:

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

$CMS_FOR(media,foldername.get().children(mediaClass))$

$CMS_IF(#for.isFirst)$

$CMS_VALUE(ref(media,abs:2).url.substring(0,ref(media,abs:2).url.lastIndexOf("/")+1))$

$CMS_END_IF$

$CMS_END_FOR$

Viele Grüsse aus Dortmund,

  Holger Höbbel