omikron / magento2-factfinder

omikron/magento2-factfinder

FACTFinder Webcomponents SDK

magento2-module QA: failed proprietary
Viewing version 4.0.0-rc.1. Latest version is 5.3.0. Switch to latest

FACT-Finder® Web Components for Magento 2

Packagist Version
Build status
GitHub contributors

This document helps you integrate the FACT-Finder Web Components SDK into your Magento 2 Shop. In addition, it gives a
concise overview of its primary functions. The first chapter Installation walks you through the suggested installation
processes. The second chapter “Backend Configuration” explains the customisation options in the Magento 2 backend. The
final chapter Web Component Integration describes how the web components interface with the shop system and how to
customise them.

Table of contents

Requirements

This module supports:

  • Magento 2 version 2.3 and higher
  • PHP version 7.4 and higher

Installation

To install module, open your terminal and run the command:

composer require omikron/magento2-factfinder

Optionally, you can specify a version constraint, e.g. omikron/magento2-factfinder:^1.3. Refer to Composer manual
for more information. If, for some reason, composer is not available globally, proceed to install it following the
instructions available on the project website.

Activating the Module

From the root of your Magento 2 installation, enter these commands in sequence:

php bin/magento module:enable Omikron_Factfinder
php bin/magento setup:upgrade

As a final step, check the module activation by running:

php bin/magento module:status

The module should now appear in the upper list List of enabled modules.

Also, check in the Magento 2 backend "Stores → Configuration → Advanced → Advanced" if the module output is activated.

[image: Module configuration]

Backend Configuration

Once the FACT-Finder module is activated, you can find the configurations page under "Stores → Configuration → Catalog → FACT-Finder". Here you can customise the connection to the FACT-Finder service. You can also activate and deactivate single web components, as well as access many additional settings.

Main Settings

At the top of the configurations page are the main settings. The information with which the shop connects to and authorises itself to the FACT-Finder Service are entered here. In the first line, activate your FACT-Finder integration. Before any changes become active, save them by clicking "Save Config".
In some cases, you need to manually empty the cache (Configuration and Page Cache).
Click the button "Test Connection" to check the connection to the FACT-Finder service.

Note: the channel name needs to be entered correctly to establish a connection.

Here you can also enable the rendering of category pages using FACT-Finder. More details can be found here.

At the end of the Main Settings section is an option Show 'Add to Cart' Button in Search Results. Activate this option to add a button to the products displayed on the search result page, which directly
adds that product to the shopping cart. This feature works only for simple products. For configurable products user will be redirected to product page to choose specific product variant.
Warning: The product added to the cart is identified by the variable "MasterProductNumber". To allow this function to work correctly, the field "MasterProductNumber" must be imported to the FACT-Finder backend (on fact-finder.de).

By enabling option Activate Logging, all exceptions thrown during communication with FACT-Finder server will be saved in log file var/log/factfinder.log.

Note: that is a server side communication option: Web Components behaviour won't be affected.

[image: Main Settings]

FACT-Finder version

From version 2, the module supports both 7.3 and NG. If you use lower version, please install NG submodule

Server Side Rendering

That option enables Server Side Rendering (SSR) for ff-record-list element on category and search result pages.
That means when user navigate to a page of mentioned type, the HTML output will contain the pre-rendered custom elements.
This is useful especially in terms of SEO because ff-record-list renders product data which could have much impact on page rating in browser.
Without SSR enabled, web crawlers could not have a chance to scan the element rendered content because it will not yet be rendered on the time of scanning.
The module uses Mustache.php library for template processing

Note: More information about SSR concept you can find in the article Server Side Rendering from Web Components documentation.

Advanced Settings

Advanced Settings contains additional parameters used for the ff-communication web component. Each setting is set to a
default value and has a short explanatory text attached.

Currency and Country Settings

You don't need to set currency nor country only for module purposes. It will use currently used currency and pass this information to ff-communication
component as respectively currency-code and country-code parameters. You can find these settings under Magento General settings

Optional Custom Elements

[image: Optional Custom Elements]
Some of the custom elements we offer works only when specific additional FACT-Finder modules has been purchased.
Here you can disabled them, if you do not use utilize this part of FACT-Finder functionality

Note: Paging has been added cause with infinite scrolling enabled in ff-record list, this custom element is redundant

Custom Elements Options

[image: Custom Elements Options]
In this section you can find specific custom elements attributes, the values of which, you can configure.
The values stored here are passed to specific places in the templates of the corresponding elements.

Export Settings

[image: Product Data Export]

In this section users can decide if the attributes should be exported as single fields or grouped into a multi-attribute field.
Setting Multi-Attribute to No will result attribute being part of cumulative column FilterAttribute.
Setting value to Yes will result attribute will be exported into separated column.

Attribute export is working for the attributes of type:

  • boolean
  • price
  • select
  • multiselect
  • all scalars

Numerical attributes

Setting a multi-attribute field as numerical, will cause this field to be exported to a separate multi-attribute column named NumericalAttributes.
This would easier filter configuration in FACT-Finder.

Note: Attributes which are part of configuration are always exported to FilterAttributes.

CMS Export Settings

You can export Your CMS pages to FACT-Finder to present them in suggest results.

[image: CMS Export Settings]

  • Pages Blacklist - allow user to filter out pages, which should not be exported, for example "404 Not Found page"
    should not be visible at suggested records

If you want to start using CMS export in your project, please contact a person from FACT-Finder who is assigned to your project or ask our Service Desk.

Note: CMS Export is available only via console command

Data Transfer Settings

This option configures the connection with the FACT-Finder system via FTP/SFTP. Shop data can be generated and transferred to
FACT-Finder using FTP/SFTP. FACT-Finder needs to be up to date on the product data, to ensure that components like the search work as intended.

For FTP servers you will likely specify the user and password
For SFTP servers you can use both authenication methods: key or password

Note Magento uploader does not allow files without extension. If your key file doesn't have any, please add one (for example .rsa)
Note Don't forget to specify the key passhprase if it's protected

Enter an server to which the CSV file is uploaded automatically. If you are not sure if Magento will be able to connect to your server, please use
"Check Upload connection" option.

The CSV file uses double quotes " for field enclosure and a semi-colon ; as field delimiter.

The Select additional Attributes option offers a multiple-choice list of attributes. Select all of those you want added to the CSV file.

Before starting the export by clicking Generate Export File(s) now, you need to commit all changes by clicking "Save Config".
The exception from that rule is Test Connection function which always takes the actual values from the corresponding fields.

[image: Data Transfer Settings]

Updating Field Roles

Field roles are assigned while creating new channel in FACT-Finder application, however they can be changed anytime. In this situations, You need to update field roles which are being kept in Magento database for tracking purposes.
To updates field roles, use the button Update Field Roles

Automatic Import

Once the feed file is uploaded (using FTP Export), in order FACT-Finder to start serving new data, import needs to be triggered. Module allows
You to enable automatic import which makes FACT-Finder import will be triggered, right after the feed file is uploaded onto FTP server. You can also select which of data types
should be imported automatically

  • Data (Search)
  • Suggest
    This is a multiselect field so You can select both of them

Data Export

In following section You'll get information how, to integrate Your feed with FACT-Finder. Feed is built the same way, regardless of chosen method, so You can choose from one of possible methods.

Integration Methods

FTP export

This method exports feed from shop system and uploads it to FTP server. In order to use this method of export, You need to have FTP server configured (described in section Data Transfer Settings).
Then You can click the button (visible below) to generate and then, upload file via FTP.

[image: Product Data Export]

Using of that button is dedicated mostly for ad-hoc export. In production environment You'll rather use Cron job which will do the same work without forcing You to click the export button each time You want to send new data to FACT-Finder.
To configure Cron, please activate the option Generate Export Files(s) automatically and the export will be generated every day at 01:00 server time.

In file crontab.xml You can see a expression <schedule>0 1 * * *</schedule> which is a default value however You can define your own cron expression in the module configuration (section visible below).
Value set here, will override the default crontab config.
Please remember that this setting is only for that specific task ran under Magento supervisor. It won't work until You have not system Cron configured. To do that, You'll need to add Magento Cron entrypoint to Your system crontab file.
Read this tutorial for more information

[image: Cron Configuration]

HTTP Export

Alternative way to integrate Your feed is to use builtin FACT-Finder functionality to periodically download feed from specific URL
which the feed is accessible at. This URL should be secured by Basic Auth (username and password configured at section Data Transfer Settings)
in order only authenticated users get access to. By making this URL no secured, You are allowing literally everyone to download Your feed!

Exports are available under following location: https://YOUR_SHOP_URL/factfinder/export/product/store/YOUR_STORE_ID

If there's no store id provided, feed will be generated with the default store (by default with id = 1)

You should provide this URL in Your FACT-Finder UI
[image: FACT-Finder Import settings]

Console Command

If You are a developer and want to test feed is generated correctly or You do not want to executing magento cron
You can use console command which is implementation of Command of Symfony Console Component, builtin in Magento2.
Command name: factfinder:export [TYPE]. You can add execution of this command to Your crontab file.

  • Arguments:
    • type (mandatory) - set the FeedFactory class with a type of data to be exported. If for a given type, no data provider exists, an exception will be thrown. Possible default values are product and cms.
  • Options (all optional)
    • store - define a store, which the product data will be taken from
    • skip-ftp-upload - skips the ftp upload
    • skip-push-import - skips triggering import

Web Component Integration

You can activate and deactivate any web components from the configurations page in the Magento 2 backend.

The HTML code for the web components can be found in this folder:

src/view/frontend/templates/ff

The module styles can be found in this folder

src/view/frontend/web/css/source/ff

Since Magento 2 is using Less, all source styles are written in this stylesheet language

src/view/frontend/web/css/source/_module.less

You can integrate the templates anywhere within your shop system. The recommended way is to use Magento2 layouts for that.
As an example, the ff-suggest element was integrated into the ff-searchbox template for this SDK:

<referenceBlock name="top.search">
    <action method="setTemplate" ifconfig="factfinder/general/is_enabled">
        <argument name="template" xsi:type="string">Omikron_Factfinder::ff/searchbox.phtml</argument>
    </action>
    <block class="Magento\Framework\View\Element\Template" name="factfinder.suggest" as="suggest" ifconfig="factfinder/general/is_enabled" template="Omikron_Factfinder::ff/suggest.phtml" />
</referenceBlock>

You can also instantiate block in templates using the Magento Layout API, but it's not a recommended way

<?php echo $this->getLayout()
->createBlock(\Magento\Framework\View\Element\Template::class)
->setTemplate('Omikron_Factfinder::ff/suggest.phtml')
->toHtml(); ?>

Communication Element

The main configuration element of Web Components ff-communication element is included in template src/view/frontend/templates/ff/communication.phtml which comes together with a dedicated view model src/ViewModel/Communication.php.
This template is part of the default layout, added to the after.body.start container.
It is essential for whole module to work, so make sure it is also included in your project.

Note: Avoid overriding both the template and view model.

Searchbox Integration and Functions

As soon as the FACT-Finder-Integration is activated in the configuration, the search box web component is automatically activated. It replaces your standard search in Magento2 2.

You can find the template for the FACT-Finder Search at:

src/view/frontend/templates/ff/searchbox.phtml

Once you perform a search, you will automatically be redirected to a new and improved version of the Magento 2 search result page, which works with FACT-Finder data. Additionally, FACT-Finder enriches the new search result page’s URL with relevant data, like the search’s FACT-Finder channel or the search query string. The module’s source code contains the search results’ layout definition in this XML file:

src/view/frontend/layout/factfinder_result_index.xml

Several templates are already integrated into this layout, among others ff-record-list, which displays the search results.

Process of Data Transfer between Shop and FACT-Finder

[image: Communication Overview]
By default search/suggest requests are performed directly to FACT-Finder bypassing Magento backend. However if for some reason, You want to modify request parameters
or want to modify the response before returning it to the front, You can enable Proxy.

Using Proxy

By enabling this, once a search query is sent, it does not immediately reach FACT-Finder, but is handed off to a specific controller

src/Controller/Proxy/Call.php

which hands the request to the FACT-Finder system, receives the answer, processes it and only then returns it to the frontend/web component.
You can add a afterExecute plugin using Magento Interceptor mechanism to enrich data received from FACT-Finder.

Note:
Sending each request to FACT-Finder instance trough Magento, you lose on performance as each request need to be handled first by HTTP server and then, by Magento itself. This additional traffic could be easily avoided by not activating this feature if there's no clear reason to use it.

Using FACT-Finder on category pages

Module in order to preserve categories URLs and hence SEO get use of standard Magento routing with the combination of FACT-Finder availability to pass custom parameters to search request.
Once user is landed on category page. Search request is performed immediately (thanks to search-immediate communication parameter usage).
To enable that, turn on corresponding option in Main Settings section.

Tracking

The module uses Web Components API to track following events:

  • click on product
  • add product to cart
  • purchase an order
  • user login

To track product click make sure your record template uses data-redirect directive described in Tracking guide.
Adding to cart is tracked using WEB Components API in src/view/frontend/web/js/catalog-add-to-cart-mixin.js:28 script.
To make it work, make sure that you are using base catalog-add-to-cart.js, otherwise the mixing will not be applied.
Checkout tracking is done using the ff-checkout-tracking element.
This element is added in src/view/frontend/templates/ff/checkout-tracking.phtml which extend the checkout_onepage_success layout.
If you do not use this layout in your checkout make sure you append it to your own one. For that you can use the view model src/ViewModel/Order.php which provides all necessary data from the backend to the template.
Login tracking is by additional CustomerData section ffcommunication.
This section should is configured in src/etc/frontend/sections.xml and should react to the user login action and reload containing data after that.

Modification examples

Our Magento 2 module offers a fully working integration out of the box. However, most projects may require
modifications in order to fit their needs. Here are some common customization examples.

Changing existing column names

The module has predefined column names defined in the main DI configuration etc/di.xml. These follow our feed best
practices. The default DataProvider is configured to export data for columns with same names, so in order to change column
name, you will need to add two modifications:

  • Define new column name in your custom module di.xml. The following code snippet shows how to change name for column
    Master Product Number (in module named Master):
<virtualType name="Omikron\Factfinder\Model\Export\CatalogFeed">
    <arguments>
        <argument name="columns" xsi:type="array">
            <item name="Master" xsi:type="string">CUSTOM_NAME</item>
        </argument>
    </arguments>
</virtualType>
  • Once the column name is changed in di.xml, add a plugin to the DataProvider and replace the standard name with new one.
    Remember that you do not need to copy rest of elements. They won't be removed because the DI configuration loading mechanism
    will merge all definitions into one output. Example implementation:
<type name="Omikron\Factfinder\Model\Export\Catalog\ProductType\SimpleDataProvider">
    <plugin name="custom-provider" type="YOUR_VENDOR\YOUR_MODULE\Plugin\AfterToArrayPlugin" />
</type>
public function afterToArray($subject, $result)
{
    return ['CUSTOM_NAME' => $result['Master']] + $result;
}

Finally, run bin/magento cache:clean config to replace old DI configuration with the one you just created.

Adding new column

The standard feed contains all data FACT-Finder® requires to work. However, you may want to export additional information
which is relevant for your project and not part of a default Magento 2 installation. In order to do so, let's take a look
into the FieldProvider definition:

<type name="Omikron\Factfinder\Model\Export\Catalog\FieldProvider">
    <arguments>
        <argument name="productFields" xsi:type="array">
            <item name="ImageURL" xsi:type="object">Omikron\Factfinder\Model\Export\Catalog\ProductField\ProductImage</item>
            <item name="CategoryPath" xsi:type="object">Omikron\Factfinder\Model\Export\Catalog\ProductField\CategoryPath</item>
            <item name="Attributes" xsi:type="object">Omikron\Factfinder\Model\Export\Catalog\ProductField\Attributes</item>
        </argument>
    </arguments>
</type>

The constructor argument productFields stores reference to fields that require more logic than simply retrieving
data from the product. Let's assume we want to add a new column BrandLogo containing image URLs. In your module DI, add
the new field definition in the same way as defaults are added.

Again, there is no need to copy all other field definitions: Magento will merge the existing columns with the one you just have added.
In order for your field exporter to work, it has to implement Omikron\Factfinder\Api\Export\FieldInterface.
Your class skeleton to export the brand logo could look like this:

class BrandLogo implements \Omikron\Factfinder\Api\Export\FieldInterface
{
    public function getValue(Product $product): string
    {
        // Getting products brand logo URL...
    }
}

Finally, You need to define new column in CatalogFeed definition in di.xml`.

<virtualType name="Omikron\Factfinder\Model\Export\CatalogFeed">
    <arguments>
        <argument name="columns" xsi:type="array">
            <item name="BrandLogo" xsi:type="string">BrandLogo</item>
        </argument>
    </arguments>
</virtualType>

GenericField usage

If extracting logic is just a retrieving attribute value from product without any further data transformation creating virtual type of GenericField might be used instead of implementing FieldInterface.
The constructor for this class requires only an attribute code to be exported.

<virtualType name="Omikron\Factfinder\Model\Export\Catalog\ProductField\Brand" type="Omikron\Factfinder\Model\Export\Catalog\ProductField\GenericField">
    <arguments>
        <argument name="attributeCode" xsi:type="string">manufacturer</argument>
    </arguments>
</virtualType>

Now run bin/magento cache:clean config to use the new DI configuration.

Adding custom communication parameter

Module configuration allows You to pass constant values to each params, however sometimes You may need to provide variable value i.e. depending on currently logged customer. In order to do that, You should create
custom Parameter Provider.

class CustomAddParams implements \Omikron\Factfinder\Api\Config\ParametersSourceInterface
{
       public function getParameters(): array
       {
           return [
               'add-params'  => $this->getMyVariableParameters(),
           ];
       }
}

All registered Parameters Providers are executed in loop its results are stored in associative array which in result will be passed to the frontend.

Please keep in mind, that on this level of execution, parameters will be overridden each time, Parameter Provider returns a value with a key
which already exist in the result array. By using Magento dependency injection mechanism Your Parameter Providers added from project level will be evaluated last, but If You
want to add more than one, You need to maintain their order. In following example, if parameter arrays provided by CustomProviderFirst and CustomProviderSecond have an intersection, for given key, the value
from CustomProviderSecond will be returned in a result

    <type name="Omikron\Factfinder\Model\Config\CommunicationParametersProvider">
        <arguments>
            <argument name="parametersSource" xsi:type="array">
                <item name="first" xsi:type="object">YOUR_VENDOR\YOUR_MODULE\Model\Config\CustomProviderFirst</item>
                <item name="second" xsi:type="object">YOUR_VENDOR\YOUR_MODULE\Model\Config\CustomProviderSecond</item>
            </argument>
        </arguments>
    </type>

Adding custom product data provider

If You are in need to define new product types, and its data cannot be provided by any of existing Data Providers, You should create
a custom Data Provider and map it to Your product type. This operation like previous are available via Magento DI mechanism. In your module DI add following
xml code

    <type name="Omikron\Factfinder\Model\Export\Catalog\DataProvider">
        <arguments>
            <argument name="entityTypes" xsi:type="array">
                <item name="customProductType" xsi:type="string">YOUR_VENDOR\YOUR_MODULE\Model\Export\Catalog\ProductType\CustomDataProvider</item>
            </argument>
        </arguments>
    </type>
<?php
class CustomDataProvider implements DataProviderInterface
{
    /** @var Product */
    protected $product;

    public function __construct(Product $product)
    {
        $this->product = $product;
    }

    /**
     * @inheritdoc
     */
    public function getEntities(): iterable
    {
        // Your logic
    }
}

It's a minimum configuration. $product constructor will be passed automatically and in method getEntities You should extract all required data

Configure field to be exported from variant

By default, module exports data from configurable product. Its variants override only few of fields which you can see in class:

src/Model/Export/Catalog/Entity/ProductVariation.php

This is done to provide the best performance but if you variants differs in some attributes other than configurable attributes (color, size etc.) You can configure which fields should be exported from variants.
Use variantFields argument for that.
Here is the example from module, where we want to export ImageURL from variants because some configurable attribute could have an impact on the how product looks (color is a good example).

<type name="Omikron\Factfinder\Model\Export\Catalog\FieldProvider">
    <arguments>
        <argument name="productFields" xsi:type="array">
            <item name="CategoryPath" xsi:type="object">Omikron\Factfinder\Model\Export\Catalog\ProductField\CategoryPath</item>
            <item name="Brand" xsi:type="object">Omikron\Factfinder\Model\Export\Catalog\ProductField\Brand</item>
            <item name="FilterAttributes" xsi:type="object">Omikron\Factfinder\Model\Export\Catalog\ProductField\FilterAttributes</item>
        </argument>
        <argument name="variantFields" xsi:type="array">
            <item name="ImageURL" xsi:type="object">Omikron\Factfinder\Model\Export\Catalog\ProductField\ProductImage</item>
        </argument>
    </arguments>
</type>

Troubleshooting

Removing /pub from exported URLs

If the exported feed file contains URLs with pub/ added, most probably your document root is set to the /pub folder. In order to skip this part in URL, please add following entry to your project's env.php file:

'directories' => [
    'document_root_is_pub' => true
],

Contribute

For more information, click here

You can also open a new issue if You spot a bug or just have an idea for module improvement
To check currently opened issues here.

License

FACT-Finder® Web Components License. For more information see the LICENSE file.

Changelog

v4.0.0-rc.1 - 2022.03.10

BREAKING

  • drop PHP 7.3 support
  • add PHP7.4 syntaxt

Change

  • use Magento/Coding-Standards for code styles
  • fix all possible warnings/errors reported by PHP_CodeSniffer in source code files

v3.3.0 - 2022.03.04

Fix

  • Import
  • fix error while push import feed using CLI after generate it for API version 7.x
  • fix content of informational modal window after feed export for API version 7.x
  • Configuration
  • fix "Update FieldRoles" uses wrong scope while saving to database
  • fix PushImport data types are fetched with wrong scope
  • Category Page
  • fix encoding for special characters in category names
  • SSR
  • add detection of relative url and remove forwardslash for correct redirecting to product page
  • Category Page & Search Result Page
  • fix scrollTop top page is executed on search immediate event
  • fix catalogAddToCart widget is not correctly applied to product forms

Change

  • upgrade Web Components to version 4.0.8

v3.2.2 - 2022.02.02

Fix

  • Export
  • fix variant base values are not exported if FilterAttributes are not configured to be exported from variant level

v3.2.1 - 2022.01.28

Fix

  • Category Page
  • fix category path is not correctly sorted if the parent category has id with greater number than its child

v3.2.0 - 2022.01.26

Add

  • Product Page
  • make ff-similar-products and ff-recommendation attribute max-results configurable

Improve

  • Export
    • improved diagnostic messages printed during running feed export in admin panel
    • throw Exception while running export for disabled channel
    • add support for DateTime type

Change

  • Upgrade Web Components to version 4.0.6

Fix

  • Export
  • fix false value coming from getConfigurableOptions breaks export
  • fix configurable attributes are not merged with FilterAttributes field if FilterAttributes is configured to be exported from variants

v3.1.0 - 2021.12.03

Add

  • Category Page & Search Result Page
  • add Scroll to top callback after products page change

Fix

  • Export
  • Fix feed file names were not unified for all export methods

Change

  • Upgrade Web Components to version 4.0.5

v3.0.2 - 2021.11.15

Add

  • Configuration
    • Add Enable/Disable optional custom elements in module config page

Fix

  • Upload
    • Fix missing parameters passed to UploadFactory

v3.0.1 - 2021.11.04

Add

  • Upload
  • Add Upload Directory field which allows user to define where uploaded file should be saved

Fix

  • Category Page & Search Result Page
  • fix asn-group template has not been loaded correctly

v3.0.0 - 2021.10.25

BREAKING

  • SSR
    Due to FACT-Finder filters format in GET request (multiple parameters with the same name filter) we were in need to change the implementation of:
    src/Model/Ssr/SearchAdapter.php - changed function definition
    public function search(string $query = '*', array $params = []): array to public function search(string $paramString): array
    All changes in current release are related to that breaking change

Add

  • SSR
    • Now remembers the user selected search parameters (filters, sorting, etc.)

Fix

  • Suggest
    • Category suggestion are redirected to search result page with query *

v2.3.0 - 2021.10.25

Added

  • Category Page
    • for NG version implement category-page attribute
  • Upload
    • Implement SFTP upload with public key authentication method

Fix

  • Tracking
    • Add to cart tracking throws an error on versions less than 2.4
    • Click tracking is not sent correct query on category page

v2.2.0 - 2021.10.01

Added

  • SSR
    • Add Single Hit Redirection feature when SSR is enabled
  • Export
    • Add possibility to select field to be exported as numerical in module configuration. Numerical fields will be exported in new multi-attribute column NumericalAttributes
  • Navigation
    • Add ffRedirectToSearchResultPage function which could be used to manually redirect to search result page.

Changed

Navigation

  • Remove category filter from ff-asn block on Category pages

Fix

  • SSR
    • after first search with 0 result, next will render no products even if FACT-Finder returns them
  • Import
    • PushImport triggers not implemented running method in Communication SDK for 7.3 version
  • Export
    • Fix export does not check if product options are not null in ConfigurableDataProvider::getOptions

v2.1.0 - 2021.07.15

Added

  • Add possibility to export fields from variant level. Previously export took only configurable attributes from variants and rest was copied from parent
  • Use catalogAddToCart widget on ff-record elements

v2.0.2 - 2021.06.15

Changed

  • Upgrade Web Components to version 4.0.3

Fixed

  • Fixed behaviour of Attribute export for products - if value is nullable, return an empty string instead of throwing exception

v2.0.1 - 2021.05.14

Fixed

  • Fixed "Area code is not set" during installation on Magento 2.4.2
  • Fixed Login tracking events are sent with each page reload after user was logged in.
  • Added missing idType attribute to ff-similar-products element

v2.0.0 - 2021.04.30

BREAKING

  • Removed config models interfaces which appeared to be unnecessary. Their only responsibility is to fetch stored config and it is unlikely to need a different implementation.

    • CommunicationConfigInterface
    • AuthConfigInterface
    • FeatureConfigInterface
  • Removed interfaces for classes which supposed to be treated as final, in order to maintain correct integration between Magento2 and the Web Components.

    • FieldRolesInterface
    • SessionDataInterface
  • Renamed ProductFieldInterface to FieldInterface to make it more generic. Now it could be also used for different types of export.

  • Reworked ExportProducts command. Now its a generic Export and it requires mandatory argument of type which indicates of type of data to be exported.

  • Rework tracking to use sid generated by WebComponents and for now it is executed on the storefront. Following backend observers has been removed:

    • AddToCart
    • Checkout
      From now, tracking takes place on the store front.
  • Communication layer has been entirely replaced with (PHP Communication SDK)[https://github.com/FACT-Finder-Web-Components/php-communication-sdk].

  • Improved attribute export. User can now select if a given attribute should be exported in a separate column or aggregated in multi attribute column FilterAttributes

Added

  • Add Server Side Rendering support.

Changed

  • Simplify module configuration by remove Activated Web Components Section. Whether an element should be rendered or not should be determined by the template implementation, not by the configuration
  • Upgrade Web Components to version 4.0.2
  • Searchbox element is not moved to content block in factfinder_result_index layout

Fixed

  • Prevent array to string conversion when exporting products select attribute option
  • Event data coming from searchbox element is not URLencoded before redirecting to search result page

v1.6.5 - 2020.12.16

Changed

  • Upgrade Web Components to version 3.15.10

Fixed

  • Fix redirect URL in controller_action_predispatch_* observer
  • Exclude category filter from URL on category pages
  • Fix CMS export does not export pages assigned to all stores when exporting from specific store scope
  • Fix CMS export does not export any page if nothing is selected in the export blacklist

v1.6.4 - 2020.10.15

Changed

  • Upgrade Web Components to version 3.15.8

Fixed

  • Make category optional in CategoryPath view model, preventing errors on Varnish ESI

v1.6.3 - 2020.09.23

Fixed

  • Magento CSP compatibility
  • Filter non-printable characters in export feed

v1.6.2 - 2020.08.06

Added

  • Add information about checkout tracking to the README file
  • Add troubleshooting section to the README file

Changed

  • Export manufacturer using a separate field model
  • Upgrade Web Components to version 3.15.4

Fixed

  • Fix all GET params containing spaces when using the Proxy

v1.6.1 - 2020.05.11

Fixed

  • Fixed stack overflow error on IE11

v1.6.0 - 2020.04.30

Added

  • Track requests coming from internal IPs

Changed

  • Upgrade Web Components to version 3.14.1
  • Deprecate search-navigation.js: search redirection is now implemented using a
    dedicated JS component on the relevant elements.

v1.5.1 - 2020.04.02

Added

  • Added RECOMMENDATION to available import type to be pushed after feed is uploaded
  • Added Check FTP connection functionality in the module configuration

Changed

  • Upgrade Web Components to version 3.13.0

v1.5.0 - 2020.03.06

Changed

  • Improve extendability of product export (by @aptudock)

Fixed

  • Fixed cron feed export is now working correctly with multistore
  • Prevent slider filter requests from being redirected to search result page

v1.4.2 - 2020.02.06

Changed

  • Upgrade Web Components to version 3.11.4

Fixed

  • Follow-up fixup to encoding parameter names to make them parsed correctly by http_build_query
  • Enforce correct category path order in ViewModel
  • Prevent merging and bundling of Web Components

v1.4.1 - 2020.01.28

Fixed

  • Remove typo in campaign template which prevents the rendering
  • Fixed filterCategory not encoded correctly for categories with more words in name when using Proxy

v1.4.0 - 2019.12.17

Changed

  • Upgrade Web Components to v3.11.1
  • Only offer Add to cart button for products without variants

Fixed

  • Fix handling of REST calls via proxy
  • Fix sorting of campaign blocks on search result page
  • Fix tracking of products with options and submit correct master ID
  • Prevent duplicate login tracking when customer data is reloaded

v1.3.4 - 2019.11.08

Added

  • Improve CI suite by introducing PHPMD checks

Changed

  • Upgrade Web Components to v3.9.0

Fixed

  • The ASN is now compatible with IE11
  • Check current configuration before switching layout on category pages
  • Prevent duplicate login tracking
  • Remove wrapping link tag in suggest which was parsed by bots

v1.3.3 - 2019.10.21

Changed

  • Improve German language package
  • Upgrade Web Components to v3.7.0

Fixed

  • Correctly merge communication params added via layout
  • Prevent search request before redirecting to search result page

v1.3.2 - 2019.08.30

Fixed

  • Fix tracking model compatibility with Magento 2.2.*

v1.3.1 - 2019.08.19

Fixed

  • Fix log plugin compatibility with Magento 2.2.*

v1.3.0 - 2019.08.14

Added

  • Add missing product campaigns on product detail page

Changed

  • Remove ff-navigation
  • Render category pages using Web Components
  • Upgrade Web Components to v3.6.0

Fixed

  • Downgrade magento/module-directory to be compatible with Magento 2.2

v1.2.0 - 2019.07.24

Added

  • Add data providers for bundle and grouped products

Changed

  • Add push FACT-Finder import on cron feed export

Fixed

  • Allow empty multiselect fields in system configuration
  • Base URL is now set, if needed, before redirect in search/navigation
  • Currency code is now taken from store config
  • Fix use-cache communication parameter value

v1.1.2 - 2019.06.28

Changed

  • Upgrade Web Components to v3.4.0

Fixed

  • Fix fatal PHP error which occurs on cron export

v1.1.1 - 2019.05.16

Added

  • Add logging to tracking exceptions

Changed

  • Upgrade Web Components to v3.3.1

Fixed

  • Skip tracking if the FACT-Finder integration is disabled in the backend

v1.1.0 - 2019.04.05

Added

  • Replace main navigation with the <ff-navigation> component

Changed

  • Upgrade Web Components to v3.1.1

Fixed

  • Fix export attribute selection in system config

v1.0.0 - 2019.03.18

Added

  • Add CMS export

Changed

  • Refactor product export
  • Reorganize folder structure: source code is now found under src
  • Upgrade Web Components version to 3.1.0
  • Serve JS files using RequireJS

v0.9-beta.11 - 2019.03.01

Changed

  • Drop support for PHP 7.0
  • Replace Communication helper with dedicated models
  • Remove core controller rewrites and perform redirects using event observers
  • Upgrade Web Components version to 3.0

Removed

  • ResultRefiner: Use DI or plugins to edit the JSON result

v0.9-beta.10 - 2019.02.04

Added

  • Added possibility to enable FACT-Finder server responses logging
  • Added possibility to push data import to FACT-Finder. Previously, only suggest import was pushed
  • Added <ff-campaign-redirect> web component support

Changed

  • Changed additional attributes source model to shows only products attributes
  • Replaced all .css files with .less
  • Removed hardcoded css files from page layout

Fixed

  • Fixed authorization in HTTP export

v0.9-beta.9 - 2019.01.09

Fixed

  • Add missing title to factfinder_result_index site
  • Exclude FACT-Finder Web Components js script from minification

Changed

  • Remove 'keep-filters' parameter from module configuration
  • Load stylesheets via LESS
  • Drop support for PHP 5.6

Added

  • Added possibility to export additional attributes in separate columns
  • Adds possibility to configure frequency of feed file generation by Cron
  • Introduce coding standards based on the Magento ECG one

v0.9-beta.8 - 2018.12.17

Fixed

  • Correct type of seo-prefix parameter

Changed

  • Changed ff-suggest styles to differ from native Luma and Blank Magento theme
  • Changed the ff-communication location from header.panel to after.body.start

Added

  • Allow user to set value of the disable-single-hit-redirect parameter in module configuration

v0.9-beta.7 - 2018.11.29

Fixed

  • Prevents flashing of unstyled content (FOUC) on web browsers which natively doesn't support web components
  • Gets correct "EAN" and "Manufacter" atribute values depending on attribute type set. For instance if selected attribute is a type of select, correct label is returned instead of its option identifier

Changed

  • Upgraded FACT-Finder WebComponents to version 1.2.14

v0.9-beta.6 - 2018.11.23

Fixed

  • removed the product limit on feed export
  • returns simple product sku as master product number when it has a relation to nonexistent configurable product
  • the price of a configurable product is now correctly exported as the cheapest price
  • images urls are now exported correctly with respect the store, the feed file is exported from
  • A missing ampersand character between parameters in http query is now added in checkout tracking

Changed

  • test connection functionality now uses data send from form with no need to save the configuration before checking the connection
  • ff-communication component is now is now included in the server response when entering the page and just the parameters sid and uid are fetched dynamically
  • change the Helper\Product methods access level to protected making this class easier to override

Added

  • allow user to choose which visibilities should be applied to collection filter
  • divide product collection into batches in order to prevent memory exhaustion on product collection load

v0.9-beta.5 - 2018.10.31

Fixed

  • fix module structure and composer.json file allowing install module by composer
  • ff-communication component is now download by Magento Customer Sections mechanism, which allowed to turn FPC on

Added

  • Feed Export: Export feed file is now available via separate link
Versions
Version Stability QA Status Released
5.3.0 stable Fail 2026-05-26 09:55:57
5.2.1 stable Not tested 2025-07-17 08:46:08
5.2.0 stable Not tested 2025-05-15 14:51:23
5.1.1 stable Not tested 2025-03-21 12:39:14
5.1.0 stable Not tested 2025-02-20 11:08:05
5.0.3 stable Not tested 2025-01-20 11:49:03
5.0.2 stable Not tested 2024-12-09 14:49:30
5.0.1 stable Not tested 2024-11-07 15:13:33
4.4.0 stable Not tested 2024-09-09 11:05:39
5.0.0 stable Not tested 2024-07-08 12:39:33
4.3.3 stable Not tested 2024-04-17 11:10:27
4.3.2 stable Not tested 2024-04-12 09:57:59
4.3.1 stable Not tested 2024-04-02 10:38:17
4.3.0 stable Not tested 2024-01-16 08:25:59
4.2.2 stable Not tested 2023-11-10 11:40:00
4.2.1 stable Not tested 2023-09-25 06:50:01
4.2.0 stable Not tested 2023-09-18 10:58:50
4.1.7 stable Not tested 2023-08-08 12:03:05
4.1.6 stable Not tested 2023-07-19 05:54:38
4.1.5 stable Not tested 2023-07-05 06:39:37
4.1.4 stable Not tested 2023-05-22 08:25:08
4.1.3 stable Not tested 2023-05-15 10:32:33
4.1.2 stable Not tested 2023-04-14 09:46:45
4.1.1 stable Not tested 2023-03-13 10:14:20
4.1.0 stable Not tested 2023-02-23 14:19:42
4.0.1 stable Not tested 2023-02-07 11:29:42
4.0.0-rc.4 RC Not tested 2023-01-13 12:06:19
3.7.3 stable Not tested 2023-01-13 10:24:43
3.7.2 stable Not tested 2022-11-29 06:47:36
3.7.1 stable Not tested 2022-10-17 06:49:29
3.7.0 stable Not tested 2022-09-09 08:21:59
3.6.0 stable Not tested 2022-08-25 09:22:47
3.5.2 stable Not tested 2022-08-08 08:09:49
3.5.1 stable Not tested 2022-06-27 10:03:24
2.6.2 stable Not tested 2022-05-30 07:10:50
3.5.0 stable Not tested 2022-05-30 07:09:21
4.0.0-rc.3 RC Not tested 2022-05-16 13:39:58
2.6.1 stable Not tested 2022-05-11 06:30:56
3.4.1 stable Not tested 2022-05-11 06:30:33
2.6.0 stable Not tested 2022-04-14 05:51:59
3.4.0 stable Not tested 2022-04-14 05:44:14
4.0.0-rc.2 RC Not tested 2022-03-31 10:27:04
4.0.0-rc.1 RC Not tested 2022-03-10 13:37:43
2.5.0 stable Not tested 2022-03-04 06:18:37
3.3.0 stable Not tested 2022-03-04 06:18:29
2.4.2 stable Not tested 2022-02-02 06:18:30
3.2.2 stable Not tested 2022-02-02 06:18:06
3.2.1 stable Not tested 2022-01-28 10:19:25
2.4.1 stable Not tested 2022-01-28 10:19:03
2.4.0 stable Not tested 2022-01-26 11:37:34
3.2.0 stable Not tested 2022-01-26 11:37:15
2.3.3 stable Not tested 2021-12-13 11:58:35
3.1.0 stable Not tested 2021-12-03 10:25:24
2.3.2 stable Not tested 2021-11-15 07:17:33
3.0.2 stable Not tested 2021-11-15 07:13:46
2.3.1 stable Not tested 2021-11-04 14:27:13
3.0.1 stable Not tested 2021-11-04 14:26:19
3.0.0 stable Not tested 2021-10-25 09:24:25
2.3.0 stable Not tested 2021-10-25 09:23:08
2.2.0 stable Not tested 2021-10-25 08:52:18
1.8.0 stable Not tested 2021-10-01 12:59:12
1.7.0 stable Not tested 2021-07-15 10:47:45
2.1.0 stable Not tested 2021-07-15 10:46:01
2.0.2 stable Not tested 2021-06-15 15:44:00
1.6.8 stable Not tested 2021-06-15 15:43:47
2.0.1 stable Not tested 2021-05-14 09:58:07
1.6.7 stable Not tested 2021-05-14 09:57:36
2.0.0 stable Not tested 2021-04-30 09:48:37
1.6.6 stable Not tested 2021-04-29 08:50:09
1.6.5 stable Not tested 2020-12-16 08:55:10
1.6.4 stable Not tested 2020-10-15 08:44:33
1.6.3 stable Not tested 2020-09-23 07:55:11
1.6.2 stable Not tested 2020-08-06 08:06:41
1.6.1 stable Not tested 2020-05-11 10:17:54
1.6.0 stable Not tested 2020-04-30 11:42:57
1.5.1 stable Not tested 2020-04-02 08:08:20
1.5.0 stable Not tested 2020-03-06 06:24:26
1.4.2 stable Not tested 2020-02-06 05:56:05
1.4.1 stable Not tested 2020-01-28 09:32:17
1.4.0 stable Not tested 2019-12-17 09:33:31
1.3.4 stable Not tested 2019-11-08 09:59:11
1.3.3 stable Not tested 2019-10-21 09:02:12
1.3.2 stable Not tested 2019-08-30 08:21:26
1.3.1 stable Not tested 2019-08-19 07:53:29
1.3.0 stable Not tested 2019-08-14 08:13:33
1.2.0 stable Not tested 2019-07-24 06:41:49
1.1.2 stable Not tested 2019-06-28 04:19:41
1.1.1 stable Not tested 2019-05-16 12:27:43
1.1.0 stable Not tested 2019-04-05 11:04:28
1.0.0 stable Not tested 2019-03-18 12:29:14
0.9-beta.11 beta Not tested 2019-03-01 05:27:01
0.9-beta.10 beta Not tested 2019-02-04 13:26:46
0.9-beta.9 beta Not tested 2019-01-09 08:38:14
0.9-beta.8 beta Not tested 2018-12-17 06:41:17
0.9-beta.7 beta Not tested 2018-11-29 14:37:18
0.9-beta.6 beta Not tested 2018-11-23 11:06:44
0.9-beta.5 beta Not tested 2018-10-31 09:48:21

Requires 11

Package Constraint
php ~8.1.0||~8.2.0||~8.3.0||~8.4.0
omikron/factfinder-communication-sdk ^0.9.9
magento/framework ^103.0.7
magento/module-catalog ^104.0.7
magento/module-configurable-product ^100.4.7
magento/module-directory ^100.4.7
magento/module-store ^101.1.7
magento/module-inventory 1.2.*
salesforce/handlebars-php 3.*
ext-json *
phpseclib/phpseclib ~3.0

Requires-dev 5

Package Constraint
pdepend/pdepend ^2.16
phpmd/phpmd ^2.15
phpunit/phpunit ^9.6
magento/magento-coding-standard *
friendsofphp/php-cs-fixer ^3.58

No QA results yet

QA pipelines haven't run for this version. Status appears here once the vendor publishes a tagged release that gets ingested.

License
proprietary
Authors
  • Omikron Data Quality GmbH
Make it pay

Turn an existing module into recurring revenue.

If you already maintain a Magento 2 module on GitHub or GitLab, listing it on Packagento takes about five minutes. We mirror your tags, handle distribution signing, and route paid licenses through Stripe Connect, so you can keep shipping the way you already do.