在tx_news中,所有插件设置也可以通过TypoScript设置,方法是将其名称添加到overrideFlexformSettingsIfEmpty
。顾名思义,如果任何插件化身的相应Flexform字段留空,则仅使用这些基于TS的设置。这就是我想要的和我需要的。它允许在每个插件元素中覆盖的基本TS配置。
现在问题在于:
由于我的TS默认值需要更复杂的计算,我还会为某些tx_news设置字段激活useStdWrap
。但我发现总是会使用一个活跃的stdWrap
- 无论是否有Flexform设置。
我需要的是使用TS stdWrap计算默认值的可能性,但是如果定义了Flexform设置,它应该总是覆盖TS设置(无论它们的计算有多复杂以及它是否包含stdWrap操作)。
以下是一个例子:
plugin.tx_news.settings {
overrideFlexformSettingsIfEmpty := addToList(categories)
useStdWrap := addToList(categories)
categories.data = GP:cat
categories.ifEmpty = 1
}
我希望这个TS可以从查询字符串参数(cat)设置任何新闻插件的类别,然后回退到类别1,但如果插件本身没有设置类别,则仅
但stdWrap
操作(.data和.ifEmpty)始终启动,无法再使用Flexform设置。
有没有办法解决这个问题?
答案 0 :(得分:1)
没有办法为每个人解决这个问题,因为如果它会被改变,会有其他缺点。
一种解决方案是使用钩子$GLOBALS['TYPO3_CONF_VARS']['EXT']['news']['Controller/NewsController.php']['overrideSettings']
,您可以在其中操作具有所需内容的PHP设置。
答案 1 :(得分:1)
我接受了Georgs的回答,但选择了另一种方法来解决这个问题:
我创建了一个PHP类,它读取并返回任何给定tx_news插件化身的类别设置,并允许将它们合并回useStdWrap过程。
要使用此方法,最好创建一个基本的自定义扩展,并将PHP类文件放入其Classes文件夹中。这是类文件的代码,存储为/your_extension/Classes/TsSetupHelper.php:
<?php
namespace YourVendor\YourExtension;
class TsSetupHelper {
/**
* Reference to the parent (calling) cObject set from TypoScript
*/
public $cObj;
/**
* Return the categories chosen in a tx_news plugin content element.
* Can be used in TS Setup to stdWrap the categories without losing the settings defined within a plugin incarnation.
*
* @param string Empty string (no content to process)
* @param array TypoScript configuration
* @return string return categorie value list from plugin in page, e.g.: '1,3,4'
*/
public function getNewsPluginCategory($content, $conf) {
$newsPluginFlexformArr = \TYPO3\CMS\Core\Utility\GeneralUtility::xml2array( $this->cObj->data['pi_flexform'] );
$newsPluginCategories = $newsPluginFlexformArr['data']['sDEF']['lDEF']['settings.categories']['vDEF'];
return $newsPluginCategories;
}
}
有了这个类,您可以在TS安装程序中读取tx_news插件中选择的类别,使用stdWrap处理它们并将它们作为更新的类别值推送回插件。
以下是相应TS设置代码的示例。
plugin.tx_news.settings {
overrideFlexformSettingsIfEmpty := addToList(categories,categoryConjunction)
useStdWrap := addToList(categories)
categoryConjunction = or
# pre fill categories with value from plugin in page
categories.cObject = USER
categories.cObject {
userFunc = YourVendor\YourExtension\TsSetupHelper->getNewsPluginCategory
}
# only if no categories are chosen within plugin,
# use TS to define categories:
categories.ifEmpty {
# get cat from parameter in query
data = GP:cat
# ignore cat parameter if page layout 5 is chosen in page properties
override = 1,2,3,4,5,6,7,8,9,10
override.if.value.data = page:layout
override.if.equals = 5
# default categories to 3 if cat param is not set
ifEmpty = 3
}
}
我们在这里做了很多花哨的事情。这只是一个例子。重要的是,如果插件中没有设置任何类别,则插件中的类别设置优先,并且仅使用块categories.ifEmpty{...}
中的所有TS设置。
撰写本文时的版本:TYPO3 7.6.11,tx_news 5.2.0