我已經接受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
嗨喬治,我已經接受了你的回答。但我不同意你的評估,沒有辦法解決這個問題。我已經在下面發佈了我自己的解決方案,它可以將其全部添加到EXT新聞中。您需要確保所有useStdWrapped字段在插件中定義的設置都被設置爲通過stdWrap處理的TS對象的默認內容。這不會與任何現有的新聞實現衝突,因爲useStdWrapped字段的默認內容無論如何都被破壞了(如問題[#126](https://github.com/georgringer/news/issues/126)中所述)。 – Jpsy