Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#1 07. August 2013 07:48

Tillt
hat von CMS/ms gehört
Registriert: 07. August 2013
Beiträge: 2

Verwenden von $page_alias innerhalb von content_image Block

Hallo,

ich bin neu hier und auch CMSMS-Anfänger.
Ich möchte innerhalb eines content_image Blocks auf den Inhalt der Variable $page_alias zugreifen. Dazu habe ich am Anfang meines Templates soetwas eingefügt, und dann später ausgegeben:

{content_image block="erste_spalte_bild" dir="images/$page_alias" label="Erste Spalte: Bild (Verzeichnis: images/$page_alias)" assign="erste_spalte_bild" tab="Erste Spalte"}

Das funktioniert offensichtlich nicht. Ich habe auch versucht $page_alias mit Backticks zu versehen, ebenso erfolglos.

Ausgabe im Backend ist an der Stelle so:

Erste Spalte: Bild (Verzeichnis: images/".((string)$_smarty_tpl->tpl_vars['page_alias']->value).", ):
Fehler beim Einlesen der Dateiliste

Was mache ich falsch?

Offline

#2 07. August 2013 09:05

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.435

Re: Verwenden von $page_alias innerhalb von content_image Block

Hallo und willkommen im Forum.

Üblicher Denkfehler.

1. Das Template wird im Backend nicht zu 100% genauso verarbeitet wie im Frontend.
Es wird lediglich compiliert, aber das war's dann auch schon.
Das compilierte Resultat wird nicht nochmal für die Anzeige verarbeitet. Ist schwer zu verstehen, wenn man die Funktionsweise von Smarty nicht kennt. Ich verstehe es selber nur zum Teil.
Man muss sich das in etwa so vorstellen: Die Templates werden in mehreren Schritten verarbeitet. Ein Template wird compiliert, d.h. alles was {smarty} ist, wird in PHP-Code umgewandelt. Dieses compilierte Template wird als PHP-Datei gespeichert. "Statische" Inhalte werden in dieser Datei als reiner Text in eine PHP-Funktion geschrieben, die diesen Text beim Ausführen dann zurückgibt. Dieser reine Text kann aber weitere PHP-Funktionen enthalten, die eben nicht statisch sind. Daher wird bei der Ausgabe nicht einfach nur der statische Text angezeigt, sondern dieser vorher nochmal verarbeitet. Das $page_alias ist nunmal ein solcher nicht statischer Wert, da es sich bei jeder Seite ändert. Würde in dieser PHP-Datei der Name des Alias stehen, würde das Template, egal bei welcher Seite, immer ein und dasselbe Alias ausgeben bzw, müsste man das Template immer wieder neu compilieren. $page_alias wird also im compilierten Template nicht mit seinem eigentlichen Wert sondern als Funktionsaufruf gespeichert, der zur Laufzeit erst bei der Anzeige das Alias zurückgibt. Dazu muss das compilierte Template vor der Anzeige aber noch ein weiteres Mal verarbeitet werden. Da im Backend aber nichts angezeigt werden soll, entfällt dieser Schritt. Daher erhältst Du an dieser Stelle immer wieder den PHP-Code "$_smarty_tpl->tpl_vars['page_alias']->value" anstelle des Resultats dieses Codes.

Ich weiß nicht, ob es eine spezielle Schreibweise gibt, mit der man diese Variable trotzdem korrekt ausgeben könnte, aber selbst wenn es diese gäbe:

2. Das $page_alias existiert im Backend nicht, weil die zugehörige Seite bzw. das Inhaltsobjekt im Backend nicht existiert. Dieses Objekt existiert nur im Frontend. Es wird nur dann eine Instanz dieses Objektes erstellt und nebst $page_alias dem Template zugewiesen, wenn man die Seite über das Frontend aufruft. Außerdem kann, wenn eine Seite im Backend gerade erst erstellt wird, logischerweise noch überhaupt rein garnichts existieren, was sich auf diese Seite bezieht, weil sie ja eben noch garnicht existiert - weder im Front- noch im Backend.


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#3 07. August 2013 13:40

Tillt
hat von CMS/ms gehört
Registriert: 07. August 2013
Beiträge: 2

Re: Verwenden von $page_alias innerhalb von content_image Block

Danke für die prompte Antwort. Jetzt ist mir einiges klarer geworden.
Dann werde ich das anders lösen.

Beitrag geändert von Tillt (07. August 2013 14:08)

Offline