CMS_REF vs. ref(...)

Hallo,

mir ist zufällig was aufgefallen und ich bin mir nicht sicher, ob es evtl. ein Bug ist - oder zumindest ein fehlendes Feature (wie Holger ja immer sagt).

Und zwar hatte ich eine Linkvorlage und darin so eine Anweisung, um die Linkreferenz variabel zu setzen:

$CMS_SET(setReference, ref("pagefolder:news",template:"DB.news_detail",contentId:#row.fs_id))$

Dabei ist aufgefallen, dass die template-Angabe ignoriert wird und immer auf die falsche Seite (nämlich die News-Übersicht) verlinkt wird, weil die in dem Ordner als Startseite markiert ist.

Wenn ich es so umbaue, funktioniert es:

$CMS_SET(setReference)$$CMS_REF("pagefolder:news",template:"DB.news_detail",contentId:#row.fs_id)$$CMS_END_SET$

Jetzt weiß ich zwar nicht, ob die obige Variante mit ref(...) für sowas vorgesehen ist, aber wenn sie schon das Attribut contentId akzeptiert, sollte sie auch template annehmen, finde ich.

Der beschriebene Effekt betrifft sowohl die V4.2R4 als auch die 5.0beta.

Gruß

Matthias

Tags (1)
7 Comments
matthiasforberg
Occasional Collector

Hallo, wie ist denn hier der Stand? Gibt es hierzu irgendwelche Aussagen von e-Spirit?

Meines Wissen sollten CMS_REF und ref() das gleiche Verhalten zeigen, deswegen würde ich hier von einem Bug sprechen. Wird das gefixt?

Peter_Jodeleit
Crownpeak employee
Crownpeak employee

$CMS_REF()$ und ref().url sind zwar ähnlich, aber nicht immer das gleiche:

  • $CMS_REF()$ liefert eine URL (String)
  • ref() liefert ein Referenzobjekt für einen Knoten (StoreElement)

Im Beispiel wird ein Ordner in der Sturkturverwaltung gesucht (pagefolder:"news"). "$CMS_REF()$" liefert die URL auf eine Struktur-Seite unter Berücksichtigung der anderen Parameter. "ref().url" liefert im beschriebenen Fall (Ordner in der Sturkturverwaltung) einen Fehler (wird z.B. bei "Fehler der Vorschau" angezeigt).

Wir diskutieren gerade intern, ob man in der Generierung auch in diesem Fall die Funktion "ref().url" bereitstellen kann.

Der Rückgabetyp von "ref()" wird allerdings nicht geändert werden (auch aus Kompatibilitätsgründen).

Der Parameter "template" wird übrigens nur in Kombination mit dem Parameter "contentId" unterstützt.

Interne Berabeitungsnummer: #128742

matthiasforberg
Occasional Collector

Vielen Dank für die Antwort!

Dass "template" nur in Kombination mit "contentId" funktionieren kann, ist mir schon klar. Ich finde nur unlogisch, dass $CMS_VALUE(ref(pagefolder:"news", contentId:123))$ erwartungsgemäß auf eine Detailseite verlinkt (auch ohne .url hinten dran), aber sobald man eine "template" Angabe hinzufügt, alle Parameter ignoriert werden und nur noch der Folder verlinkt wird.

matthiasforberg
Occasional Collector

Ach tatsächlich, jetzt habe ich den entscheidenden Hinweis gelesen. Das pagefolder ist es. Ich habe es grad ausprobiert:

$CMS_VALUE(ref(pageref:"newspage", contentId:123))$ funktioniert!

$CMS_VALUE(ref(pagefolder:"news", contentId:123))$ funktioniert NICHT!

Demzufolge geht dann auch das template Attribut nicht, weil es bei pageref keinen Sinn ergibt. Hab's verstanden. Es wär trotzdem schön, wenn man das später mal gleichermaßen verwenden könnte, also auch mit pagefolder und template. Die CMS_VALUE Schreibweise bietet manchmal flexiblere Möglichkeiten als CMS_REF, weswegen wir die gerne verwenden.

Peter_Jodeleit
Crownpeak employee
Crownpeak employee

Update: In v5 stable funktioniert "ref" jetzt auch in Kombination mit "pagefolder:" und dem Tupel "contentId" / "templateId".

matthiasforberg
Occasional Collector

Super! Dankeschön!

Andreas-Knoor
Crownpeak Employee
Crownpeak Employee

Das Feature ist ab FirstSpirit >= 5.0.111 verfügbar.