使扩展的常量在常量管理器中可用
Making the constants of a Extension available in constant manager
我有一个有效的 Extbase 扩展,它向前端显示一个表单,这取决于将它放在页面上时在后端选择的选项。
我为这些选项使用了 Flexform(主要是表单操作,还有一些字段)。
一切正常,除了常量。
因为这个表单模板可能会根据使用它的不同网站而改变,我希望能够改变模板根路径,这样我就可以定义自定义模板。
我在 form_plugin/Configuration/TypoScript
中有一个 constants.txt 和一个 setup.txt
常量如下所示:
plugin.tx_nlmymail_newsletter {
view {
# cat=plugin.tx_nlmymail_newsletter/file; type=string; label=Path to template root (FE)
templateRootPath = EXT:nl_mymail/Resources/Private/Templates/
# cat=plugin.tx_nlmymail_newsletter/file; type=string; label=Path to template partials (FE)
partialRootPath = EXT:nl_mymail/Resources/Private/Partials/
# cat=plugin.tx_nlmymail_newsletter/file; type=string; label=Path to template layouts (FE)
layoutRootPath = EXT:nl_mymail/Resources/Private/Layouts/
}
persistence {
# cat=plugin.tx_nlmymail_newsletter//a; type=string; label=Default storage PID
storagePid =
}
}
我的 setup.txt 看起来像这样:
plugin.tx_nlmymail_newsletter {
view {
templateRootPaths.0 = {$plugin.tx_nlmymail_newsletter.view.templateRootPath}
partialRootPaths.0 = {$plugin.tx_nlmymail_newsletter.view.partialRootPath}
layoutRootPaths.0 = {$plugin.tx_nlmymail_newsletter.view.layoutRootPath}
}
persistence {
storagePid = {$plugin.tx_nlmymail_newsletter.persistence.storagePid}
}
}
所以根据this,这应该足够了。
也许我在这里遗漏了一块。
在我的 ext_tables.php 我使用
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addStaticFile($_EXTKEY, 'Configuration/TypoScript', 'mail connection');
包括 Typoscript。
我需要为常量创建自定义类别吗?
我比较了bootstrap_package插件,但我似乎找不到关键的区别。
如果有人能给我指出正确的方向,也许是我遗漏的部分文档,我将不胜感激。
从评论中复制:
问题是静态模板没有包含在模板中。
这是截图:
是否可以自动执行此操作?
是的,它只是基于字符串的函数,而不是文件。
您必须在 ext_localconf.php 中使用以下命令:
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScript
或
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptSetup
来自 felogin 系统扩展的示例:
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScript('TYPO3.CMS.Felogin', 'constants', '
styles.content.loginform {
# cat=content/cLogin; type=int+; label= PID of user archive: Enter the page-uid number (PID) of the folder where you keep your fe_users that are supposed to login on this site. This setting is necessary, if login is going to work!
pid =
# cat=content/cLogin; type=; label= Login template: Enter the path for the HTML template to be used
templateFile = EXT:felogin/Resources/Private/Templates/FrontendLogin.html
}
', 'defaultContentRendering');
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScript('TYPO3.CMS.Felogin', 'setup', '
# Setting "felogin" plugin TypoScript
tt_content.login = COA
tt_content.login {
10 =< lib.stdheader
20 >
20 =< plugin.tx_felogin_pi1
}
', 'defaultContentRendering');
最后:
建议使用静态模板,因为您可能有不同的树和设置。大多数 TER 扩展也使用这种方法。
我有一个有效的 Extbase 扩展,它向前端显示一个表单,这取决于将它放在页面上时在后端选择的选项。
我为这些选项使用了 Flexform(主要是表单操作,还有一些字段)。
一切正常,除了常量。 因为这个表单模板可能会根据使用它的不同网站而改变,我希望能够改变模板根路径,这样我就可以定义自定义模板。
我在 form_plugin/Configuration/TypoScript
中有一个 constants.txt 和一个 setup.txt常量如下所示:
plugin.tx_nlmymail_newsletter {
view {
# cat=plugin.tx_nlmymail_newsletter/file; type=string; label=Path to template root (FE)
templateRootPath = EXT:nl_mymail/Resources/Private/Templates/
# cat=plugin.tx_nlmymail_newsletter/file; type=string; label=Path to template partials (FE)
partialRootPath = EXT:nl_mymail/Resources/Private/Partials/
# cat=plugin.tx_nlmymail_newsletter/file; type=string; label=Path to template layouts (FE)
layoutRootPath = EXT:nl_mymail/Resources/Private/Layouts/
}
persistence {
# cat=plugin.tx_nlmymail_newsletter//a; type=string; label=Default storage PID
storagePid =
}
}
我的 setup.txt 看起来像这样:
plugin.tx_nlmymail_newsletter {
view {
templateRootPaths.0 = {$plugin.tx_nlmymail_newsletter.view.templateRootPath}
partialRootPaths.0 = {$plugin.tx_nlmymail_newsletter.view.partialRootPath}
layoutRootPaths.0 = {$plugin.tx_nlmymail_newsletter.view.layoutRootPath}
}
persistence {
storagePid = {$plugin.tx_nlmymail_newsletter.persistence.storagePid}
}
}
所以根据this,这应该足够了。 也许我在这里遗漏了一块。
在我的 ext_tables.php 我使用
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addStaticFile($_EXTKEY, 'Configuration/TypoScript', 'mail connection');
包括 Typoscript。
我需要为常量创建自定义类别吗?
我比较了bootstrap_package插件,但我似乎找不到关键的区别。
如果有人能给我指出正确的方向,也许是我遗漏的部分文档,我将不胜感激。
从评论中复制:
问题是静态模板没有包含在模板中。
这是截图:
是否可以自动执行此操作?
是的,它只是基于字符串的函数,而不是文件。
您必须在 ext_localconf.php 中使用以下命令:
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScript
或
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptConstants
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScriptSetup
来自 felogin 系统扩展的示例:
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScript('TYPO3.CMS.Felogin', 'constants', '
styles.content.loginform {
# cat=content/cLogin; type=int+; label= PID of user archive: Enter the page-uid number (PID) of the folder where you keep your fe_users that are supposed to login on this site. This setting is necessary, if login is going to work!
pid =
# cat=content/cLogin; type=; label= Login template: Enter the path for the HTML template to be used
templateFile = EXT:felogin/Resources/Private/Templates/FrontendLogin.html
}
', 'defaultContentRendering');
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScript('TYPO3.CMS.Felogin', 'setup', '
# Setting "felogin" plugin TypoScript
tt_content.login = COA
tt_content.login {
10 =< lib.stdheader
20 >
20 =< plugin.tx_felogin_pi1
}
', 'defaultContentRendering');
最后:
建议使用静态模板,因为您可能有不同的树和设置。大多数 TER 扩展也使用这种方法。