2017-03-06 56 views
0

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

但是,只有在插入数据之前删除表并重新创建它时,它才有效。但是,那里可能已经准备好的所有数据都会丢失。这绝对不是我想要的。我想添加一些额外的行到现有的数据。

我该如何做到这一点?

另一个问题是,如果有人清理了这个表,他们怎么会意识到他们必须从sys_registry表中删除我的扩展并重新安装它,这样所有的行才会再次被添加?

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

回答

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 /班/设置/ 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 
       ); 
      } 
     } 

    } 
}