在扩展安装 TYPO3 期间向 table 添加行
Adding rows to table during extension installation TYPO3
我正在尝试在安装我自己的扩展程序期间向 table tx_gridelements_backend_layout 添加一些数据行。为此,我在我的扩展目录中使用文件 "ext_tables_static+adt.sql"。
但这只有在我删除 table 并在插入数据之前重新创建它时才有效。但是随后所有可能已经存在的数据都丢失了。那绝对不是我想要的。我只想在现有数据中添加一些行。
我怎样才能做到这一点?
另一个问题是,如果有人清除了 table,他们怎么知道他们必须从 sys_registry table 中删除我的扩展并重新安装它,所以将再次添加所有行吗?
我想有更好的方法来做这样的事情,或者?
因此解决方案是在安装后发出信号扩展管理器。为此,我在 ext_localconf.php 中添加了:
if (TYPO3_MODE === 'BE') {
$class = 'TYPO3\CMS\Extbase\SignalSlot\Dispatcher';
$dispatcher = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance($class);
$dispatcher->connect(
'TYPO3\CMS\Extensionmanager\Service\ExtensionManagementService',
'hasInstalledExtensions',
'FalkRoeder\GridelementsFlex\Setup\Setup',
'addBackendLayouts'
);
}
和我的 Class FalkRoeder/gridelements_flex/Classes/Setup/Setup.php:
class Setup
{
protected $layouts = [
1 => [
'title' => 'Flexbox 50 50',
'config' => 'backend_layout {\r\n colCount = 4\r\n rowCount = 1\r\n rows {\r\n 1 {\r\n columns {\r\n 1 {\r\n name = links außen\r\n colPos = 1\r\n }\r\n 2 {\r\n name = links innen\r\n colPos = 2\r\n }\r\n 3 {\r\n name = rechts innen\r\n colPos = 3\r\n }\r\n 4 {\r\n name = rechts außen\r\n colPos = 4\r\n }\r\n }\r\n }\r\n }\r\n}\r\n',
'pi_flexform_ds_file' => 'typo3conf/ext/gridelements_flex/Configuration/Flexforms/two_column_flex.xml'
]
];
public function addBackendLayouts( $extname = null )
{
if( $extname !== 'gridelements_flex' ) {
return;
}
foreach ($this->layouts as $layout) {
list($row) = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows('COUNT(*) AS t', 'tx_gridelements_backend_layout', "title = '" . $layout['title'] . "'");
$count = (int)$row['t'];
if($count == 0) {
$GLOBALS['TYPO3_DB']->exec_INSERTquery(
'tx_gridelements_backend_layout',
$layout
);
}
}
}
}
我正在尝试在安装我自己的扩展程序期间向 table tx_gridelements_backend_layout 添加一些数据行。为此,我在我的扩展目录中使用文件 "ext_tables_static+adt.sql"。
但这只有在我删除 table 并在插入数据之前重新创建它时才有效。但是随后所有可能已经存在的数据都丢失了。那绝对不是我想要的。我只想在现有数据中添加一些行。
我怎样才能做到这一点?
另一个问题是,如果有人清除了 table,他们怎么知道他们必须从 sys_registry table 中删除我的扩展并重新安装它,所以将再次添加所有行吗?
我想有更好的方法来做这样的事情,或者?
因此解决方案是在安装后发出信号扩展管理器。为此,我在 ext_localconf.php 中添加了:
if (TYPO3_MODE === 'BE') {
$class = 'TYPO3\CMS\Extbase\SignalSlot\Dispatcher';
$dispatcher = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance($class);
$dispatcher->connect(
'TYPO3\CMS\Extensionmanager\Service\ExtensionManagementService',
'hasInstalledExtensions',
'FalkRoeder\GridelementsFlex\Setup\Setup',
'addBackendLayouts'
);
}
和我的 Class FalkRoeder/gridelements_flex/Classes/Setup/Setup.php:
class Setup
{
protected $layouts = [
1 => [
'title' => 'Flexbox 50 50',
'config' => 'backend_layout {\r\n colCount = 4\r\n rowCount = 1\r\n rows {\r\n 1 {\r\n columns {\r\n 1 {\r\n name = links außen\r\n colPos = 1\r\n }\r\n 2 {\r\n name = links innen\r\n colPos = 2\r\n }\r\n 3 {\r\n name = rechts innen\r\n colPos = 3\r\n }\r\n 4 {\r\n name = rechts außen\r\n colPos = 4\r\n }\r\n }\r\n }\r\n }\r\n}\r\n',
'pi_flexform_ds_file' => 'typo3conf/ext/gridelements_flex/Configuration/Flexforms/two_column_flex.xml'
]
];
public function addBackendLayouts( $extname = null )
{
if( $extname !== 'gridelements_flex' ) {
return;
}
foreach ($this->layouts as $layout) {
list($row) = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows('COUNT(*) AS t', 'tx_gridelements_backend_layout', "title = '" . $layout['title'] . "'");
$count = (int)$row['t'];
if($count == 0) {
$GLOBALS['TYPO3_DB']->exec_INSERTquery(
'tx_gridelements_backend_layout',
$layout
);
}
}
}
}