многократное использование таблицы 1 мм в ТСА

Я использую расширения news и eventnews, так что теперь у вас есть два разных «типа» новостей.

Новостное расширение поставляется с полями related и related_from.

Я хочу также иметь поля related_event и related_event_from. Исходные связанные поля должны хранить отношения к новостям, которые являются просто новостями, новые поля относятся к новостям, которые являются событиями. Разница заключается в поле «is_event», поэтому я добавил в TCA предложение Foreign_table_where.

Для хранения данных я должен использовать ту же таблицу mm. К сожалению, при сохранении учитывается только второе поле, первое — нет.

Как я могу добиться хранения обоих? Нужно ли будет использовать хук 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
                )
            ),
        ),

    ]
],

person Falk    schedule 18.03.2018    source источник


Ответы (2)


Вы должны попробовать 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/

person Jo Hasenau    schedule 18.03.2018
comment
Спасибо за это - person Falk; 18.03.2018

При использовании 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 в таблицу tx_news_domain_model_news_related_mm.

person Falk    schedule 19.03.2018