在 TCA 中多次使用一毫米 table
multiple use of one mm table in TCA
我正在使用扩展新闻和事件新闻,所以如果现在有两个不同的 "types" 新闻。
新闻扩展附带相关字段 related_from。
我还想要字段 related_event 和 related_event_from。
原来的相关字段应该存储与新闻的关系,即新闻,新的字段与新闻的关系,即事件。
区别在于 "is_event" 字段,因此我将 foreign_table_where 子句添加到 TCA。
为了存储数据,我必须使用相同的 mm table。不幸的是,在保存时只有第二个字段受到尊重,第一个字段没有。
如何同时存储两者?我需要使用 TCA 挂钩还是可以使用标准 TCA 设置或..?
我目前的 TCA:
'related' => [
'exclude' => 1,
'l10n_mode' => 'mergeIfNotBlank',
'label' => 'LLL:EXT:news/Resources/Private/Language/locallang_db.xlf:tx_news_domain_model_news.related',
'config' => [
'type' => 'select',
'allowed' => 'tx_news_domain_model_news',
'foreign_table' => 'tx_news_domain_model_news',
'foreign_table_where' => 'AND tx_news_domain_model_news.deleted = 0 AND tx_news_domain_model_news.hidden = 0 AND tx_news_domain_model_news.is_event = 0 ORDER BY tx_news_domain_model_news.datetime DESC',
'MM_opposite_field' => 'related_from',
'size' => 5,
'minitems' => 0,
'maxitems' => 100,
'MM' => 'tx_news_domain_model_news_related_mm',
'wizards' => array(
'suggest' => array(
'type' => 'suggest',
'default' => array(
'searchWholePhrase' => TRUE
)
),
),
]
],
'related_event' => [
'exclude' => 1,
'l10n_mode' => 'mergeIfNotBlank',
'label' => 'LLL:EXT:dreipc_myadlershof/Resources/Private/Language/locallang_db.xlf:tx_dreipcmyadlershof_domain_model_news.related_event',
'config' => [
'type' => 'select',
'allowed' => 'tx_news_domain_model_news',
'foreign_table' => 'tx_news_domain_model_news',
'foreign_table_where' => 'AND tx_news_domain_model_news.deleted = 0 AND tx_news_domain_model_news.hidden = 0 AND tx_news_domain_model_news.is_event = 1 AND tx_news_domain_model_news.enable = 1 AND tx_news_domain_model_news.sample = 0 ORDER BY tx_news_domain_model_news.datetime DESC',
'MM_opposite_field' => 'related_event_from',
'size' => 5,
'minitems' => 0,
'maxitems' => 100,
'MM' => 'tx_news_domain_model_news_related_mm',
'wizards' => array(
'suggest' => array(
'type' => 'suggest',
'default' => array(
'searchWholePhrase' => TRUE
)
),
),
]
],
你应该 MM_match_fields 试试 https://docs.typo3.org/typo3cms/TCAReference/ColumnsConfig/Type/Select.html#mm-match-fields
这是一个例子:
https://typo3blogger.de/tca-advanced-mm_match_fields-subquery-sorting/
通过使用 MM_match_fields 这两个字段的工作 TCA 现在看起来像:
'related' => [
'label' => 'LLL:EXT:dreipc_myadlershof/Resources/Private/Language/locallang_db.xlf:tx_dreipcmyadlershof_domain_model_news.related',
'config' => [
'type' => 'select',
'renderType' => 'selectMultipleSideBySide',
'foreign_table' => 'tx_news_domain_model_news',
'foreign_table_where' => 'AND tx_news_domain_model_news.uid != ###THIS_UID### AND tx_news_domain_model_news.deleted = 0 AND tx_news_domain_model_news.hidden = 0 AND tx_news_domain_model_news.is_event = 0 AND tx_news_domain_model_news.enable = 1 AND tx_news_domain_model_news.sample = 0 ORDER BY tx_news_domain_model_news.datetime DESC',
'MM' => 'tx_news_domain_model_news_related_mm',
'MM_match_fields' => [
'fieldname' => 'related',
],
'size' => 20,
'minitems' => 0,
'maxitems' => 100,
'wizards' => [
'suggest' => [
'type' => 'suggest',
'default' => [
'searchWholePhrase' => true
]
],
],
]
],
'related_event' => [
'label' => 'LLL:EXT:dreipc_myadlershof/Resources/Private/Language/locallang_db.xlf:tx_dreipcmyadlershof_domain_model_news.related_event',
'config' => [
'type' => 'select',
'renderType' => 'selectMultipleSideBySide',
'foreign_table' => 'tx_news_domain_model_news',
'foreign_table_where' => 'AND tx_news_domain_model_news.uid != ###THIS_UID### AND tx_news_domain_model_news.deleted = 0 AND tx_news_domain_model_news.hidden = 0 AND tx_news_domain_model_news.is_event = 1 AND tx_news_domain_model_news.enable = 1 AND tx_news_domain_model_news.sample = 0 ORDER BY tx_news_domain_model_news.datetime DESC',
'MM' => 'tx_news_domain_model_news_related_mm',
'MM_match_fields' => [
'fieldname' => 'related_event',
],
'size' => 20,
'minitems' => 0,
'maxitems' => 100,
'wizards' => [
'suggest' => [
'type' => 'suggest',
'default' => [
'searchWholePhrase' => true,
'addWhere' => ' AND tx_news_domain_model_news.uid != ###THIS_UID### AND tx_news_domain_model_news.is_event = 1'
]
]
],
]
],
为此,我们还需要将字段 fieldname 添加到 table tx_news_domain_model_news_related_mm
我正在使用扩展新闻和事件新闻,所以如果现在有两个不同的 "types" 新闻。
新闻扩展附带相关字段 related_from。
我还想要字段 related_event 和 related_event_from。 原来的相关字段应该存储与新闻的关系,即新闻,新的字段与新闻的关系,即事件。 区别在于 "is_event" 字段,因此我将 foreign_table_where 子句添加到 TCA。
为了存储数据,我必须使用相同的 mm table。不幸的是,在保存时只有第二个字段受到尊重,第一个字段没有。
如何同时存储两者?我需要使用 TCA 挂钩还是可以使用标准 TCA 设置或..?
我目前的 TCA:
'related' => [
'exclude' => 1,
'l10n_mode' => 'mergeIfNotBlank',
'label' => 'LLL:EXT:news/Resources/Private/Language/locallang_db.xlf:tx_news_domain_model_news.related',
'config' => [
'type' => 'select',
'allowed' => 'tx_news_domain_model_news',
'foreign_table' => 'tx_news_domain_model_news',
'foreign_table_where' => 'AND tx_news_domain_model_news.deleted = 0 AND tx_news_domain_model_news.hidden = 0 AND tx_news_domain_model_news.is_event = 0 ORDER BY tx_news_domain_model_news.datetime DESC',
'MM_opposite_field' => 'related_from',
'size' => 5,
'minitems' => 0,
'maxitems' => 100,
'MM' => 'tx_news_domain_model_news_related_mm',
'wizards' => array(
'suggest' => array(
'type' => 'suggest',
'default' => array(
'searchWholePhrase' => TRUE
)
),
),
]
],
'related_event' => [
'exclude' => 1,
'l10n_mode' => 'mergeIfNotBlank',
'label' => 'LLL:EXT:dreipc_myadlershof/Resources/Private/Language/locallang_db.xlf:tx_dreipcmyadlershof_domain_model_news.related_event',
'config' => [
'type' => 'select',
'allowed' => 'tx_news_domain_model_news',
'foreign_table' => 'tx_news_domain_model_news',
'foreign_table_where' => 'AND tx_news_domain_model_news.deleted = 0 AND tx_news_domain_model_news.hidden = 0 AND tx_news_domain_model_news.is_event = 1 AND tx_news_domain_model_news.enable = 1 AND tx_news_domain_model_news.sample = 0 ORDER BY tx_news_domain_model_news.datetime DESC',
'MM_opposite_field' => 'related_event_from',
'size' => 5,
'minitems' => 0,
'maxitems' => 100,
'MM' => 'tx_news_domain_model_news_related_mm',
'wizards' => array(
'suggest' => array(
'type' => 'suggest',
'default' => array(
'searchWholePhrase' => TRUE
)
),
),
]
],
你应该 MM_match_fields 试试 https://docs.typo3.org/typo3cms/TCAReference/ColumnsConfig/Type/Select.html#mm-match-fields
这是一个例子: https://typo3blogger.de/tca-advanced-mm_match_fields-subquery-sorting/
通过使用 MM_match_fields 这两个字段的工作 TCA 现在看起来像:
'related' => [
'label' => 'LLL:EXT:dreipc_myadlershof/Resources/Private/Language/locallang_db.xlf:tx_dreipcmyadlershof_domain_model_news.related',
'config' => [
'type' => 'select',
'renderType' => 'selectMultipleSideBySide',
'foreign_table' => 'tx_news_domain_model_news',
'foreign_table_where' => 'AND tx_news_domain_model_news.uid != ###THIS_UID### AND tx_news_domain_model_news.deleted = 0 AND tx_news_domain_model_news.hidden = 0 AND tx_news_domain_model_news.is_event = 0 AND tx_news_domain_model_news.enable = 1 AND tx_news_domain_model_news.sample = 0 ORDER BY tx_news_domain_model_news.datetime DESC',
'MM' => 'tx_news_domain_model_news_related_mm',
'MM_match_fields' => [
'fieldname' => 'related',
],
'size' => 20,
'minitems' => 0,
'maxitems' => 100,
'wizards' => [
'suggest' => [
'type' => 'suggest',
'default' => [
'searchWholePhrase' => true
]
],
],
]
],
'related_event' => [
'label' => 'LLL:EXT:dreipc_myadlershof/Resources/Private/Language/locallang_db.xlf:tx_dreipcmyadlershof_domain_model_news.related_event',
'config' => [
'type' => 'select',
'renderType' => 'selectMultipleSideBySide',
'foreign_table' => 'tx_news_domain_model_news',
'foreign_table_where' => 'AND tx_news_domain_model_news.uid != ###THIS_UID### AND tx_news_domain_model_news.deleted = 0 AND tx_news_domain_model_news.hidden = 0 AND tx_news_domain_model_news.is_event = 1 AND tx_news_domain_model_news.enable = 1 AND tx_news_domain_model_news.sample = 0 ORDER BY tx_news_domain_model_news.datetime DESC',
'MM' => 'tx_news_domain_model_news_related_mm',
'MM_match_fields' => [
'fieldname' => 'related_event',
],
'size' => 20,
'minitems' => 0,
'maxitems' => 100,
'wizards' => [
'suggest' => [
'type' => 'suggest',
'default' => [
'searchWholePhrase' => true,
'addWhere' => ' AND tx_news_domain_model_news.uid != ###THIS_UID### AND tx_news_domain_model_news.is_event = 1'
]
]
],
]
],
为此,我们还需要将字段 fieldname 添加到 table tx_news_domain_model_news_related_mm