integration_documentation:plugin:en:integration:shopware_6:extension

integration_documentation:plugin:en:integration:shopware_6:extension

This is an old revision of the document!


Shopware 6 plugin extension

The Findologic extension plugin for Shopware 6 allows manual adaptions to the behavior of the main Findologic plugin.

It's possible override, extend and replace components, to fit the needs of your store. The most common use case is to add additional data to the Findologic product export.

Download the latest zip file from our GitHub release page.

Follow the installation instructions in the Shopware documentation.

Please make sure to use the same major version as the base Findologic plugin. This means that 2.x is compatible with 2.x and 3.x is compatible with 3.x, etc.

## Basics

### Decorators

Adaptions need to be done using [Symfony decorators](https://symfony.com/doc/current/service_container/service_decoration.html).

By default the extension plugin decorates the `AttributeAdapter` and `DefaultPropertiesAdapter`, which are responsible to generate the attributes and properties of a product. Any adapter in `FINDOLOGIC\FinSearch\Export\Adapters` can be decorated.

`src/Resources/config/services.xml` ```xml <?xml version=“1.0” ?> <container xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance

  xmlns="http://symfony.com/schema/dic/services"
  xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
  <services>
      <service
          id="FINDOLOGIC\ExtendFinSearch\Export\Adapters\AttributeAdapter"
          decorates="FINDOLOGIC\FinSearch\Export\Adapters\AttributeAdapter"
          public="true"
          decoration-on-invalid="ignore"
      >
          <argument type="service" id="service_container" />
          <argument type="service" id="FINDOLOGIC\FinSearch\Struct\Config" />
          <argument type="service" id="Shopware\Core\Framework\Adapter\Translation\Translator" />
          <argument type="service" id="fin_search.sales_channel_context" />
          <argument type="service" id="FINDOLOGIC\FinSearch\Export\UrlBuilderService" />
          <argument type="service" id="fin_search.export_context" />
      </service>
      <service
          id="FINDOLOGIC\ExtendFinSearch\Export\Adapters\DefaultPropertiesAdapter"
          decorates="FINDOLOGIC\FinSearch\Export\Adapters\DefaultPropertiesAdapter"
          public="true"
          decoration-on-invalid="ignore"
      >
          <argument type="service" id="FINDOLOGIC\FinSearch\Struct\Config" />
          <argument type="service" id="fin_search.sales_channel_context" />
          <argument type="service" id="Shopware\Core\Framework\Adapter\Translation\Translator" />
      </service>
  </services>

</container> ```

### AttributeAdapter

This class can be used to customize the export of all attributes.

`src/Export/Adapters/AttributeAdapter.php` ```php <?php

declare(strict_types=1);

namespace FINDOLOGIC\ExtendFinSearch\Export\Adapters;

use FINDOLOGIC\Export\Data\Attribute; use FINDOLOGIC\FinSearch\Export\Adapters\AttributeAdapter as OriginalAttributeAdapter; use Shopware\Core\Content\Product\ProductEntity;

class AttributeAdapter extends OriginalAttributeAdapter {

  public function adapt(ProductEntity $product): array
  {
      $attributes = parent::adapt($product);

$attributes[] = new Attribute( 'Some attribute name', ['I am an attribute value!'] );

      return $attributes;
  }

} ```

### DefaultPropertiesAdapter

This class can be used to customize the export of the default properties.

`src/Export/Adapters/AttributeAdapter.php` ```php <?php

declare(strict_types=1);

namespace FINDOLOGIC\ExtendFinSearch\Export\Adapters;

use FINDOLOGIC\Export\Data\Property; use FINDOLOGIC\FinSearch\Export\Adapters\DefaultPropertiesAdapter as OriginalDefaultPropertiesAdapter; use Shopware\Core\Content\Product\ProductEntity;

class DefaultPropertiesAdapter extends OriginalDefaultPropertiesAdapter {

  public function adapt(ProductEntity $product): array
  {
      $properties = parent::adapt($product);

$properties[] = new Property( 'Some property name', ['' ⇒ 'I am a property value!'] );

      return $properties;
  }

} ```

### Autoloading

</markdown>

You only need composer autoloading in case you require additional composer dependencies.

<markdown> ![https://docs.findologic.com/lib/exe/fetch.php?t=1603273975&tok=ddd8c2&media=integration_documentation:extension.png](https://docs.findologic.com/lib/exe/fetch.php?t=1603273975&tok=ddd8c2&media=integration_documentation:extension.png)

While composer autoloading is disabled by default, you can always enable it by uncommenting the marked line in `\FINDOLOGIC\ExtendFinSearch\ExtendFinSearch`.