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

#1 25. Mai 2019 07:34

philfr
probiert CMS/ms aus
Registriert: 08. Mai 2019
Beiträge: 41

Unterschiedliche Abschnitte auf einer Seite mischen

Hallo,

ist es möglich, auf einer Seite unterschiedliche Inhaltstypen anzuzeigen?
Ich würde gerne mehrere versteckte Seiten anlegen und deren Inhalte dann auf einer Seite gemeinsam anzeigen.
Geht so was?

Offline

#2 25. Mai 2019 14:35

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

Re: Unterschiedliche Abschnitte auf einer Seite mischen

Ich würde an dieser Stelle gerne das Modul Toolbox empfehlen.
Ich weiß aber gerade nicht, inwiefern das kompatibel zu CMSms 2.0 bzw. PHP 7 ist.
Mein letzter Stand ist, dass noch nicht alle Funktionen auf Herz und Nieren getestet wurden.

Jedenfalls kann man sich da unter anderem die Inhalte anderer Seiten holen.

Offline

#3 26. Mai 2019 22:49

nockenfell
Moderator
Ort: Lenzburg, Schweiz
Registriert: 09. November 2010
Beiträge: 2.863
Webseite

Re: Unterschiedliche Abschnitte auf einer Seite mischen

Toolbox habe ich unter CMSMS2 bisher nie voll durchgetestet. Das Modul läuft bei mir bei 4 CMSMS2 Seiten.

Für deine Anwendung musst du Toolbox wie folgt einsetzen:

getPageContent($alias,[$block],[$assign])

Gibt den Inhalt eines festgelegten Content-Blocks einer anderen Seite zurück.

Argumente:

    $alias - Der Alias oder die ID der Seite, deren Inhalt zurück gegeben werden soll.
    [$block] - (optional) der Name des Content-Blocks der festgelegten Seite. Ohne Vorgabe wird der Wert aus 'content_en' verwendet.
    [$assign] - (optional) der Name der Variable, der das Ergebnis zugewiesen werden soll.


Beispiel:

Der zweite Inhalt der 'about' Seite ist {tbtools::getPageContent('about','second','foo')}{eval var=$foo}

das Eval danach ist, damit allfälliger Smarty-Code in der Seite auch ausgeführt wird.

--> Du musst prüfen, ob das Assign funktioniert. Das habe ich bisher unter CMSMS2 nicht geprüft. Falls es nicht funktioniert, werde ich nachbessern.


[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog  /   Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox

Offline

#4 26. Mai 2019 18:36

philfr
probiert CMS/ms aus
Registriert: 08. Mai 2019
Beiträge: 41

Re: Unterschiedliche Abschnitte auf einer Seite mischen

Danke, ich probier es mal aus.

Beitrag geändert von philfr (26. Mai 2019 18:40)

Offline

#5 28. Mai 2019 15:12

philfr
probiert CMS/ms aus
Registriert: 08. Mai 2019
Beiträge: 41

Re: Unterschiedliche Abschnitte auf einer Seite mischen

Leider bekomme ich es nicht zum Laufen, und verstehe nicht warum.

Es kommt die Warnung:
Notice: Undefined index: foo in ... (cache-Datei)

Wenn ich aber nach dem Code ein "{debug}" einfüge, wird die Variable $foo angezeigt.
Das Ergebnis ist immer gleich, eagal ob ich nun "{eval var=$foo}" verwende oder "{eval $foo}"

Offline

#6 28. Mai 2019 18:40

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

Re: Unterschiedliche Abschnitte auf einer Seite mischen

Wenn Du die Variable nur brauchst, um {eval} auszuführen, versuch es mal ohne assign:

{eval var=tbtools::getPageContent("seitenalias","blockname")}

(Bei Seitenalias und Blockname auf Groß- und Kleinschreibung achten)

Offline

#7 28. Mai 2019 19:09

philfr
probiert CMS/ms aus
Registriert: 08. Mai 2019
Beiträge: 41

Re: Unterschiedliche Abschnitte auf einer Seite mischen

Das funktioniert :-)

Aber was ist der Grund dafür, dass die andere Methode nicht funktioniert?
Die Zuweisung funktioniert ja, wie die Debug-Ausgabe zeigt.

Offline

#8 29. Mai 2019 22:54

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

Re: Unterschiedliche Abschnitte auf einer Seite mischen

Hat wohl irgendwas mit dem Gültigkeitsbereich von Variablen zu tun.
Ab Smarty 3 kam der sogenannte Scope dazu. D.h. Variablen gelten nicht mehr global für alle (verschachtelten) Templates, sondern immer nur für den jeweiligen Teil des Templates für den sie definiert wurden.
Irgendwie scheint der Aufruf einer statischen Methode einer PHP-Klasse wie {tbtools:: ... } ein Sonderfall in Sachen Kontext zu sein. Ist weder Fleisch noch Fisch - also weder Plugin noch Modulaktion. Also völlig ohne Kontext. tbTools nutzt zwar die Methode assignGlobal(), das scheint aber nicht zu klappen. Dazu muss sich tbTools allerdings die Smarty-Instanz bzw. Template-Instanz selber holen um den Kontext herstellen zu können. Dazu nutzt es die Methode GetSmarty(). Eventuell wird hier die falsche Instanz zurückgegeben und die Variable wird dem falschen Scope zugeordnet.

Offline

#9 29. Mai 2019 07:07

philfr
probiert CMS/ms aus
Registriert: 08. Mai 2019
Beiträge: 41

Re: Unterschiedliche Abschnitte auf einer Seite mischen

Dann ist aber auch die Ausgabe im Debug-Fenster von Smarty fehlerhaft.
Dort steht sowohl bei $foo als auch bei z.B. $content_id:
Origin: "Global"

{eval var=$content_id} funktioniert
{eval var=$foo} funktioniert nicht

Offline

#10 29. Mai 2019 11:05

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

Re: Unterschiedliche Abschnitte auf einer Seite mischen

Wo hast Du {debug} platziert?
Bei mir taucht die Variable tatsächlich nirgends auf.

Offline

#11 29. Mai 2019 11:44

philfr
probiert CMS/ms aus
Registriert: 08. Mai 2019
Beiträge: 41

Re: Unterschiedliche Abschnitte auf einer Seite mischen

So sieht es bei mir aus:

{eval var=tbtools::getPageContent(36,'','foo')}
{debug}
{eval var=$foo}

Und das ist ein Ausschnitt aus dem Debug-Fenster:

$content_id   Origin: "Global"     Value "45"     
$content_obj Origin: "Global"     Value Content Object (0)     
$encoding  Origin: "Global"     Value "utf-8"     
$foo         Origin: "Global"      Value "<p>Mein Text....</p>"

Offline

#12 29. Mai 2019 11:50

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

Re: Unterschiedliche Abschnitte auf einer Seite mischen

OKay. Kommando zurück.
Die Variable steht tatsächlich sowohl im Body als auch im Head als global in der Debug-Ausgabe...  monkey

Offline

#13 29. Mai 2019 12:08

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

Re: Unterschiedliche Abschnitte auf einer Seite mischen

Im <head> kann ich auf die Variable dann zugreifen.
Nur im <body> noch nicht.
D.h. assign() und assignGlobal() wirken nicht auf das aktuell zu verarbeitetende Template.
Auch wenn {debug} das behauptet.
Check ich nicht.
Bleibt einem wohl nichts anderes übrig, als mit {capture} zu arbeiten.

Offline

#14 29. Mai 2019 14:00

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

Re: Unterschiedliche Abschnitte auf einer Seite mischen

Wenn man tbtools das aktuelle Template-Objekt übergibt, dann klappt es.
D.h. im Template:

{tbtools::getPageContent('about','second','foo', $smarty.template_object)}

Und dann in der Datei /modules/ToolBox/lib/class.tbTools.php in den Funktionen jeweils den Funktionskopf mit einer weiteren Variablen erweitern:

private static final function getPageContent($alias, $block = '',$assign = '', $smarty = '')
{
	...

	if(!$smarty)
		$smarty = $gCms->GetSmarty();

	...

Kann aber nicht die Lösung sein.
Wäre wesentlich eleganter, wenn man das aktuelle Templateobjekt auch von tbtools aus holen könnte, ohne dass man es aus dem Template selber übergeben muss.
Das ginge evtl. wenn man aus diesen Funktionen Smarty-Plugins macht.
Denn bei Plugins wird das aktuelle Template-Objekt automatisch immer mit übergeben.
D.h. ToolBox müsste seine Funktionen aus der tbtools-Klasse bei Smarty als Plugins registrieren.

Offline

#15 29. Mai 2019 14:44

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

Re: Unterschiedliche Abschnitte auf einer Seite mischen

Hoppla!
Das scheint so seit einigen Jahren ein bekanntes Problem in Smarty zu sein:
https://www.smarty.net/forums/viewtopic.php?p=78819

Offline

#16 29. Mai 2019 14:58

philfr
probiert CMS/ms aus
Registriert: 08. Mai 2019
Beiträge: 41

Re: Unterschiedliche Abschnitte auf einer Seite mischen

Hallo NaN,
vielen Dank erst mal für den Lösungsvorschlag.
Vielleicht gibt es ja auch mal ein Update von ToolBox

Gruß Frank

Offline

#17 03. Juni 2019 15:46

nockenfell
Moderator
Ort: Lenzburg, Schweiz
Registriert: 09. November 2010
Beiträge: 2.863
Webseite

Re: Unterschiedliche Abschnitte auf einer Seite mischen

Danke NaN für das ausführliche debuggen. Ich werde die ToolBox diesbezüglich verbessern.


[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog  /   Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox

Offline