TYPO3 TCA selectMultiple config

avatar
Toke Herkild
9 августа 2021 в 06:08
109
0
0

У меня проблема с TYPO3 selectField, selectMultipleSideBySide.

Я настроил поле следующим образом:

$tmpColumns = [
    'tx_tcademo_list' => [
        'label' => 'Items',
        'config' => [
            'type' => 'select',
            'renderType' => 'selectMultipleSideBySide',
            'foreign_table' => 'tx_tcademo_domain_model_item',
            'MM' => 'tx_tcademo_record_item_mm',
            'MM_hasUidField' => true,
            'MM_match_fields' => [
                'tablenames' => 'fe_users',
                'fieldnames' => 'tx_tcademo_items',
            ],
            'minitems' => 0,
            'maxitems' => 99999,
        ],
    ],
];

\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns('fe_users', $tmpColumns);
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes('fe_users', 'tx_tcademo_list');

Проблема: Поле добавляется в fe_users правильно, и элементы могут быть выбраны, как и ожидалось, и они сохраняются в отношении БД MM, но при перерисовке формы выбранные элементы не помечаются как выбранные и будут перезаписаны при следующем сохранении.

Ссылка на расширение, демонстрирующее проблему: Демонстрационное расширение TCA

Источник
Julian Hofmann
9 августа 2021 в 07:18
0

Вы добавляете поле tx_tcademo_list в fe_users, но ищете совпадающие значения для fe_users.tx_tcademo_items...

Toke Herkild
9 августа 2021 в 08:14
0

Кажется, что MM_match_fields работает не так, как описано в документации? docs.typo3.org/m/typo3/reference-tca/10.4/en-us/ColumnsConfig/…

Julian Hofmann
9 августа 2021 в 08:36
0

MM_match_fields настраивает фильтр для отношения к MM. В MM-таблице может быть столбец tablenames и fieldnames, так как таблица может использоваться для разных отношений к tx_tcademo_domain_model_item. Ваша конфигурация MM_match_fields соответствует отношениям MM, имеющим tablenames='fe_users' и fieldnames='tx_tcademo_items'. Но ваше отношение к файлу tx_tcademo_list, а не к tx_tcademo_items. Значит, ваше состояние не соответствует.

Toke Herkild
9 августа 2021 в 12:35
0

Мне жаль сообщать вам, но это не имеет абсолютно никакого значения. Как только активируется MM_match_fields, отношение MM перестает работать. Проходя через xDebug, я обнаружил, что когда используется MM_match_fields, внешняя_таблица и локальная_таблица кажутся переключенными, или при запуске отладки PHP, когда RelationHandler завершает foereign_table, равно local_table.

Julian Hofmann
9 августа 2021 в 13:39
0

Нет, переключение направления MM_opposite_field. MM_match_fields добавляет дополнительные операторы AND в запрос SQL: github.com/TYPO3/typo3/blob/master/typo3/sysext/core/Classes/…

Toke Herkild
10 августа 2021 в 08:18
0

Эта часть работает как надо, но мне еще предстоит выяснить, почему local_table запрашивается с использованием результирующего набора MM, а не external_table.

Ответы (0)