Zum Inhalt springen

Extbase render Partials im Controller mit Ajax

Erstellt am 21. Juni 2012 · 6 Antworten · letzte Antwort am 25. Juni 2012

Tags: Frage

deus ·

Hallo.
Ich habe folgendes Problem bei meiner Extbase-Extension:
Ich würde gerne bei einem Ajax-Request ein Partial rendern und zurückgeben.
Habs mal so versucht:

$res = t3lib_extMgm::extPath($this->controllerContext->getRequest()->getControllerExtensionKey()) . 'Resources/Private/';
$view->setLayoutRootPath($res);
$view->setPartialRootPath($res . 'Partials/');
			$view->setRenderingContext($this->objectManager->create('Tx_Fluid_Core_Rendering_RenderingContext'));
$view->setControllerContext($this->controllerContext);

$arguments = array();			
$template = $view->renderPartial("DeclineReason/Declinelist", NULL, $arguments);

Irgendwie komme ich da nicht auf eine Lösung. Hat jemand von euch eine Idee?

deus ·

Hallo aemka.
Vielen Dank für deine Antwort. Habe es jetzt mal so versucht:

im Controller in einer Action habe ich folgenden Code:

$arguments = array();			
			
$view = t3lib_div::makeInstance('Tx_Fluid_View_StandaloneView');
$res = t3lib_extMgm::extPath($this->controllerContext->getRequest()->getControllerExtensionKey()) . 'Resources/Private/';
$view->setLayoutRootPath($res);
$view->setPartialRootPath($res . 'Partials/');
			$view->setRenderingContext($this->objectManager->create('Tx_Fluid_Core_Rendering_RenderingContext'));
$view->setControllerContext($this->controllerContext);
$template = $view->renderPartial("DeclineReason/Declinelist", NULL, $arguments);
echo json_encode($template);

Leider bekomme ich als Fehlermeldung immer:

<b>Fatal error</b>:  __clone method called on non-object in <b>/usr/www/users/ltcdwu/typo3/sysext/fluid/Classes/View/AbstractTemplateView.php</b> on line <b>312</b><br />

Im AbstractTemplateView.php steht an der Zeile 312 folgendes:

$renderingContext = clone $this->getCurrentRenderingContext();

Hat noch wer dazu einen Tip oder ein komplettes Beispiel wie der Controller-Code aussehen muss, damit Partials mit Fluid gerendert werden können.

aemka ·

Gib doch "Fluid Standalone View" mal in Google ein - gleich der erste Treffer erklärt es im Detail.

deus ·

So jetzt habe ich es mal so halbwegs hinbekommen:

$view = t3lib_div::makeInstance('Tx_Fluid_View_StandaloneView');
$res = t3lib_extMgm::extPath($this->controllerContext->getRequest()->getControllerExtensionKey()) . 'Resources/Private/';
$view->setLayoutRootPath($res.'Layouts/');
$view->setTemplatePathAndFilename($res . 'Templates/DeclineReason/Declinelist.html');
$template = $view->render();

Ich war immer so auf die Partials versteift.

Jetzt habe ich aber folgendes Problem:
Wenn ich in "Declinelist.html" Viewhelper zB: <f:select ... /> verwenden möchte, bekomme ich folgende Fehlermeldung (zu der ich nichts in google finden kann)
#1289386765: Could not analyse class:Tx_Fluid_ViewHelpers_SelectViewHelper maybe not loaded or no autoloader?

Wie kann man den Fluid-Autoloader aktiviren?

deus ·

So jetzt klappt alles.
Habe nochmal alle Caches gelöscht und die View nochmal neu erstellt und siehe da, jetzt funktioniert es!

Vielen Dank nochmal aemka!

aemka ·

gleiche noch mal deinen COde mit dem ersten Google Treffer zu dem Thema ab - da sind noch Unterschiede.