justbetter/laravel-akeneo-products

轻松将产品从您的ERP导出到Akeneo

2.1.2 2024-09-11 09:09 UTC

This package is auto-updated.

Last update: 2024-09-11 09:10:25 UTC


README

Package banner

Laravel Akeneo Products

Tests Coverage Analysis Total downloads

轻松将产品从您的ERP导出到Akeneo。

此包旨在轻松从您的ERP或其他(外部)源创建Akeneo中的产品,无需处理Akeneo中不同字段类型的复杂性。属性结构由包全部处理。这意味着简单的键值数组已足够用于启动upserting产品。

除了属性之外,您还可以设置家族、类别和其他您通常可以通过API访问的所有数据。

对于更复杂的使用案例,您还可以向有效载荷中添加自己的数据。

如果您的项目可以访问大量产品,则将产品分批检索和更新以分散负载。只有当产品发生更改时,才会将更新发送到Akeneo,以防止不必要的请求。

先决条件

此包使用Akeneo客户端。请确保按照其README正确安装和配置。

安装

安装composer包。

composer require justbetter/laravel-akeneo-products

设置

发布包的配置。

php artisan vendor:publish --provider="JustBetter\AkeneoProducts\ServiceProvider" --tag=config

将以下命令添加到您的调度器中。

<?php

$schedule->command(\JustBetter\AkeneoProducts\Commands\Product\ProcessProductsCommand::class)->everyMinute();
$schedule->command(\JustBetter\AkeneoProducts\Commands\ProductModel\ProcessProductModelsCommand::class)->everyMinute();

工作原理

本节将描述产品的流程,但产品模型的使用方式相似。

当检索产品时,它会从(外部)源检索产品。如果检索到的数据不为空,它将被保存在数据库中。如果数据库模型的有效载荷已更改,则模型的update-属性将被设置为true。这样,包就知道了更新,并可以分批次进行。这些数字可以在您的检索器类中进行调整。

如果模型中已检索到产品,则可以设置模型的retrieve-属性为true,以自动再次检索数据。如果将其添加到您的调度器中,则由ProcessProductsCommand完成。

在以下条件下,将处理数据库中保存的所有产品

  1. 如果将retrieve设置为true,则将从(外部)源再次检索产品。
  2. 如果将update设置为true,则将产品upsert到Akeneo。

此包不包含检索“所有”产品的方法。如果您希望每天检索所有产品,您必须自己调度带有标识符的RetrieveProductJob

<?php

use JustBetter\AkeneoProducts\Jobs\Product\RetrieveProductJob;
use JustBetter\AkeneoProducts\Jobs\ProductModel\RetrieveProductModelJob;

RetrieveProductJob::dispatch('::identifier::');

RetrieveProductModelJob::dispatch('::code::');

检索产品

首先,创建您自己的检索器,因为这是包将与(外部)源交互的方式。

通过构建ProductData类,包知道如何将此数据发送到Akeneo。

请确保您已在配置文件中设置了检索器。

本包还包含一个用于动态创建有效载荷的 属性 模型。我们还编写了一个 Nova 集成,使其更加简单,因为它提供映射资源。

示例

以下是一个如何使用本包的示例,使用配置的属性映射。

<?php

use JustBetter\AkeneoProducts\Contracts\Akeneo\FormatsAttributeValues;
use JustBetter\AkeneoProducts\Data\ProductData;
use JustBetter\AkeneoProducts\Enums\MappingType;
use JustBetter\AkeneoProducts\Models\Mapping;
use JustBetter\AkeneoProducts\Retrievers\Product\BaseProductRetriever;

class ExampleProductRetriever extends BaseProductRetriever
{
    public function __construct(
        protected FormatsAttributeValues $formatValue
    ) {
    }

    public function retrieve(string $identifier): ?ProductData
    {
        // Get all configured attributes from the database.
        $attributes = Mapping::of(MappingType::Attribute)->get();

        // This would be the product fetched from an ERP system.
        $product = [
            'SKU' => '1000',
            'Title' => 'Ziggy',
            'Category_Code' => 'STUFFED_TOYS',
            // ...
        ];

        // Build up the "values" array for Akeneo.
        $values = [
            //
        ];

        foreach ($product as $key => $value) {
            /** @var ?Mapping $mapped */
            $mapped = $attributes->firstWhere('source', '=', $key);

            if ($mapped === null || $value === null) {
                continue;
            }

            // Format the raw value into an appropriate attribute value for Akeneo.
            $data = $this->formatValue->format($mapped->destination, $value);

            // Add the value to the list, with the Akeneo field as the key.
            $values[$mapped->destination] = $data;
        }

        $data = [
            'identifier' => $identifier,
            'values' => $values,
        ];

        $family = Mapping::get(MappingType::Family, $product['Category_Code']);

        // Optionally, add a family. Note that you can also add categories.
        if ($family) {
            $data['family'] = $family->destination;
        }

        return ProductData::of($data);
    }
}

产品模型可以类似实现,以下是一个示例

<?php

use JustBetter\AkeneoProducts\Data\ProductModelData;
use JustBetter\AkeneoProducts\Retrievers\ProductModel\BaseProductModelRetriever;

class ExampleProductModelRetriever extends BaseProductModelRetriever
{
    public function retrieve(string $code): ?ProductModelData
    {
        //

        return ProductModelData::of([
            //
        ]);
    }
}

支持的属性类型

目前,本包支持以下属性类型

  • pim_catalog_text
  • pim_catalog_textarea
  • pim_catalog_number
  • pim_catalog_metric
  • pim_catalog_boolean
  • pim_catalog_price_collection
  • pim_catalog_simpleselect

命令

本包包含一些命令。

产品

通过标识符检索产品,它将自动保存到数据库中。

php artisan akeneo-products:retrieve {identifier}

处理所有产品,这包括检索和更新产品。

php artisan akeneo-products:process

通过标识符更新产品。这将手动触发对 Akeneo 的更新,无论产品是否是最新的。

php artisan akeneo-products:update {identifier}

产品模型

通过代码检索产品模型,它将自动保存到数据库中。

php artisan akeneo-products:model:retrieve {code}

处理所有产品模型,这包括检索和更新产品模型。

php artisan akeneo-products:model:process

通过代码更新产品模型。这将手动触发对 Akeneo 的更新,无论产品模型是否是最新的。

php artisan akeneo-products:model:update {code}

质量

为确保本包的质量,运行以下命令

composer quality

这将执行三个任务

  1. 确保所有测试都通过
  2. 使用静态代码分析检查任何问题
  3. 检查代码是否格式正确

贡献

请参阅 CONTRIBUTING 了解详情。

安全漏洞

请查阅 我们的安全策略 了解如何报告安全漏洞。

鸣谢

许可证

MIT 许可证 (MIT)。请参阅 许可证文件 了解更多信息。

Package footer