Questions & Answers

SOLVED
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

Type a product name