2017-03-21 2 views
0

Je rends dans une vue autonome un objet TypoScript avec cObject ViewHelper. Cet objet TS obtient tt_content à partir d'autres pages actuellement. Mais le résultat a les marqueurs INT_SCRIPT et pas le contenu réel.Comment rendre INT_SCRIPT dans StandaloneView?

voici mon code sur la façon de faire le point de vue autonome, le modèle et le TypoScript:

contrôleur Intérieur:

public function renderStandaloneView($template = 'View/Show', $variables = array(), $fileExt = 'html', $noCache = TRUE) { 
    if ($noCache === TRUE) $GLOBALS['TSFE']->set_no_cache(); 

    // Get standalone view 
    $configuration = $this->configurationManager->getConfiguration(ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK); 
    $view   = $this->objectManager->get(StandaloneView::class); 

    $view->getRequest()->setControllerExtensionName($this->extensionName); 
    $view->setFormat($fileExt); 
    $view->setLayoutRootPaths($configuration['view']['layoutRootPaths']); 
    $view->setPartialRootPaths($configuration['view']['partialRootPaths']); 
    $view->setTemplateRootPaths($configuration['view']['templateRootPaths']); 
    $view->setTemplate($template); 

    // Render view 
    $view->assignMultiple($variables); 

    return $view->render(); 
} 

TypoScript:

lib.myContent = COA 
lib.myContent { 
    10 = CONTENT 
    10 { 
    table = tt_content 

    select { 
     orderBy   = sorting 
     where   = 0 
     where.wrap  = colPos=| 
     pidInList.field = uid 
    } 
    } 
} 

Fluide:

<f:for each="{myvars}" as="myvar" iteration="it"> 
    <f:cObject typoscriptObjectPath="lib.myContent" data="{uid:'{myvar.uid}'}" /> 
</f:for> 

Je ne peux pas changer tous les éléments non attachés (comme les éléments de contenu/plugins) sur ces pages à mettre en cache.

Alors, comment puis-je analyser la vue autonome, y compris le contenu non mis en cache et ne pas insérer les marqueurs INT_SCRIPT?

Merci pour tout!

+2

Je ne pense pas que cela va résoudre l'ensemble de votre problème, mais quand même vous devriez commencer à supprimer '$ GLOBALS [ « TSFE »] -> set_no_cache()' de votre méthode. Cela désactivera tout le cache de page pour la demande en cours. N'utilisez pas ce 'set_no_cache' pour ** n'importe quoi ** que vous voulez libérer dans la nature! – undko

+0

Merci pour cet indice. Je l'ai changé. Comme prévu, cela n'a pas résolu mon problème. – HR123

+0

J'ai essayé de comprendre ce que vous essayez de faire ici au cours des 10 dernières minutes. Sans résultat. Cette condition: if ($ noCache === TRUE) $ GLOBALS ['TSFE'] -> set_no_cache(); de toute évidence ne peut pas travailler. Parce que si votre contenu est mis en cache une fois, la condition ne sera même plus vérifiée. L'appel à ExtensionUtility :: configurePlugin dans votre ext_localconf.php définit, par action, si le contenu est mis en cache. – j4k3

Répondre

0

Trouvé une solution. Peut-être que ce n'est pas la meilleure façon de résoudre ce problème. Mais pour le moment, cela fonctionne bien.

public function renderStandaloneView($template = 'View/Show', $variables = array(), $fileExt = 'html') { 
    // Get standalone view 
    $configuration = $this->configurationManager->getConfiguration(ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK); 
    $view   = $this->objectManager->get(StandaloneView::class); 

    $view->getRequest()->setControllerExtensionName($this->extensionName); 
    $view->setFormat($fileExt); 
    $view->setLayoutRootPaths($configuration['view']['layoutRootPaths']); 
    $view->setPartialRootPaths($configuration['view']['partialRootPaths']); 
    $view->setTemplateRootPaths($configuration['view']['templateRootPaths']); 
    $view->setTemplate($template); 

    // Render view 
    $view->assignMultiple($variables); 

    // Handle the INT_SCRIPT markers 
    $content = $view->render(); 
    $contentBak = $GLOBALS['TSFE']->content; 
    $GLOBALS['TSFE']->content = $content; 
    $GLOBALS['TSFE']->INTincScript(); 
    $content = $GLOBALS['TSFE']->content; 
    $GLOBALS['TSFE']->content = $contentBak; 
    unset($contentBak); 

    return $content; 
} 

Pour votre information. J'ai besoin de ceci pour manipuler le contenu des pages et les envoyer par la poste ou rendre un pdf avec un outil externe. Mais certains contenus ou pages ne sont disponibles que pour l'utilisateur actuel (pas un groupe ou un autre utilisateur). Et je ne voulais pas connecter cet utilisateur à l'intérieur du contrôleur ou autre. Je pense que c'est le meilleur cas pour gérer cela.

D'autres solutions sont toujours les bienvenus :-)

+1

Pourquoi ne l'avez-vous pas dit? Vous appelez StandaloneView juste pour appeler TypoScript pour le rendu du contenu. Merde sainte. Voici comment vous affichez le contenu depuis une extension: http://stackoverflow.com/questions/20283998/how-i-can-render-content-object-from-tt-content-i-my-extension-with-php -in-typo3 – j4k3

+0

Oui, je sais que ça ressemble à une "merde sacrée", juste pour rendre TypoScript. Je ne peux pas vous expliquer l'ensemble du projet, mais dans mon cas, il est nécessaire de l'utiliser de manière autonome. Merci beaucoup pour ton conseil de toute façon! Une autre manière (comme votre méthode) pourrait être d'appeler contentRendererObject et d'utiliser FLUIDTEMPLATE dans l'objet TS. – HR123