TYPO3 9 TCA 如何添加自定义精灵?
How to add custom wizards in TYPO3 9 TCA?
相关TYPO3 9中的服装精灵如何实现?我已将我的条目添加到 Routes.php
return [
'tx_csseo_preview' => [
'path' => '/wizard/tx_csseo/preview',
'target' => \Clickstorm\CsSeo\UserFunc\PreviewWizard::class . '::render'
],
'tx_csseo_permalink' => [
'path' => '/wizard/tx_csseo/permalink',
'target' => \Clickstorm\CsSeo\UserFunc\PermalinkWizard::class . '::render'
]
];
现在如何将它们添加到我的 TCA 字段中?
'tx_csseo_title' => [
'label' => 'LLL:EXT:cs_seo/Resources/Private/Language/locallang_db.xlf:pages.tx_csseo_title',
'exclude' => 1,
'config' => [
'type' => 'input',
'max' => $extConf['maxTitle'],
'eval' => 'trim',
'fieldWizard' => [
'tx_csseo_preview' => [
'disabled' => false,
]
]
]
],
这不起作用。我想念什么?提前致谢。
与您的向导类型相关的注册过程是不同的并且有广泛的解释here。您可以保留 Routes.php 中的条目(如果里面没有其他内容,甚至可以保留整个文件)。
注册已于 ext_localconf.php
:
完成
$GLOBALS['TYPO3_CONF_VARS']['SYS']['formEngine']['nodeRegistry'][1485351217] = [
'nodeName' => 'importDataControl',
'priority' => 30,
'class' => \T3G\Something\FormEngine\FieldControl\ImportDataControl::class
];
然后在 TCA 中引用新向导:
'somefield' => [
'label' => $langFile . ':pages.somefield',
'config' => [
'type' => 'input',
'eval' => 'int, unique',
'fieldControl' => [
'importControl' => [
'renderType' => 'importDataControl'
]
]
]
],
最后 class 和 "magic"
declare(strict_types=1);
namespace T3G\Something\FormEngine\FieldControl;
use TYPO3\CMS\Backend\Form\AbstractNode;
class ImportDataControl extends AbstractNode
{
public function render()
{
$result = [
'iconIdentifier' => 'import-data',
'title' => $GLOBALS['LANG']->sL('LLL:EXT:something/Resources/Private/Language/locallang_db.xlf:pages.importData'),
'linkAttributes' => [
'class' => 'importData ',
'data-id' => $this->data['databaseRow']['somefield']
],
'requireJsModules' => ['TYPO3/CMS/Something/ImportData'],
];
return $result;
}
}
在链接的示例中,仍然有一个 Ajax 路由和相应的文件,包括一个特殊定义的路由,但这不是显示基本向导所必需的。
关于 ext_localconf.php
中的注册,数字 1485351217
上方显示为数组键。对于自己的注册节点,只需计算一次当前时间作为 unix-timestamp 并输入它。所以它是唯一的,不能与任何已注册节点的其他定义混淆。
与链接示例相比,我使用的描述略有不同,因此我在 ext_localconf.php registering
中调用该过程,并在 TCA referencing
中调用包含。或许这个小小的差异让它更清晰一些。
图标
关于图标,与早期的 TYPO3 版本仍然存在差异,它们现在也必须注册,并且在 TCA 中它们也只能通过注册名称引用。 TCA 文件中没有引用图标,但下面的 class 使用了它。这是一个如何在 ext_tables.php:
中注册图标的示例
$systemIconRegistry = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Imaging\IconRegistry::class);
$systemIconRegistry->registerIcon(
'imagemapwizard_link_edit',
\TYPO3\CMS\Core\Imaging\IconProvider\BitmapIconProvider::class,
[
'source' => 'EXT:imagemap_wizard/Resources/Public/Icons/link_edit.png'
]
);
从 TYPO3 7.5 版开始实施新的图标注册表
不要忘记YourExtension/Configuration/Backend/AjaxRoutes.php中的配置。见 documentation
相关
return [
'tx_csseo_preview' => [
'path' => '/wizard/tx_csseo/preview',
'target' => \Clickstorm\CsSeo\UserFunc\PreviewWizard::class . '::render'
],
'tx_csseo_permalink' => [
'path' => '/wizard/tx_csseo/permalink',
'target' => \Clickstorm\CsSeo\UserFunc\PermalinkWizard::class . '::render'
]
];
现在如何将它们添加到我的 TCA 字段中?
'tx_csseo_title' => [
'label' => 'LLL:EXT:cs_seo/Resources/Private/Language/locallang_db.xlf:pages.tx_csseo_title',
'exclude' => 1,
'config' => [
'type' => 'input',
'max' => $extConf['maxTitle'],
'eval' => 'trim',
'fieldWizard' => [
'tx_csseo_preview' => [
'disabled' => false,
]
]
]
],
这不起作用。我想念什么?提前致谢。
与您的向导类型相关的注册过程是不同的并且有广泛的解释here。您可以保留 Routes.php 中的条目(如果里面没有其他内容,甚至可以保留整个文件)。
注册已于 ext_localconf.php
:
$GLOBALS['TYPO3_CONF_VARS']['SYS']['formEngine']['nodeRegistry'][1485351217] = [
'nodeName' => 'importDataControl',
'priority' => 30,
'class' => \T3G\Something\FormEngine\FieldControl\ImportDataControl::class
];
然后在 TCA 中引用新向导:
'somefield' => [
'label' => $langFile . ':pages.somefield',
'config' => [
'type' => 'input',
'eval' => 'int, unique',
'fieldControl' => [
'importControl' => [
'renderType' => 'importDataControl'
]
]
]
],
最后 class 和 "magic"
declare(strict_types=1);
namespace T3G\Something\FormEngine\FieldControl;
use TYPO3\CMS\Backend\Form\AbstractNode;
class ImportDataControl extends AbstractNode
{
public function render()
{
$result = [
'iconIdentifier' => 'import-data',
'title' => $GLOBALS['LANG']->sL('LLL:EXT:something/Resources/Private/Language/locallang_db.xlf:pages.importData'),
'linkAttributes' => [
'class' => 'importData ',
'data-id' => $this->data['databaseRow']['somefield']
],
'requireJsModules' => ['TYPO3/CMS/Something/ImportData'],
];
return $result;
}
}
在链接的示例中,仍然有一个 Ajax 路由和相应的文件,包括一个特殊定义的路由,但这不是显示基本向导所必需的。
关于 ext_localconf.php
中的注册,数字 1485351217
上方显示为数组键。对于自己的注册节点,只需计算一次当前时间作为 unix-timestamp 并输入它。所以它是唯一的,不能与任何已注册节点的其他定义混淆。
与链接示例相比,我使用的描述略有不同,因此我在 ext_localconf.php registering
中调用该过程,并在 TCA referencing
中调用包含。或许这个小小的差异让它更清晰一些。
图标
关于图标,与早期的 TYPO3 版本仍然存在差异,它们现在也必须注册,并且在 TCA 中它们也只能通过注册名称引用。 TCA 文件中没有引用图标,但下面的 class 使用了它。这是一个如何在 ext_tables.php:
中注册图标的示例$systemIconRegistry = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Imaging\IconRegistry::class);
$systemIconRegistry->registerIcon(
'imagemapwizard_link_edit',
\TYPO3\CMS\Core\Imaging\IconProvider\BitmapIconProvider::class,
[
'source' => 'EXT:imagemap_wizard/Resources/Public/Icons/link_edit.png'
]
);
从 TYPO3 7.5 版开始实施新的图标注册表
不要忘记YourExtension/Configuration/Backend/AjaxRoutes.php中的配置。见 documentation