Несколько контроллеров в расширении

Действительно ли возможно написать расширение с несколькими контроллерами, которое будет работать автоматически на всех сайтах? Я хочу расширение, которое будет вызывать контроллер A при открытии сайта A, контроллер B при открытии сайта B и так далее.

Я видел здесь https://docs.typo3.org/typo3cms/extensions/news/ что использование нескольких контроллеров возможно с помощью FlexForms и SwitchableControllerActions. Дело в том, что когда я добавляю плагин на сайт, я должен указать, какой контроллер должен работать для этого сайта. Мне нужна конфигурация непосредственно в расширении, а не из бэкэнда typo3.

Я знаю, что могу использовать идентификатор страницы и вызывать функцию на его основе, но я пытаюсь избежать этого и ищу лучшее решение.


person dvckbass    schedule 13.05.2019    source источник


Ответы (1)


Конечно, это возможно. Здесь вам нужно использовать FlexForms, который в основном является полем на основе XML в вашей записи tt_content. Таким образом, вы можете сконфигурировать свой плагин прямо в записи контента. Обычно используется для установки ограничения на количество записей, сортировки и т. Д. Но также для установки любой разрешенной комбинации контроллер-> действие, где первое значение по умолчанию. Просто взгляните на некоторые из хорошо известных расширений, как они его используют. Вот небольшая аннотация соответствующей части FlexForm:

                    <switchableControllerActions>
                    <TCEforms>
                        <label>LLL:EXT:ra_registration/Resources/Private/Language/locallang_be.xml:flexforms_general.mode</label>
                        <config>
                            <type>select</type>
                            <items>
                                <numIndex index="0">
                                    <numIndex index="0">LLL:EXT:ra_registration/Resources/Private/Language/locallang_be.xml:flexforms_general.mode.registration_index</numIndex>
                                    <numIndex index="1">Registration->index;Registration->register;User->new;User->create;User->confirm;User->index;User->remind</numIndex>
                                </numIndex>
                                <numIndex index="1">
                                    <numIndex index="0">LLL:EXT:ra_registration/Resources/Private/Language/locallang_be.xml:flexforms_general.mode.registration_reminder</numIndex>
                                    <numIndex index="1">User->index;User->remind;User->remindConfirm</numIndex>
                                </numIndex>
                            </items>
                        </config>
                    </TCEforms>
                </switchableControllerActions>

Как уже говорилось, вы можете определить любую комбинацию контроллер / действие, такую ​​как MyProduct-> index или MyCustomer-> list и т. Д.

Чтобы использовать FlexForm, вам необходимо зарегистрировать его в ext_tables.php

$TCA['tt_content']['types']['list']['subtypes_addlist'][$pluginSignature] = 'pi_flexform';
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addPiFlexFormValue('myextenion_pi1', 'FILE:EXT:' . $_EXTKEY . '/Configuration/FlexForms/setup.xml');
person Michael Hitzler    schedule 14.05.2019