it-bens / shopware-bool-to-yes-no-updater
Shopware 包用于更新布尔值到“是/否”的翻译
Requires
- php: ^8.1
- it-bens/simple-words-translator: ^0.2
- shopware/core: ^6.5
Requires (Dev)
- captainhook/captainhook: ^5.21
- captainhook/plugin-composer: ^5.3
- phpstan/extension-installer: ^1.1
- phpstan/phpstan: ^1.10
- phpstan/phpstan-phpunit: ^1.3
- phpunit/phpunit: ^10.5
- symplify/coding-standard: ^12.0
- symplify/easy-coding-standard: ^12.1
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。
你们都是惊人的!