【问题标题】:Adding rows to table during extension installation TYPO3在扩展安装 TYPO3 期间向表中添加行
【发布时间】:2017-03-06 11:38:53
【问题描述】:

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

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

我怎样才能做到这一点?

另一个问题是,如果有人清除表怎么办,他们如何意识到他们必须从 sys_registry 表中删除我的扩展并重新安装它,所以所有行都会重新添加?

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

【问题讨论】:

    标签: mysql typo3 extbase typo3-7.6.x


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-07
      • 2021-02-25
      • 2012-07-07
      • 1970-01-01
      相关资源
      最近更新 更多