У меня проблема с 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
Вы добавляете поле
tx_tcademo_list
вfe_users
, но ищете совпадающие значения дляfe_users.tx_tcademo_items
...Кажется, что MM_match_fields работает не так, как описано в документации? docs.typo3.org/m/typo3/reference-tca/10.4/en-us/ColumnsConfig/…
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. Значит, ваше состояние не соответствует.Мне жаль сообщать вам, но это не имеет абсолютно никакого значения. Как только активируется MM_match_fields, отношение MM перестает работать. Проходя через xDebug, я обнаружил, что когда используется MM_match_fields, внешняя_таблица и локальная_таблица кажутся переключенными, или при запуске отладки PHP, когда RelationHandler завершает foereign_table, равно local_table.
Нет, переключение направления
MM_opposite_field
.MM_match_fields
добавляет дополнительные операторыAND
в запрос SQL: github.com/TYPO3/typo3/blob/master/typo3/sysext/core/Classes/…Эта часть работает как надо, но мне еще предстоит выяснить, почему local_table запрашивается с использованием результирующего набора MM, а не external_table.