从插件模板中检索内容元素字段?
Retrieve content element field from within a plugin template?
我正在修改一个插件的模板,我想从内容元素中检索一个字段。
使用 f:debug
我看到唯一可用的数据来自插件本身,none 来自内容元素。
有什么方法可以在插件设置中插入我需要的字段吗?
例如。类似于:
plugin.tx_plugin.settings {
contentUid = TEXT
contentUid.field = uid
}
在controller的相应方法(如listAction
或showAction
)中可以通过以下方式获取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
数组的键更改为您需要的字段即可。
我正在修改一个插件的模板,我想从内容元素中检索一个字段。
使用 f:debug
我看到唯一可用的数据来自插件本身,none 来自内容元素。
有什么方法可以在插件设置中插入我需要的字段吗?
例如。类似于:
plugin.tx_plugin.settings {
contentUid = TEXT
contentUid.field = uid
}
在controller的相应方法(如listAction
或showAction
)中可以通过以下方式获取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
数组的键更改为您需要的字段即可。