从插件模板中检索内容元素字段?

Retrieve content element field from within a plugin template?

我正在修改一个插件的模板,我想从内容元素中检索一个字段。

使用 f:debug 我看到唯一可用的数据来自插件本身,none 来自内容元素。

有什么方法可以在插件设置中插入我需要的字段吗?

例如。类似于:

plugin.tx_plugin.settings {
    contentUid = TEXT
    contentUid.field = uid
}

在controller的相应方法(如listActionshowAction)中可以通过以下方式获取content元素的数据:

$contentObject = $this->configurationManager->getContentObject();
$this->view->assign('contentObjectData', $contentObject->data);

据我所知,您无法使用拼写错误获取该数据,但自从我一直在控制器中使用上述代码以来,我从来不需要它。

settings 默认没有 stdWrap 类型,只有 string。所以你不能使用 cObjects 作为值。

对于一个(或几个)设置,您可以自己在 method/class 中进行 stdWrap 处理:

$settingsAsTypoScriptArray = $this->objectManager->get(TypoScriptService::class)->convertPlainArrayToTypoScriptArray($this->settings);
$contentObj = $this->configurationManager->getContentObject();
if ($contentObj === null) {
  $contentObj = GeneralUtility::makeInstance(ContentObjectRenderer::class);
}
// now override the values in the settings array with the processed value
$contentUid = (int)$contentObj->stdWrap($settingsAsTypoScriptArray['contentUid'], $settingsAsTypoScriptArray['contentUid.']);

如果您想要stdWrap编辑很多设置,请查看EXT:news。 Georg 通过 useStdWrap 配置实现了一个有趣的概念。

我能想到的最好的方法是使用自定义 ViewHelper。类似于:

namespace MyVendor\MyExtension\ViewHelpers;

use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Extbase\Configuration\ConfigurationManager;
use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;

class ContentUidViewHelper extends AbstractViewHelper
{
    public static function renderStatic(array $arguments, \Closure $renderChildrenClosure, RenderingContextInterface $renderingContext)
    {
        $configurationManager = GeneralUtility::makeInstance(ConfigurationManager::class);
        return $configurationManager->getContentObject()->data['uid'];
    }
}

在您的流体模板中:

<mynamespace:contentUid />

这将获取内容元素的 uid,但您可以通过这种方式获取任何字段。只需将 data 数组的键更改为您需要的字段即可。