TYPO3: использование ### PAGE_TSCONFIG_ID ### с addRecord в TCA - PullRequest
0 голосов
/ 15 мая 2019

Проблема связана с 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 для правильной работы процесса сохранения?

Ответы [ 2 ]

0 голосов
/ 01 июля 2019

Поработав довольно долго (на самом деле годы!), Мне наконец стало ясно, что поле, которому нужно присвоить PID_TSCONFIG_ID, должно быть тем, которое действует как опорная точка для m: м отношение. Или: противоположное поле. Еще более запутанная вещь в этом состоит в том, что по определению противоположное поле должно быть определено только на одной стороне отношений. Поэтому для «другой стороны» вам нужно взглянуть на имя связанной таблицы и использовать ее.

В приведенном выше примере это означало бы, что вместо pid следует использовать categories:

// TSconfig

TCEFORM {
  tx_rwfm_domain_model_website {
    categories.PAGE_TSCONFIG_ID = 12
  }
  tx_rwfm_domain_model_websitecategory {
    websites.PAGE_TSCONFIG_ID = 28
  }
}

Таким образом, записи сохраняются с заданными идентификаторами страниц. Спасибо, TYPO3, за предоставление такой загадочной документации по этой теме! :-( Постараюсь улучшить документ в этом аспекте как можно скорее.

0 голосов
/ 03 июня 2019

Насколько я читаю исходный код, это относится только к значениям, определенным в foreign_table_where.

...