如何设置要在TCA / Override中使用的配置,或者如何配置sys类别?

时间:2018-12-18 08:47:28

标签: typo3 typo3-extensions

对于扩展程序,我想使用存储在专用文件夹中的sys_categories。如何配置文件夹并访问TCA安装程序中的配置?

我尝试了这种方法。我在\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::makeCategorizable内部使用了Configuration/TCA/Overrides/tx_xref_domain_model_project.php方法。

我将硬编码333放置在理想​​情况下tsconfig的位置。此时是否可以解析并访问它?

\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::makeCategorizable(
   'xref',
   'tx_xref_domain_model_project',
   'areas',
   array(
       'label' => 'Areas',
       'exclude' => FALSE,
       'fieldConfiguration' => array(
           'foreign_table_where' => ' AND sys_category.pid = 333',
       )
   )
);

有没有更简单的方法来解决这个问题?

2 个答案:

答案 0 :(得分:1)

ExtensionManagementUtility::makeCategorizable()中使用Configuration/TCA/Overrides/<your_table>.php是正确的方法,实际上是TYPO3 itself does的正确方法。

答案 1 :(得分:0)

此时至少可以访问全局扩展配置。

https://docs.typo3.org/typo3cms/CoreApiReference/ExtensionArchitecture/ConfigurationOptions/Index.html

这并不完全令人满意,因为您可能想为不同的页面或sys_folders定义不同的类别源文件夹。然而,它将对许多项目有用:

protected override void ApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
    {
        var contentTypeService = ApplicationContext.Current.Services.ContentTypeService;
        var dataTypeService = ApplicationContext.Current.Services.DataTypeService;

        var mediaType = contentTypeService.GetMediaType(1032);

        if (mediaType != null && !mediaType.PropertyTypeExists("myNewPropertyAlias"))
        {
            var dataTypeDefinitions = dataTypeService.GetAllDataTypeDefinitions().ToArray();
            var textStringDataTypeDefinition = dataTypeDefinitions.FirstOrDefault(p => p.Name.ToLower() == "textstring");

            mediaType.AddPropertyType(new PropertyType(textStringDataTypeDefinition) { Name = "My New Property Name", Alias = "myNewPropertyAlias" });

            contentTypeService.Save(mediaType);
        }
    }