mysql - 在扩展安装期间向表添加行 TYPO3

标签 mysql typo3 extbase typo3-7.6.x

我正在尝试在安装我自己的扩展期间向表 tx_gridelements_backend_layout 添加一些数据行。为此,我在扩展目录中使用文件“ext_tables_static+adt.sql”。

但这只有在我删除表并在插入数据之前再次创建它时才有效。但随后所有可能已经存在的数据都会丢失。那绝对不是我想要的。我只想在现有数据的基础上添加一些行。

我怎样才能实现这一目标?

另一个问题是,如果有人清除了该表,他们如何意识到必须从 sys_registry 表中删除我的扩展并再次安装它,以便再次添加所有行?

我认为有更好的方法来做这样的事情,或者?

最佳答案

所以问题是安装后发出信号扩展管理器。为此,我在 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'
    );
}

和我的类 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
                );
            }
        }

    }
}

关于mysql - 在扩展安装期间向表添加行 TYPO3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42624683/

相关文章:

php - 使用带有 JOIN 语句的 RealURL (TYPO3)

download - TYPO3 extbase FAL 文件下载

typo3 - Extbase 扩展中的 $this->settings 为空

PHP CodeIgniter 多个 LEFT OUTER 加入查询

c# - 数据库中的值在文本框中不可见,请将值插入到正确的用户名中

php - 从 phpmyadmin 插入导出的 PHP 数组

php - 如何在TYPO3中实现带有自定义元素的页面模板?

TYPO3/TypoScript - 使用 FIELD() 在 DataProcessor 中自定义排序

typo3 - Extbase Repository, findBy 两个参数

javascript - 多个图像未插入mysql数据库