Benutzer: Gast
Eintrag: Extbase: contentObjectRenderer in Controller nutzen

Extbase: contentObjectRenderer in Controller nutzen

von: marcel
Kreise: Typo3

In einer Extbase-Extension mit Formular war es nötig, Formularfelder per TypoScript vorauszufüllen. Dazu definierte ich im Plugin-Setup Content-Objekte und führte diese in der Action mit Hilfe des ContentObjectRenderer aus.

Plugin-Setup

Code: TypoScript (TS)
plugin.tx_myextension {
	settings {
		presetValues {
			theFieldIdentifier = TEXT
			theFieldIdentifier {
				value = This is the presetted value
			}
			thePageTitleField = TEXT
			thePageTitleField {
				field = subtitle // title
			}
		}
	}
}

\VENDOR\MyExtension\Controller\MyController->myAction()

Code: PHP
if (is_array($this->settings['presetValues'])) {
  // generate a new content-object-renderer
  $cObjRenderer = new \TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer();
  
  // loop all presets
  foreach ($this->settings['presetValues'] as $key => $presetValue) {
    if (is_array($presetValue) && $presetValue['_typoScriptNodeValue'] && array_key_exists($key, $this->fields)) {
      // render the node, which is hopefully a cObj
      $value = $cObjRenderer->getContentObject($presetValue['_typoScriptNodeValue'])->render($presetValue);

      // set the preset-value in field
      $this->fields[$key]['value'] = $value;
   }
  }
}

$this->view->assign("fields", $this->fields);

Fluid Example

Code: XML XHTML XSLT HTML
<f:form.textfield name="{fields.thePageTitleField.name}" value="{fields.thePageTitleField.value} />
Es gibt noch keine Kommentare.