heimrichhannot/contao-dc-multilingual-utils-bundle

此扩展包为 Contao CMS 提供了关于 terminal42/contao-DC_Multilingual 的功能。

0.8.4 2023-04-04 14:10 UTC

This package is auto-updated.

Last update: 2024-09-04 17:15:35 UTC


README

此扩展包为 Contao CMS 提供了关于 terminal42/contao-DC_Multilingual 的功能。

特性

  • 为 tl_content 添加多语言支持
  • 为特定 DCA 快速激活 DC_Multilingual 支持添加快捷函数
  • madeyourday/contao-rocksolid-custom-elements 添加多语言支持
  • 添加插入标签以生成多语言事件、新闻或常见问题解答 URL
  • 注意:重写 DC_Multilingual v4+ 的 ID 处理为 v3 行为(具有合并翻译的记录的 ID 设置为翻译记录的 ID)

安装

  1. 通过 composer 安装: composer require heimrichhannot/contao-dc-multilingual-utils-bundle
  2. 激活 DC_Multilingualtl_content 的支持(不是可选的)
/**
 * @Hook("loadDataContainer")
 */
class LoadDataContainerListener
{
    private DcMultilingualUtil $multilingualUtil;

    public function __invoke(string $table): void
    {
        if ('tl_content' === $table) {
            $this->multilingualUtil->addDcMultilingualSupport(
                $table, ['de', 'en', 'pl'], 'de', [ 'text', 'rsce_data' ] 
            );
        }
    }
}

技术细节

插入标签

以下新标签可用

使用快捷函数快速激活 DC_Multilingual

只需调用以下代码

/**
 * @Hook("loadDataContainer")
 */
class LoadDataContainerListener
{
    private DcMultilingualUtil $multilingualUtil;

    public function __invoke(string $table): void
    {
        if ('tl_content' === $table) {
            $this->multilingualUtil->addDcMultilingualSupport(
                $table, // Table name
                ['de', 'en', 'pl'], // Supported languages
                'de', // Fallback language
                [ // the translatable fields
                    'text', // add fields here...
                    'rsce_data' // add this if you have rocksolid custom elements (tl_content only)
                ],
                [ // options
                    'langColumnName', // the language field in the dca's records (you have a record for every language and this column holds which one it is)
                    'langPid', // this field holds the parent record of every translated record
                ]
            );
            break;
        }
    }
}

关于重写类的说明

为了在后台生成遵循 DC_Multilingual 创建的多语言记录的内容元素,需要重写 ContentModel,因为 Contao 在 Controller 中直接调用核心的 ContentModel

$objRow = ContentModel::findByPk($intId);

但为了使 Contao 输出 翻译的 元素,我们需要使用自己的继承自 Terminal42\DcMultilingualBundle\Model\Multilingual\Multilingual 类的 ContentModel