TYPO3 6.1 / 6.2 - 扩展现有的域模型

时间:2014-05-12 08:17:51

标签: typo3 extbase

我正在尝试使用新字段扩展现有域模型,但无法弄清楚我做错了什么。我尝试了以下TYPO3 6.1和TYPO3 6.2(最新版本,Extension Builder git master分支)。

  1. 使用扩展构建器(供应商:TEST,扩展密钥:mytest1)
  2. 创建新扩展
  3. 创建一个名为“table1”
  4. 的新表
  5. 为table1创建一个名为“title1”
  6. 的新主题
  7. 保存扩展程序
  8. 安装扩展程序
  9. 到目前为止,一切都按预期工作。我可以在TYPO3后端为“table1”记录创建记录并输入“title1”的属性

    现在我想用新字段扩展扩展名“mytest1”。我必须使用新扩展来执行此操作,因此我执行以下操作:

    1. 使用扩展程序构建器创建另一个扩展程序(供应商:TEST,扩展键:mytest2)
    2. 创建一个名为“table1”
    3. 的新表
    4. 在“扩展现有模型类”字段中,我输入“\ TEST \ Mytest1 \ Domain \ Model \ Table1”类
    5. 创建一个名为“title2”的新属性
    6. 保存扩展程序
    7. 安装扩展程序
    8. 我现在期望,我在TYPO3后端有2个字段用于记录“table1”。实际上,我只是在扩展名“mytest1”中创建了一个字段“title1”。

      据我所知,ext_tables.php和“ext_typoscript_setup.txt”看起来都很好。 TCA由额外字段扩展,并且extbase记录类型似乎也可以。 “table1”也包含由“mytest2”ext_tables.sql添加的新字段。只是,TCA似乎没有加载。

      当我尝试使用TYPO3 4.5和ExtensionBuilder时,一切都按预期工作。

      我有什么遗失的吗?

2 个答案:

答案 0 :(得分:1)

$tempColumns = array(
    'title2' => array(
        'exclude' => 0,
        'label' => 'title2',
        'config' => array(
            'type' => 'input'
        )
    )
);
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTCAcolumns('table1', $tempColumns, 1);
\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes('table1', 'title2;;;;1-1-1');

这应该足以将字段添加到TCA中的现有表。你试过这个吗?

答案 1 :(得分:0)

当前版本的Extension Builder似乎创建了错误的ext_tables.php

当我如上所述进行扩展创建时,它会使用新字段和字段tx_extbase_type扩展TCA。到现在为止还挺好。 ext_tables.php中的最后一行是最重要的一行,其中调用了addToAllTCAtypes。

Extension Builder创建以下函数调用:

\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes('tx_mytest1_domain_model_table1', $GLOBALS['TCA']['tx_mytest1_domain_model_table1']['ctrl']['type'],'','after:' . $TCA['tx_mytest1_domain_model_table1']['ctrl']['label']);

最后一个参数($ postition)是错误的。它尝试在 $ TCA ['tx_test1_domain_model_table1'] ['ctrl'] ['label'] 中配置的值之后添加新的TCA配置,这实际上是空的(因为未在mytest1扩展中定义)。

如果此参数指向不存在的内容(例如“after:nonexistingfield”),则新的TCA配置完全忽略并且不会添加。

我用以下内容替换了addToAllTCAtypes调用:

\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addToAllTCAtypes('tx_mytest1_domain_model_table1', $GLOBALS['TCA']['tx_mytest1_domain_model_table1']['ctrl']['type'],'','');

我刚刚将$ position参数留空了,这导致两个新字段(title2和tx_extbase_type)显示在后端的表单中(实际上在Extension Builder中创建了一个新的选项卡--div--在新字段的showitem配置中)。

您还可以将位置指向现有字段(例如“after:title1”),然后在title1字段后显示新字段tx_extbase_type。

我认为这是Extension Builder中的一个错误,会在伪造上提出问题。