TYPO3:如何在自己的扩展中渲染tt_content文本元素?

7
我目前正在编写一个TYPO3扩展程序,它配置了一系列'tt_content' UID列表。这些指向文本类型的内容元素,我想通过我的扩展来呈现它们。
由于TYPO3在rich text编辑进入数据库时进行特殊的转换,并且在呈现到前端时再次进行转换,因此我不能仅输出'bodytext'字段的数据库内容。
我想按照通常由TYPO3呈现的方式来呈现这些文本。我该怎么做?
2个回答

10

PHP

这对我来说很有效;它会渲染具有给定ID的任何内容元素:

function getCE($id)
{
    $conf['tables'] = 'tt_content';
    $conf['source'] = $id;
    $conf['dontCheckPid'] = 1;
    return $GLOBALS['TSFE']->cObj->cObjGetSingle('RECORDS', $conf);
}

http://lists.typo3.org/pipermail/typo3-dev/2007-May/023467.html

这对于非缓存插件也有效。你会得到一个字符串,像是 <!--INT_SCRIPT.0f1c1787dc3f62e40f944b93a2ad6a81-->,但 TYPO3 会在下一次 INT 渲染过程中用真实内容替换它。

页面的所有元素

通过使用 CONTENT

use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer;

$cObjRend = GeneralUtility::makeInstance(ContentObjectRenderer::class);
$conf = [
    'table' => 'tt_content',
    'select.' => [
        'pidInList' => $myPageUid,
        'orderBy'   => 'sorting',
        'where' => '{#colPos}=0',
    ],
];
$renderedContent = $cObjRend->cObjGetSingle('CONTENT', $conf);

流体

如果您在一个流体模板中,VHS content.render 视图助手非常有用:

<v:content.render contentUids="{0: textelementid}"/>

如果您的fluidcontent元素本身具有网格,您可以使用flux自己的content.getcontent.render视图助手来渲染元素。
<f:section name="Configuration>
    ... <flux:grid.column name="teaser"/> ...
</f:section>
<f:section name="Main>
    <flux:content.render area="teaser"/>
<f:section>

6

几个月前我也遇到了同样的问题。现在我必须说我不是typo3开发者,所以我不知道这是否是正确的解决方案。

但是我使用了类似于以下代码的东西:

$output .= $this->pi_RTEcssText( $contentFromDb );

在我的扩展程序中,它可以正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接