Несколько контроллеров в расширении - PullRequest
0 голосов
/ 13 мая 2019

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

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

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

1 Ответ

0 голосов
/ 14 мая 2019

Конечно, это возможно. Вам необходимо использовать 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-> индекс или же MyCustomer-> список и т.д.

Чтобы использовать 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');
...