it-bens/shopware-bool-to-yes-no-updater

Shopware 包用于更新布尔值到“是/否”的翻译

v0.2.1 2024-03-21 23:39 UTC

This package is auto-updated.

Last update: 2024-09-23 20:47:36 UTC


README

许多Shopware实体支持翻译。翻译字段存储在实体翻译表中。

此包提供将布尔实体字段转换为“已翻译布尔值”如“是”和“否”的能力。如果布尔字段应在店面中显示,这些翻译字段可能很有用。

这是一个Shopware插件吗?

不是。虽然此包与Shopware相关联,但它不会对其自身的事件做出反应。它旨在由Shopware插件使用。

如何在Shopware插件中添加此包?

首先,必须通过composer安装此包

composer require it-bens/shopware-bool-to-yes-no-updater

可以在插件的composer.json文件中完成此操作。但不要忘记在插件类中启用composer。

public function executeComposerCommands(): bool
{
    return true;
}

此包提供了一个Symfony编译器传递,它将所有服务添加到Shopware插件服务容器中。它可以添加到插件的方法build中。

use ITB\ShopwareBoolToYesNoUpdater\DependencyInjection\BoolToYesNoCompilerPass;

public function build(ContainerBuilder $container): void
{
    // ...
    parent::build($container);

    $container->addCompilerPass(new BoolToYesNoCompilerPass());
}

如何使用此包?

实际工作由BoolToYesNoUpdater服务完成。它应该通过BoolToYesNoUpdaterInterface注入到所需的服务中。`update`方法将创建一个SQL更新查询,将布尔翻译写入给定的翻译表。布尔值取自实体表和定义的字段列表。该方法还需要考虑的语言列表以及应更新的实体ID列表。

使用方式可能如下所示

/** @var BoolToYesNoUpdaterInterface $boolToYesNoUpdater */
/** @var list<array{id: string, name: string}> $languages */
/** @var list<string> $fields */
/** @var list<string> $ids */

$boolToYesNoUpdater->update(
    $languages,
    $defaultLanguage,
    'entity_table',
    'entity_translation_table',
    ['field_1', 'field_2'],
    $ids
);

语言信息看起来有些奇怪,但可以使用此包中的服务获取。`AllLanguagesIdAndNameFetcher`仅返回安装在Shopware中的所有语言ID和名称。`EntityTranslationsLanguagesIdAndNameFetcher`返回基于现有实体翻译的语言ID和名称列表。

/** @var AllLanguagesIdAndNameFetcherInterface $allLanguagesIdAndNameFetcher */
$allLanguagesIdAndNameFetcher->fetch();
/** @var EntityTranslationsLanguagesIdAndNameFetcherInterface $entityTranslationsLanguagesIdAndNameFetcher */
/** @var string $entityTable */
/** @var string $entityTranslationTable */
/** @var list<string> $entityIds */

$entityTranslationsLanguagesIdAndNameFetcher->fetch(
    $entityTable,
    $entityTranslationTable,
    $entityIds
);

默认语言和回退翻译

此包使用it-bens/simple-words-translator。它为一些语言提供翻译,但当然不是世界上所有语言,或者Shopware已知的所有语言。因此,可以定义一个默认语言。如果未通过其名称找到翻译,则将使用默认语言。

此外,可以为所有表条目定义默认值,这些条目的实体ID被传递,但不包含给定字段的有效布尔值。最方便的默认值是null

性能和索引器循环

BoolToYesNoUpdater服务旨在在Shopware数据索引器中使用。为了提高性能和防止通过触发DAL导致的循环调用,更新器仅使用纯SQL代码,而不使用更高级的抽象。然而,查询是在doctrine连接上执行的,因此查询仍然应该是安全的。

贡献

我非常高兴软件开发社区喜欢开源,就像我一样!♥

因此,我感谢每个提出的问题(最好是建设性的)和每个提供其他或更好代码的pull request。

你们都是惊人的!