如何在StandaloneView中呈现INT_SCRIPT?

时间:2017-03-21 19:20:35

标签: typo3 fluid extbase typo3-7.6.x typo3-extensions

我在独立视图中使用cObject ViewHelper渲染TypoScript对象。 TS Object从当前其他页面获取tt_content。但结果是INT_SCRIPT标记而不是真实内容。

这里是关于如何制作独立视图,模板和TypoScript的代码:

内部控制器:

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
    }
  }
}

流体:

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

我无法更改要缓存的所有未缓存元素(如内容元素/插件)。

那么如何解析包含非缓存内容的独立视图而不插入INT_SCRIPT标记呢?

谢谢!

1 个答案:

答案 0 :(得分:0)

找到解决方案。也许这不是解决这个问题的最佳方法。但目前工作正常。

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;
}

供您参考。我需要这个来处理页面中的内容并通过邮件发送它们或使用外部工具呈现pdf。但是某些内容或页面仅适用于当前用户(不是组或其他用户)。而且我不想在控制器内登录该用户或者其他人。我认为这是处理这个问题的最佳案例。

仍欢迎其他解决方案: - )