- Documentation >
- PIM (Product management) >
- Customize PIM >
- Create product code generator
Create custom product code generator strategy
Product code generator strategies control what product variant codes are generated.
Besides the built-in strategies, you can create your own ones.
A code generator strategy must implement Ibexa\Contracts\ProductCatalog\Local\CodeGenerator\CodeGeneratorInterface.
The following example shows how to add a generator strategy that creates code, based on the product base code and an incremental index number.
First, create the generator strategy class:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 | <?php
declare(strict_types=1);
namespace App\CodeGenerator\Strategy;
use Ibexa\Contracts\Core\Exception\InvalidArgumentException;
use Ibexa\Contracts\ProductCatalog\Local\CodeGenerator\CodeGeneratorContext;
use Ibexa\Contracts\ProductCatalog\Local\CodeGenerator\CodeGeneratorInterface;
final class CustomIncrementalCodeGenerator implements CodeGeneratorInterface
{
public function generateCode(CodeGeneratorContext $context): string
{
if (!$context->hasBaseProduct()) {
throw new InvalidArgumentException('$context', 'missing base product');
}
if (!$context->hasIndex()) {
throw new InvalidArgumentException('$context', 'missing index');
}
return $context->getBaseProduct()->getCode() . 'v' . $context->getIndex();
}
}
|
This generator uses the provided context to get product information (in this case the code of the base product) and the incremental number.
Then, register the strategy generator as a service and tag it with ibexa.product_catalog.code_generator:
| services:
App\CodeGenerator\Strategy\CustomIncrementalCodeGenerator:
tags:
- { name: 'ibexa.product_catalog.code_generator', type: 'custom_incremental' }
|
Use the defined type in catalog configuration to apply codes generated by this strategy to new product variants.