Wie rufe ich den Wert aus "Codesnippets" von "oxcontents" ab?

Hallo zusammen,

Ich erstelle einen API-Endpunkt, um den visualCMS-Inhalt nach ident abzurufen. Das Problem ist jedoch, dass einige Inhalte Ausschnitte wie $oxcmp-> oxshops__oxname-> value usw. enthalten. Gibt es eine Möglichkeit, alles irgendwie in Text zu dekodieren?

Danke im Voraus

Prinzipiell musst du es mit smarty evaluieren, dafür musst du eine View mit allen nötigen Objekten und Infos bauen.
Ich weiß nicht, ob es in der v6 mittlerweile einfacher ist, aber damals zu v4.10 Zeiten war das wirklich Paint in the *, deswegen hatte ich für solche Zwecke die URL der CMS Seite aus dem $oContent geholt und diese dann mit dem URL Parameter “?plain=1” aufgerufen, um an den fertig gerenderten Inhalt zu kommen.

1 Like

Leider scheint es keinen besseren Weg zu geben. Ich befürchtete, ich müsste es mit smarty evaluieren, hoffte aber trotzdem auf eine bessere Lösung. Trotzdem vielen Dank für die vorgeschlagene Lösung. :smiley:

okay, hier sind die Stolpersteine von damals, an die ich mich noch erinnern kann:

  1. man müsste CMS Seiten für Emails irgendwie erkennen, dort werden anderen Variablen als in CMS Seiten fürs Frontend benutzt, u.A. $shop und $user vs: $oxcmp_shop und $oxcmp_user

  2. ich habe es damals irgendwie so versucht (stark vereinfacht / pseudo-code):

$smarty = $this->getSmarty();
$html = $smarty->parseThroughSmarty($oContent->oxcontents__oxcontent->value);

das führte dazu, dass eine Base-View (damals oxUBase oder oxBase) und nicht content initialisiert wurde, d.h. dort stehen möglicherweise nicht alle Variablen und Funktionen zur Verfügung. In meinem Fall wollte ich damals die URL der CMS Seite abfragen, um diese als PDF zu exportieren, und das ging nicht.

1 Like

Es scheint es korrekt zu rendern, ignoriert jedoch die Snippets, aber ich hoffe, dass dies durch Übergeben des oActView-Parameters gelöst werden kann. Wie auch immer, du hast mich in die richtige Richtung gelenkt. Danke dir!

1 Like

Ok, ich habe es endlich geschafft, das zu bekommen, was ich wollte, indem ich die Komponenten von einem FrontendController-Objekt initialisiert und gerendert und es dann als oActView parameter übergeben habe:

 $oFrontendController = oxNew(FrontendController::class);
 $oFrontendController->init();
 $oFrontendController->render();
    
    //Decode the code snippets found inside the content
  $sContent = Registry::getUtilsView()->parseThroughSmarty($oContent->oxcontents__oxcontent->value, $oContent->getId(), $oFrontendController);
1 Like

Was genau möchtest du denn erreichen?
Wenn du das per API erreichen möchtest, dann baue doch einfach einen kleinen Controller der die Daten in JSON zurück liefert.

Habe aktuell bei mehreren Projekten laufen, wo die CMS Snippets per Ajax abgerufen werden.

Danke schon gelöst. Die JSON ist nicht das Problem, sondern die dynamischen Variablen von Visual CMS. Ich wollte, dass sie vorgerendert werden, sonst werden sie nur als einfacher Text angezeigt. Zum Beispiel: Ein Text [{$ oxcmp__shop-> etwas}]. Und ich wollte, dass oxcmp … der tatsächliche Wert ist, wenn es in einfachen Text konvertiert wird, was durch Vorrendern über smarty erfolgt.