Как расширить общие элементы содержимого TYPO3 с помощью pi_flexform с помощью перезаписи TCA? - PullRequest
0 голосов
/ 27 апреля 2019

Я хочу расширить некоторые элементы содержимого TYPO3 полем для ввода пользовательского класса CSS. Поэтому я подумал, что поле pi_flexform - это то место, куда нужно пойти, поскольку оно дает гибкость, позволяющую добавлять дополнительные значения позже. (Нет, я не хочу создавать Layout-Options для всех классов CSS)

В перезаписи TCA для - скажем, например, «texpic» - я добавил следующую структуру:

$GLOBALS['TCA']['tt_content']['types']['textpic'] = array_replace_recursive(
  $GLOBALS['TCA']['tt_content']['types']['textpic'], [
    'columns' => [
      'pi_flexform' => [
        'l10n_display' => 'hideDiff',
        'label' => 'LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:pi_flexform',
        'config' => [
          'type' => 'flex',
          'ds_pointerField' => 'list_type,CType',
          'ds' => [
            'default' => '
              <T3DataStructure>
                <ROOT>
                  <type>array</type>
                  <el>
                    <customClass>
                      <TCEforms type="array">
                        <label>My custom CSS classes</label>
                        <config type="array">
                          <type>input</type>
                          <eval>trim</eval>
                        </config>
                      </TCEforms>
                    </customClass>
                  </el>
                </ROOT>
              </T3DataStructure>
            '
          ],
          'search' => [
            'andWhere' => '{#CType}=\'list\''
          ]
        ]
      ]
    ],
    'showitem' => '
      --div--;LLL:EXT:core/Resources/Private/Language/Form/locallang_tabs.xlf:general,
      --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.general;general,
      --palette--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:palette.header;header_minimal,
      pi_flexform,
      [...]
  ']
);

Поле pi_flexform отображается в бэкэнде, но моя конфигурация XML сверху не оценивается. Он показывает Plugin Options [pi_flexform] The Title:, что является демонстрационным значением из файла typo3\sysext\frontend\Configuration\TCA\tt_content.php. Так что, похоже, мой код не полностью перезаписан, работает только раздел «showitem». В чем может быть проблема здесь?

РЕДАКТИРОВАТЬ 1: Вскоре после того, как я опубликовал вопрос, я обнаружил свою ошибку: определение столбцов должно идти прямо в раздел tt_content:

$GLOBALS['TCA']['tt_content']['columns']['pi_flexform'] = [...]

К сожалению, это означает, что это повлияет на ВСЕ элементы tt_content, за исключением того, что другие плагины перезапишут это снова. Таким образом, остается вопрос: существует ли простой способ расширения стандартных элементов содержимого без написания собственного расширения или добавления полей базы данных?

1 Ответ

0 голосов
/ 27 апреля 2019

Нашли простое решение! Просто добавьте FlexForm XML непосредственно в addPiFlexFormValue() и укажите элемент содержимого в качестве 3-го параметра:

\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPiFlexFormValue(
    '*',
    '<T3DataStructure>
  <ROOT>
  <type>array</type>
    <el>
      <customClass>
        <TCEforms type="array">
          <label>My custom CSS classes</label>
          <config type="array">
            <type>input</type>
            <eval>trim</eval>
          </config>
        </TCEforms>
      </customClass>
    </el>
  </ROOT>
</T3DataStructure>',
    'textpic'
);

Это так устроено: тратить часы на попытки, и вдруг после публикации вопроса решение приходит само собой.

...