Falk
Falk

Reputation: 633

multiple use of one mm table in TCA

I'm using the extensions news and eventnews, so if have two different "types" of news now.

The news extension comes with the fields related and related_from.

I want to have also fields related_event and related_event_from. The original related fields should store relations to news which are just news, the new fields relations to news which are events. The difference is made in field "is_event", so I added the foreign_table_where clause to the TCA.

For storing the data I have to use the same mm table. Unfortunately on saving only the second field is respected, the first one is not.

How can I achieve storing both? Will I need to use a TCA hook or is it possible with standard TCA settings or ..?

My TCA as of now:

'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
                )
            ),
        ),

    ]
],

Upvotes: 1

Views: 2334

Answers (2)

Falk
Falk

Reputation: 633

The by using MM_match_fields working TCA for this both fields now looks like:

'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'
                    ]
                ]
            ],
        ]
    ],

For that we also needed to add the field fieldname to the table tx_news_domain_model_news_related_mm

Upvotes: 2

Related Questions