Проблема связана с TCA и его опцией addRecord
, которая должна сохранять новые записи в определенный pid, настроенный ###PAGE_TSCONFIG_ID###
. (TYPO3 8.7.24, php 7.2)
Расширение websites
имеет таблицы tx_rwfm_domain_model_websitecategory
и tx_rwfm_domain_model_website
, связанные через таблицу m: m. Идея состоит в том, чтобы создавать категории веб-сайтов, а затем собирать веб-сайты, которые относятся к категории. В BE категории (pid = 24), а также веб-сайты (pid = 12) имеют свои собственные папки в дереве сайтов. websitecategory
имеет multiSelectField для простого выбора веб-сайтов и назначения их в соответствующую категорию. А также «сайт» имеет multiSelectField для категорий, чтобы легко назначить веб-сайт нескольким категориям.
Пока все работает нормально.
Теперь я сталкиваюсь с этим сценарием:
Я хочу добавить веб-сайты в категории, поэтому я открываю страницу папки websitecategory
в виде списка.
Теперь я понимаю, что сайт, который я хочу добавить, еще не создан.
Вместо того, чтобы закрывать страницу websitecategory
, я нажимаю «addRecord» рядом с multiSelectField websites
(соединение m: m)
Открывается новое окно для создания нового веб-сайта. «Сохранить и закрыть» возвращает меня на страницу категории веб-сайтов, где я вижу, что новый веб-сайт был добавлен в список выбора.
Дело в том, что новый веб-сайт должен быть создан на отдельной странице папки (pid = 12), а НЕ на странице категории веб-сайта (pid = 24). Для этого есть свойство ###PAGE_TSCONFIG_ID###
, которое я пытаюсь настроить следующим образом:
// TCA of websitecategory
return [
[...],
'columns' => [
'websites' => [
'config' => [
'type' => 'select',
'renderType' => 'selectMultipleSideBySide',
'enableMultiSelectFilterTextfield' => true,
'foreign_table' => 'tx_rwfm_domain_model_website',
'foreign_table_where' => 'AND tx_rwfm_domain_model_website.sys_language_uid IN (-1,0) ORDER BY tx_rwfm_domain_model_website.title ASC',
'MM' => 'tx_rwfm_domain_model_website_websitecategory_mm',
'MM_opposite_field' => 'categories',
'fieldControl' => [
'editPopup' => [...],
'addRecord' => [
'disabled' => false,
'options' => [
'setValue' => 'prepend',
'title' => 'Create a new website record',
'table' => 'tx_rwfm_domain_model_website',
'pid' => '###PAGE_TSCONFIG_ID###',
],
],
]
]
]
[...]
]
Следуя документации https://docs.typo3.org/typo3cms/TSconfigReference/8.7/PageTsconfig/TCEform/Index.html?highlight=page_tsconfig_id
Я добавляю это на свою страницу TSconfig:
// TSconfig
TCEFORM {
tx_rwfm_domain_model_website {
pid.PAGE_TSCONFIG_ID = 12
}
tx_rwfm_domain_model_websitecategory {
pid.PAGE_TSCONFIG_ID = 28
}
}
К сожалению, это не работает. Вместо этого TYPO3 пытается добавить его к [root_level] 0, where the table is not allowed
.
Однако, если я заменим ###PAGE_TSCONFIG_ID###
в TCA
-> addRecord
жестко запрограммированным значением pid, 12
, веб-сайт действительно сохранится в соответствующей папке страницы с pid 12.
Как мне настроить TSconfig для правильной работы процесса сохранения?