Git Product home page Git Product logo

magento2-module's People

Contributors

avstudnitz avatar danielimi avatar davidverholen avatar duboiss avatar fritzmg avatar grzegorz-jamroz avatar jaroslawweselski avatar mekedron avatar paulfcdd avatar rayn93 avatar thecapypara avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

magento2-module's Issues

CSS classes/styles too general

The CSS styles included with this extension should be changed be more specific (and may be the generated HTML structure of the FACT Finder Webcomponents need to be changed too).

For example, the magento2-module includes the following CSS:

.product-name {
width: 300px;
position: relative;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
}

This will affect all product names across the whole shop - at least with the default Magento themes (blank and luma), not just the suggest element.

Another issue occurs with the .ff-suggest class. The module includes the following CSS:

.ff-suggest {
background-color: white;
box-shadow: 1px 1px 10px lightgrey;
}

The FACT Finder Webcomponents generate the following HTML:

<ff-suggest layout="block" class="x-scope ff-suggest-0">
    <div style="position: relative; width: 100%" class="style-scope ff-suggest">
        <div id="ffSuggestContainerWrapper" class="style-scope ff-suggest hideffSuggestContainerWrapper">
            <div id="ffSuggestContainer" class="style-scope ff-suggest blockLayout">
                <section id="searchContainer" class="searchTermContainer">
                    <!-- … -->
                </section>
                <section id="productContainer" class="productsContainer">
                    <!-- … -->
                </section>
            </div>
        </div>
    </div>
</ff-suggest>

So in total there are 3 HTML elements that have the CSS class ff-suggest and they are all nested. Thus the background color and box-shadow is applied to all of these.

Use of self and private

Hello,

You are respecting the majority of Magento 2 best practices and the code is clean.
However, the use of private is not deprecated but usually borring for developpers.

While overriding Omikron\Factfinder\Controller\Router, I wanted to change
public const FRONT_NAME = 'FACT-Finder';
The associated function does :
private function isValidRequest(RequestInterface $request): bool { return !$request->getControllerName() && preg_match('#^(/' . self::FRONT_NAME . '/)#', $request->getPathInfo()); }

In my own class inheriting from yours I can't override the constant because it's use self and not $this.
Second problem I have to write completely isValidRequest but since it's private I have also to write completely the function match and since it used another private variable $actionFactory ... Well I rewrited the entire class just because self isn't $this and others private.

I have no other example right now since I'm beginning the modification of the module, but the use of "private" is really borring most of the time, protected is preferred.

Could you in a future update modify this class at least ?
Thank you

Access multi attribute value in record list

How can I access a value of a multi attribute field from a record list? I have the value indexed with |Key1=Value1|Key2=Value2|Key3=Value3| and set the field to type "Multi-Attribute" in the Fact-Finder configuration. How can I access it?
I tried record.FieldName.Key1, but with no success.

FFWEB-796 - Data Export doesn't support FACT Finder import via URL

  • FACT-Finder-Web-Components Magento2-Module version (see composer.json):
    0.1.0 (release v0.9-beta.2)

  • Magento edition and version:
    Magento CE 2.2.4

  • PHP version:
    7.1.13

  • Expected behavior:

  • Actual behavior:

    • FACT Finder Export function is executed for each store
    • export files are saved to var/factfinder/filename.csv
    • FF Extension tries to upload generated files to FTP and deletes files afterwards
    • FF cronjob can't fetch data
  • Steps to reproduce:

    • configure import settings in FF backend with correct URL
    • adapt .htaccess so URL can be reached from FF server
    • execute data export on Magento server
    • execute data import on FF server

cannot change hard coded column names

Going from 0.9 beta to 1.x some of the default column names have changed. However, there does not seem to be an easy way of changing the exported column names - other than replacing some classes and methods here and there.

Our FACT-Finder channels are set up with specific column names. Changing them would be a lot of work, since we would also have to change rules, campaigns etc.

default header-navigation template produces invalid markup

The default header-navigation.phtml

<nav class="navigation" data-action="navigation">
<ul data-mage-init='{"menu":{"responsive":true, "expanded":true, "position":{"my":"left top","at":"left bottom"}}}'>
<ff-navigation fetch-size="3" unresolved layout="horizontal" flyout="true" mobile="false">
<ff-navigation-item type="header" class="level0 level-top">
<li class="level0 level-top parent">
<a class="level-top ff-navigation-link" onclick="ffClickNavigationLink(event)" href="{{__TARGET_URL__.url}}">
<span class="ui-menu-icon ui-icon ui-icon-carat-1-e"></span>
<span>{{name}}</span>
</a>
</li>
</ff-navigation-item>
<ff-navigation-item>
<li>
<a class="ff-navigation-link" onclick="ffClickNavigationLink(event)" href="{{__TARGET_URL__.url}}">
<span class="ui-menu-icon ui-icon ui-icon-carat-1-e"></span>
<span>{{name}}</span>
</a>
</li>
</ff-navigation-item>
</ff-navigation>
</ul>
</nav>

currently produces invalid markup, since it is nesting other HTML elements between <ul> and <li>. The only allowed parents for <li> are <ol> and <ul> and the only allowed children for <ul> are <li>.

https://www.w3.org/TR/2012/WD-html-markup-20121025/ul.html#ul-content-model

console errors non-uniqure id

  • FACT-Finder-Web-Components Magento2-Module version (see composer.json):
  • Magento edition and version: 2.2.5
  • PHP version: 7
  • Expected behavior: no console errors
  • Actual behavior: console errors
  • Steps to reproduce: search for shirt, take a look at the console
    image

product image URL still contain pub/ folder when using pub/ as document root

As recommended by the official documentation we have set the document root of our Magento 2.2.6 installation to the pub/ folder. However, now the product images in the FACT Finder Suggest and Search results will not work.

This is because the export, when executed via Magento's cron, is unaware of the web server's DocumentRoot and thus the product image URLs will still contain the pub/ folder.

Though I am not sure if this is may be a configuration isse on Magento's side. However, I haven't found any configuration that could be done for this case.

Update documentation

Once the Attribute Export will be update, we are going to have a lot of discrepancies between our documentation and the actual implementation. Also, some things might not be too clear (e.g. configurable attributes, numerical attributes, etc). Our documentation needs to take these changes into account.

We should consider how to deal with docs in the future too. The current approach is quite good, but I'd prefer splitting the single topics over dedicated files.

Currently we have the docs published to GH pages, maybe we can have a dedicated branch for them to be more flexible with releases. Alternatively, we can look again into the project wiki.

FFWEB-697 - add support for CMS export

We have several customers which also use FACT-Finder as their CMS search.
To do so, we need the data from Magento.
Pleas add a function which allows the customer to export the CMS data, similar to Magento 1.

Magento2 has a new CMS System in the Enterprise Edition, we also have to look into this.
https://www.bluefootcms.com/

CMS collection filters are not applied correctly

  • FACT-Finder-Web-Components Magento2-Module version (see composer.json): v1.6.4
  • Expected behavior: CMS pages are loaded into the feed collection
  • Actual behavior: When the blacklist selector is empty, NOT IN(NULL) is applied to the collection

Attribute export

Custom Magento attributes should be exported:

  • in a dedicated field
  • in a multiattribute field
  • in a multiattribute field, containing only numerical values

Such a feed structure allows an easy and effective management in FACT-Finder. In order to obtain such a structure, we need to refactor the feed generation and its configuration in the admin panel.

checkout_submit_all_after observer only executed via API

  • FACT-Finder-Web-Components Magento2-Module version: 1.5.1 (also affects current version)
  • Magento edition and version: 2.3.2 CE
  • PHP version: 7.1
  • Expected behavior: Omikron\Factfinder\Observer\Tracking\Checkout should be executed whenever checkout_submit_all_after is dispatched
  • Actual behavior: Omikron\Factfinder\Observer\Tracking\Checkout is only executed when checkout_submit_all_after is dispatched via REST API

Currently the Omikron\Factfinder\Observer\Tracking\Checkout is only registered via etc/webapi_rest/events.xml. This means checkout tracking is only done, when the order is placed via Magento's REST API, like it is done in the default implementation of Magento's One Page Checkout.

However, if you use a custom checkout method in the front end that does not use the REST API to place the order, checkout tracking will never take place.

To solve this, may be simply register the observer also in etc/frontend/events.xml?

Cannot load ESI blocks on category pages

  • FACT-Finder-Web-Components Magento2-Module version (see composer.json): 1.6.0
  • Magento edition and version: 2.4
  • PHP version: 7.2

When Varnish cache is active, all requests to the ESI controller fail, see screenshot.

image

Bundle Products with dynamic pricing have price 0

  • FACT-Finder-Web-Components Magento2-Module version (see composer.json):
    1.1.0
  • Magento edition and version:
    2.2.8 (should affect all, but the endless recursion bug - see below - was introduced in 2.2.7 or 2.2.8)
  • PHP version:
    7.1.25
  • Expected behavior:
    Bundles with dynamic pricing should have the price of the combined default selections
  • Actual behavior:
    Bundles with dynamic pricing have the price 0
  • Steps to reproduce:
  1. create some simple products with prices (for more "fun" add tier pricing and special prices)
  2. create a bundle containing several simple products (marked as default) and set it to dynamic pricing

The bundle products should have the default selections applied for the "default" price calculation.
The Implementation below shows our current approach.

Be aware that since 2.2.7 or 2.2.8 there is a problem with an endless recursion on the getFinalPrice method of the bundle (I'm not 100% sure if it's generally the case or a project specific bug).
It might also have something to do with simple products not being in stock.

Example Implementation of Bundle Price Converter

<?php
declare(strict_types=1);

namespace Brandung\Factfinder\Model\ProductExport\BundleConverter;

use Brandung\Factfinder\Model\FactfinderProduct;
use Brandung\Factfinder\Model\ProductExport\DefaultConverter\FieldDataConverterInterface;
use Magento\Bundle\Model\Product\Type;
use Magento\Catalog\Model\Product;
use Magento\Framework\Serialize\SerializerInterface;

class BundlePriceConverter implements FieldDataConverterInterface
{
    /**
     * @var SerializerInterface
     */
    private $serializer;

    public function __construct(SerializerInterface $serializer)
    {
        $this->serializer = $serializer;
    }

    /**
     * @param Product $product
     * @param string[] $targetFieldData
     * @return string[]
     */
    public function convert(Product $product, array $targetFieldData): array
    {
        $usedSelections = [];
        foreach ($this->getDefaultSelections($product) as $selectionId => $defaultSelection) {
            $selectionId = $defaultSelection->getData('selection_id');
            $usedSelections[$selectionId] = $selectionId;
            $product->addCustomOption('selection_qty_' . $selectionId, $defaultSelection->getData('selection_qty'));
        }
        $product->addCustomOption('bundle_selection_ids', $this->serializer->serialize($usedSelections));
        $targetFieldData[FactfinderProduct::PRICE] = round($product->getFinalPrice(), 2);
        return $targetFieldData;
    }

    /**
     * @param Product $product
     * @return Product[]
     */
    private function getDefaultSelections(Product $product): array
    {
        /** @var Type $typeInstance */
        $typeInstance = $product->getTypeInstance();
        $selections = $typeInstance->getSelectionsCollection($typeInstance->getOptionsIds($product), $product);
        /** @var Product[] $defaultSelections */
        return array_filter($selections->getItems(), function (Product $productSelection) {
            return (bool)$productSelection->getData('is_default') === true;
        });
    }
}

Suggest: 401 (Unauthorized) Error

  • FACT-Finder-Web-Components Magento2-Module version:
    • v0.9-beta.4
  • Magento edition and version:
    • CE 2.2.5
  • PHP version:
    • 7.1.13
  • Expected behavior:
    • When clicking a product in the suggest window the user should be redirected to the detail page of the product
  • Actual behavior:
    • An error appears in the console and no redirection happens
  • Steps to reproduce:
    • Enter a search term into the search bar (don't submit)
    • Select an item from the suggest (click it or navigate to it with arrow keys and press enter)
  • Additional information
    • Console error:
GET https://example.fact-finder.de/FACT-Finder/rest/v1/records/channel?sid=qmm8spg40ssfm037lnscb1ajjrqnn5&recordId=123456&format=json 401 (Unauthorized)
  • Json Response:
<items>
  <apiError>
    <error>
      You need to have valid user credentials to access this page.
    </error>
    <stacktrace/>
  </apiError>
</items>

no central "export" function anymore

Previously in the beta versions of the extension, the Omikron\Factfinder\Model\Export\Product class provided an exportProducts function which could simply be called from anywhere, if you want to manually trigger an export of the product feed.

In the current version no such method seems to exist. Instead, the cron and the backend controller have to use duplicated code, where the following happens:

  1. generate filename
  2. generate stream
  3. initialize stream with feed generator factory
  4. execute FTP upload using the stream
  5. push import command to FF server (this is missing from the cron, see #135)

To avoid code duplication, this should be transferred to some form of helper service instead.

FFWEB-998 : cleanValue removes Umlauts (etc.) from description

The current implementation of Omikron\Factfinder\Helper\Product::cleanValue removes a lot of characters from the description and short description:

// do not allow special chars in values
$value = preg_replace('/([^A-Za-z0-9 -])+/', '', $value);

However, obviously this is not acceptable for any non-English store, since it also removes Umlauts or other language specific characters.

enter key input listener is too global

  • FACT-Finder-Web-Components Magento2-Module version (see composer.json): 1.1.2
  • Magento edition and version: 2.2.8
  • PHP version: 7.1.25

Expected behavior

When entering an address in the address bar of the browser and hitting 'enter', I expect that address to be opened by the browser. When hitting Ctrl+Shift+Del (to delete the browser cache) and then hit 'enter', I expect no reaction from the web application.

Actual behavior

Whenever you hit the enter key, a global key listener will either execute a search or a redirect. So when you are already in the shop, but not on the FACT-Finder/result page and you enter a new address in the address bar of the browser - the browser will actually redirect you to the FACT-Finder/result page upon hitting enter, instead of opening the newly entered address.

Similarly, if you clear your browser's cache with Ctrl+Shift+Del and then Enter, FACT-Finder reacts to that as well.

Steps to reproduce

  1. Go to any page in your Magento store.
  2. Enter a new address in the address bar of your browser.
  3. Hit enter.

The browser will open the FACT-Finder/result page instead of the newly entered address.

It's very irritating ;)

Exported CSV doesn't contain any products, only the header-row

  • FACT-Finder-Web-Components Magento2-Module version (see composer.json): 1.6.1
  • Magento edition and version: 2.3.2

Expected behavior

When I execute bin/magento factfinder:export:products on the server, the exported CSV-file contains all my products.

Actual behavior

The exported file only contains the header-row, but nothing else:

ProductNumber;Master;Name;Description;Short;ProductURL;Price;Brand;Availability;MagentoId;ImageURL;CategoryPath;Attributes;HasVariants

There is also no log in var/log/factfinder.log even when this is activated in the backend. I also don't see the message Store $storeId: File $path has been generated. after the export is done. Also there are no files for the other storeViews.

Steps to reproduce

I have actually no idea, it worked in one Magento 2.3.2 installation, it doesn't work in the other. I can't seem to find the problem, everything is configured the same in the FactFinder extension. Products are enabled & assigned to categories.

What needs to be fulfilled so that a product is inside the exported CSV?

FFWEB-482 - move composer.json

Shouldn't the composer.json be moved to the project root? Otherwise this module cannot be installed and updated via composer.

Not compatible with CSP (Content Security Policy)

  • FACT-Finder-Web-Components Magento2-Module version (see composer.json): ^1.5, required by NG module
  • Magento edition and version: Commerce 2.3.5
  • PHP version: 7.2
  • Expected behavior: Usage of the extension does not log CSP errors to the browser's dev console
  • Actual behavior: CSP errors are logged to the browser's dev console:
[Report Only] Refused to connect to 'https://ng-demo.fact-finder.de/fact-finder/rest/v3/campaign/<customer>/product?sid=<..>&productNumber=<..>&format=json' because it violates the following Content Security Policy directive: "connect-src geostag.cardinalcommerce.com geo.cardinalcommerce.com 1eafstag.cardinalcommerce.com 1eaf.cardinalcommerce.com centinelapistag.cardinalcommerce.com centinelapi.cardinalcommerce.com 'self' 'unsafe-inline'".
  • Steps to reproduce: Install module, configure it and open a product that has recommendations or simply search something

Further info:
Externally loaded resources should be whitelisted.
This is explained here:
https://devdocs.magento.com/guides/v2.3/extension-dev-guide/security/content-security-policies.html
When we enable CSP for production, the current state of the module will stop working. Of course we can add a custom module where we whitelist the sources, but imho the FF module should take care of that.

Magento 2.2 currently not supported

While the Readme states that the Module is compatible with >= 2.2, it is currently not installable with 2.2

  • FACT-Finder-Web-Components Magento2-Module version (see composer.json): latest

  • Magento edition and version: 2.2.9

  • PHP version: 7.1

  • Expected behavior:
    Module should be installable with 2.2.9

  • Actual behavior:
    Composer Restriction forbids installing with 2.2.9

  • Steps to reproduce:
    Install Magento 2.2.9
    Try to install factfinder magento2 integration via composer

minimum version for Magento_Directory is 100.3.0 while Magento 2.2.9 is on 100.2.8
See: https://github.com/magento/magento2/blob/2.2.9/composer.json#L131

Or is there a specific reason why this Directory Version is not supported?

Can't add new Field into CSV

  • FACT-Finder-Web-Components Magento2-Module version (see composer.json): 1.3.2
  • Magento edition and version: 2.3.3
  • PHP version: 7.2
  • Expected behavior: Add datas to the .csv export
  • Actual behavior: no data added
  • Steps to reproduce: Just follow your own instructions in this very github

I checked in Omikron\Factfinder\Model\Export\Catalog\ProductType\SimpleDataProvider , the data is in the array returned by the toArray function, but the data is not in the CSV

search does not work on pages with multiple fragments in its path

  • FACT-Finder-Web-Components Magento2-Module version (see composer.json): 1.1.2
  • Magento edition and version: CE 2.2.8
  • PHP version: 7.1.25
  • Expected behavior: when doing a search, the extension should always navigate to the search result page (/FACT-Finder/result)
  • Actual behavior: when doing a search on a page, that contains multiple path fragments, the wrong URL will be requested for the FACT-Finder result page
  • Steps to reproduce: open any page in your Magento shop that contains multiple path fragments, e.g. a subcategory page like example.org/vegetables-and-fruits/fruits.html. Then on that page, enter a search query into the FACT-Finder search box. It will redirect you to example.org/vegetables-and-fruits/FACT-Finder/result instead of example.org/FACT-Finder/result

Another example: doing a search on a page with an URL like example.org/custom/route/ will redirect you to example.org/custom/route/FACT-Finder/result.

FFWEB-997 : Export of custom multi-attributes is not supported

Currently, custom attributes can be added to the export feed via the Magento backend. They are added to the Attributes filed in the file (which contains all chosen custom attributes separated by |).
e. g.

" | Attribute1=Value1 | Attribute2=Value2 | Attribute3=Value3 | ... | "

However, if the custom attribute itself contains a multi-attribute value, it can't be imported by FACT Finder.
e. g.

" | Attribute1=Value1 | Attribute2= |Attribute2_1=Value2_1|Attribute2_2=Value2_2| | Attribute3=Value3 | ... | "

Attribute2 will be ignored at the import.

I would suggest exporting all custom attributes in separate columns in the csv.

Documentation - improve export section

It is not immediately obvious that there are several variants - Pull (FTP export) and Push (Http export). Especially when scrolling down the page, it is easy to overlook "Http Export".

In addition, the "Cron configuration" should not be listed under "Http Export", since the setting is made directly in FACT-Finder. This should also be explained shortly.

Unable to run cronjob

  • FACT-Finder-Web-Components Magento2-Module version (see composer.json):
    1.1

  • Magento edition and version:
    Magento Commerce 2.3.1

  • PHP version:
    7.1

  • Expected behavior:
    The cronjob for feed export is ran

  • Actual behavior:
    The following fatal PHP error occurs

Stack trace:
#0 /src/www/vendor/magento/framework/ObjectManager/ObjectManager.php(70): Magento\Framework\ObjectManager\Factory\Dynamic\Developer->create('Omikron\\Factfin...')
#1 /src/www/vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php(160): Magento\Framework\ObjectManager\ObjectManager->get('Omikron\\Factfin...')
#2 /src/www/vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php(246): Magento\Framework\ObjectManager\Factory\AbstractFactory->resolveArgument(Array, 'Omikron\\Factfin...', NULL, 'channelProvider', 'Omikron\\Factfin...')
#3 /src/www/vendor/magento/framework/ObjectManager/Factory/Dynamic/Developer.php(34): Magento\Framework\ObjectManager\Factory\AbstractFactory->resolveArgumentsInRuntime('Omikron\\Factfin...', Array, Array)
#4 /src/www/vendor/magento/framework/ObjectManager/Factory/Dyna in /src/www/vendor/magento/framework/ObjectManager/Factory/Dynamic/Developer.php on line 50

Fatal error: Uncaught Error: Cannot instantiate interface Omikron\Factfinder\Api\Config\ChannelProviderInterface in /src/www/vendor/magento/framework/ObjectManager/Factory/Dynamic/Developer.php:50
Stack trace:
#0 /src/www/vendor/magento/framework/ObjectManager/ObjectManager.php(70): Magento\Framework\ObjectManager\Factory\Dynamic\Developer->create('Omikron\\Factfin...')
#1 /src/www/vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php(160): Magento\Framework\ObjectManager\ObjectManager->get('Omikron\\Factfin...')
#2 /src/www/vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php(246): Magento\Framework\ObjectManager\Factory\AbstractFactory->resolveArgument(Array, 'Omikron\\Factfin...', NULL, 'channelProvider', 'Omikron\\Factfin...')
#3 /src/www/vendor/magento/framework/ObjectManager/Factory/Dynamic/Developer.php(34): Magento\Framework\ObjectManager\Factory\AbstractFactory->resolveArgumentsInRuntime('Omikron\\Factfin...', Array, Array)
#4 /src/www/vendor/magento/framework/ObjectManager/Factory/Dyna in /src/www/vendor/magento/framework/ObjectManager/Factory/Dynamic/Developer.php on line 50
  • Steps to reproduce:
  1. Run the feed export via Magento crontab or n98-magerun2 (sys:cron:run factfinder_feed_export).

I think the issue is, that the parameter $channelProvider for Omikron\Factfinder\Cron\Feed has no concrete class defined in any of the di.xml files.

Info about broken image-URLs if the root of Magento is in the /pub-folder

In #74 we can find information on what needs to be done if the URLs in the FactFinder-Export are broken as they contain the /pub in the URL. It would be nice to have a short info/reference to that issue in the README so that it's more obvious what a Magento-User has to do if they follow the guidelines of Magento.

Cannot deselect Additional Attributes

  • FACT-Finder-Web-Components Magento2-Module version (see composer.json): 1.1.2
  • Magento edition and version: 2.2.8
  • PHP version: 7.1.25

Expected behavior

Due to #84 (comment) we need to deselect all additional attributes from the FACT-Finder configuration and instead implement the export of the additional attributes on our own as described there.

However, when deselecting all "Additional Attributes" in the FACT-Finder store configuration and saving the configuration, no additional attribute should not be selected anymore.

Actual behavior

When deselecing all "Additional Attributes" all the additional attributes that were previously selected, stay select after saving.

Steps to reproduce

  1. Select some "Additional Attributes"
  2. Save
  3. Now deselect all those selected additional attributes (using Ctrl on your keyboard)
  4. Save

The previously selected additional attributes will stay selected.

Integrate with Slick Slider

I want to display a record list with a slick slider which is already integrated in the project. My code looks as follows:

<ff-record-list class="product-slider" data-pagination-prefix="<?= __('Page') ?>" unresolved>
    <ff-record itemprop="itemListElement" itemscope="">
        <div class="product-tile" data-bind="scope: 'product-tile'" data-container="product-grid" id="product-item-{{record.Master}}"> ...</div>
    </ff-record>
</ff-record-list>

Unfortunately, the slick slider sets the width to 0px which makes the result look odd. I assume that the slick slider is initialized before the product tiles are rendered. I tried a few variants, but with no success.
Is there an approach which allows to trigger a JS event (for initializing Slick Slider) AFTER rendering the product tiles?

cron missing import push?

The export cron only executes the following code currently:

$filename = "export.{$this->channelProvider->getChannel()}.csv";
$stream   = $this->csvFactory->create(['filename' => "factfinder/{$filename}"]);
$this->feedGeneratorFactory->create($this->feedType)->generate($stream);
$this->ftpUploader->upload($filename, $stream);

It exports the CSV, but does not push an import.

Argument 1 passed to ...\ExtendedTextFilter::filterValue() must be of the type string, bool given

  • FACT-Finder-Web-Components Magento2-Module version (see composer.json): 1.6.2
  • Magento edition and version: Commerce 2.3.5
  • PHP version: 7.3.19
  • Expected behavior: The product export processes without an error
  • Actual behavior: The following error is raised:
Fatal error: Uncaught TypeError: Argument 1 passed to Omikron\Factfinder\Model\Filter\ExtendedTextFilter\Interceptor::filterValue() must be of the type string, bool given, called in /src/vendor/omikron/magento2-factfinder/src/Model/Export/Catalog/ProductType/ConfigurableDataProvider.php on line 89 and defined in /src/generated/code/Omikron/Factfinder/Model/Filter/ExtendedTextFilter/Interceptor.php:19
Stack trace:
#0 /src/vendor/omikron/magento2-factfinder/src/Model/Export/Catalog/ProductType/ConfigurableDataProvider.php(89): Omikron\Factfinder\Model\Filter\ExtendedTextFilter\Interceptor->filterValue(false)
#1 [internal function]: Omikron\Factfinder\Model\Export\Catalog\ProductType\ConfigurableDataProvider->Omikron\Factfinder\Model\Export\Catalog\ProductType\{closure}(Array, Array)
#2 /src/vendor/omikron/magento2-factfinder/src/Model/Export/Catalog/ProductType/ConfigurableDataProvider.php(92): array_reduce(Array, Object(Closure), Array)
#3 /src/vendor/omikron/magento2-factfinder/src/Model/Export/Catalog/ProductType/Configu in /src/generated/code/Omikron/Factfinder/Model/Filter/ExtendedTextFilter/Interceptor.php on line 19
  • Steps to reproduce: Not sure

There is a note and a hotfix at that position, for when the label value is null.
It seems that the value can also be a boolean now with Magento 2.3.5+.

Error with feed generation with certain system attributes

  • FACT-Finder-Web-Components Magento2-Module version (see composer.json): NG latest
  • Magento edition and version: 2.4.0 Commerce
  • PHP version: 7.4
  • Expected behavior: After selecting all attributes in the section of "Select Additional Attributes" all of these attributes will be exported to the feed.
  • Actual behavior:
    After selecting these Magento system attributes the following error occurs:
    Notice: Array to string conversion in /srv/www/ci.myagrar.de/releases/32/src/vendor/omikron/magento2-factfinder/Model/Export/Catalog/AttributeValuesExtractor.php on line 45
    image

-- categories
-- Media Gallery
-- Tier prices

  • Steps to reproduce:
    Log inot backend
    configure factfinder export
    select at least one of these attriutes
    click on "Generate Export File(s) now"

Browser Back Button

  • FACT-Finder-Web-Components Magento2-Module version:

-"ometria/magento2": "^2.0",
-"omikron/magento2-factfinder": "^1.6",
-"omikron/magento2-factfinder-ng": "^1.1",

  • Magento edition and version: 2.4.0-p1
  • PHP version: 7.3

Expected behaviour
Click on a product from a FACT Finder Category or Search results page, when the product is loaded, click the browser Back button to return to product on the previous page (return to the product and its position on the page).

Actual behaviour
The browser back button is not work as expected. We have ensured that the 'data-redirect' attribute is in place. When we click on a product on the first page of the search results, then click the browser back button, we are not returned to the same location in the search results.

When we go to a second or third in the search results, click on a product some way down in the results, then when the product has loaded, click the browser back button, we are returned to the bottom of the search results page - not the product we clicked on.

Steps to reproduce
Go to any page in your Magento store category or search results page.
Click on a product on the page or search results
Once the product page has loaded, click the Browser Back button.
You are returned to the previous page, but not the product on the page that was clicked.

Can't export product data to FTP

  • FACT-Finder-Web-Components Magento2-Module version (see composer.json):
    0.1.0 (release v0.9-beta.2)

  • Magento edition and version:
    Magento CE 2.2.4

  • PHP version:
    7.1.13

  • Expected behavior:

    • FACT Finder export function is executed and saves generated files on ftp server
  • Actual behavior:

    • FACT Finder export function is executed throws an exception
      Can't connect to FTP!
      when trying to upload the generated files
  • Steps to reproduce:

    • configure FACT Finder FTP access data in Magento backend
    • execute FACT Finder export function (e.g. via CLI command)
  • Additional information

    • if you comment line 84 in Omikron\Factfinder\Helper\Upload
      // $this->ftp->write($destinationPath, $content);
      no exception is thrown

Check compatibility with Magento 2.4

Since Magento 2.4 is now officially released, we need to check our module compatibility with it and ensure there won't be any conflicts during updates.

No region found within the locale 'de'

  • FACT-Finder-Web-Components Magento2-Module version (see composer.json): 1.1.2
  • Magento edition and version: 2.2.8
  • PHP version: 7.1.25

If the Accept-Language request header only contains de, the following error will be generated:

1 exception(s):
Exception #0 (Zend_Currency_Exception): No region found within the locale 'de'

Exception #0 (Zend_Currency_Exception): No region found within the locale 'de'
<pre>#1 Zend_Currency->__construct(NULL, NULL) called at [vendor/magento/framework/Currency.php:27]
#2 Magento\Framework\Currency->__construct(&Magento\Framework\App\Cache\Proxy#0000000024459fac0000000022db8a70#, NULL, NULL) called at [vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php:111]
#3 Magento\Framework\ObjectManager\Factory\AbstractFactory->createObject('Magento\Framewor...', array(&Magento\Framework\App\Cache\Proxy#0000000024459fac0000000022db8a70#, NULL, NULL)) called at [vendor/magento/framework/ObjectManager/Factory/Dynamic/Developer.php:66]
#4 Magento\Framework\ObjectManager\Factory\Dynamic\Developer->create('Magento\Framewor...') called at [vendor/magento/framework/ObjectManager/ObjectManager.php:70]
#5 Magento\Framework\ObjectManager\ObjectManager->get('Magento\Framewor...') called at [vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php:144]
#6 Magento\Framework\ObjectManager\Factory\AbstractFactory->resolveArgument(array('instance' => 'Magento\Framewor...'), 'Magento\Framewor...', NULL, 'currency', 'Omikron\Factfind...') called at [vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php:230]
#7 Magento\Framework\ObjectManager\Factory\AbstractFactory->resolveArgumentsInRuntime('Omikron\Factfind...', array(array('scopeConfig', 'Magento\Framewor...', true, NULL), array('localeResolver', 'Magento\Framewor...', true, NULL), array('currency', 'Magento\Framewor...', true, NULL)), array()) called at [vendor/magento/framework/ObjectManager/Factory/Dynamic/Developer.php:34]
#8 Magento\Framework\ObjectManager\Factory\Dynamic\Developer->_resolveArguments('Omikron\Factfind...', array(array('scopeConfig', 'Magento\Framewor...', true, NULL), array('localeResolver', 'Magento\Framewor...', true, NULL), array('currency', 'Magento\Framewor...', true, NULL)), array()) called at [vendor/magento/framework/ObjectManager/Factory/Dynamic/Developer.php:59]
#9 Magento\Framework\ObjectManager\Factory\Dynamic\Developer->create('Omikron\Factfind...') called at [vendor/magento/framework/ObjectManager/ObjectManager.php:70]
#10 Magento\Framework\ObjectManager\ObjectManager->get('Omikron\Factfind...') called at [vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php:180]
#11 Magento\Framework\ObjectManager\Factory\AbstractFactory->parseArray(array('user' => &InspiredMinds\KastnerFactfinder\Model\SessionData#000000002445964e0000000022db8a70#, 'communication' => &Omikron\Factfinder\Model\Config\CommunicationConfig#000000002445964d0000000022db8a70#, 'behaviour' => &Omikron\Factfinder\Model\Config\Communication\BehaviourConfig#00000000244596420000000022db8a70#, 'personalization' => &Omikron\Factfinder\Model\Config\Communication\PersonalizationConfig#000000002445964c0000000022db8a70#, 'cache' => &Omikron\Factfinder\Model\Config\Communication\CacheConfig#000000002445964b0000000022db8a70#, 'currency' => array('instance' => 'Omikron\Factfind...'))) called at [vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php:156]
#12 Magento\Framework\ObjectManager\Factory\AbstractFactory->resolveArgument(array('user' => &InspiredMinds\KastnerFactfinder\Model\SessionData#000000002445964e0000000022db8a70#, 'communication' => &Omikron\Factfinder\Model\Config\CommunicationConfig#000000002445964d0000000022db8a70#, 'behaviour' => &Omikron\Factfinder\Model\Config\Communication\BehaviourConfig#00000000244596420000000022db8a70#, 'personalization' => &Omikron\Factfinder\Model\Config\Communication\PersonalizationConfig#000000002445964c0000000022db8a70#, 'cache' => &Omikron\Factfinder\Model\Config\Communication\CacheConfig#000000002445964b0000000022db8a70#, 'currency' => array('instance' => 'Omikron\Factfind...')), NULL, array(), 'parametersSource', 'Omikron\Factfind...') called at [vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php:230]
#13 Magento\Framework\ObjectManager\Factory\AbstractFactory->resolveArgumentsInRuntime('Omikron\Factfind...', array(array('parametersSource', NULL, false, array())), array('parametersSource' => array('user' => array('instance' => 'Omikron\Factfind...'), 'communication' => array('instance' => 'Omikron\Factfind...'), 'behaviour' => array('instance' => 'Omikron\Factfind...'), 'personalization' => array('instance' => 'Omikron\Factfind...'), 'cache' => array('instance' => 'Omikron\Factfind...'), 'currency' => array('instance' => 'Omikron\Factfind...')))) called at [vendor/magento/framework/ObjectManager/Factory/Dynamic/Developer.php:34]
#14 Magento\Framework\ObjectManager\Factory\Dynamic\Developer->_resolveArguments('Omikron\Factfind...', array(array('parametersSource', NULL, false, array())), array('parametersSource' => array('user' => array('instance' => 'Omikron\Factfind...'), 'communication' => array('instance' => 'Omikron\Factfind...'), 'behaviour' => array('instance' => 'Omikron\Factfind...'), 'personalization' => array('instance' => 'Omikron\Factfind...'), 'cache' => array('instance' => 'Omikron\Factfind...'), 'currency' => array('instance' => 'Omikron\Factfind...')))) called at [vendor/magento/framework/ObjectManager/Factory/Dynamic/Developer.php:59]
#15 Magento\Framework\ObjectManager\Factory\Dynamic\Developer->create('Omikron\Factfind...') called at [vendor/magento/framework/ObjectManager/ObjectManager.php:70]
#16 Magento\Framework\ObjectManager\ObjectManager->get('Omikron\Factfind...') called at [vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php:144]
#17 Magento\Framework\ObjectManager\Factory\AbstractFactory->resolveArgument(array('instance' => 'Omikron\Factfind...'), 'Omikron\Factfind...', NULL, 'parametersProvid...', 'Omikron\Factfind...') called at [vendor/magento/framework/ObjectManager/Factory/AbstractFactory.php:230]
#18 Magento\Framework\ObjectManager\Factory\AbstractFactory->resolveArgumentsInRuntime('Omikron\Factfind...', array(array('fieldRoles', 'Omikron\Factfind...', true, NULL), array('serializer', 'Magento\Framewor...', true, NULL), array('parametersProvid...', 'Omikron\Factfind...', true, NULL)), array()) called at [vendor/magento/framework/ObjectManager/Factory/Dynamic/Developer.php:34]
#19 Magento\Framework\ObjectManager\Factory\Dynamic\Developer->_resolveArguments('Omikron\Factfind...', array(array('fieldRoles', 'Omikron\Factfind...', true, NULL), array('serializer', 'Magento\Framewor...', true, NULL), array('parametersProvid...', 'Omikron\Factfind...', true, NULL)), array()) called at [vendor/magento/framework/ObjectManager/Factory/Dynamic/Developer.php:59]
#20 Magento\Framework\ObjectManager\Factory\Dynamic\Developer->create('Omikron\Factfind...', array()) called at [vendor/magento/framework/ObjectManager/ObjectManager.php:56]
#21 Magento\Framework\ObjectManager\ObjectManager->create('Omikron\Factfind...') called at [vendor/magento/framework/View/Layout/Argument/Interpreter/DataObject.php:48]
#22 Magento\Framework\View\Layout\Argument\Interpreter\DataObject->evaluate(array('name' => 'view_model', 'value' => 'Omikron\Factfind...')) called at [vendor/magento/framework/Data/Argument/Interpreter/Composite.php:61]
#23 Magento\Framework\Data\Argument\Interpreter\Composite->evaluate(array('name' => 'view_model', 'value' => 'Omikron\Factfind...')) called at [vendor/magento/framework/View/Layout/Argument/Interpreter/Decorator/Updater.php:47]
#24 Magento\Framework\View\Layout\Argument\Interpreter\Decorator\Updater->evaluate(array('name' => 'view_model', 'xsi:type' => 'object', 'value' => 'Omikron\Factfind...')) called at [vendor/magento/framework/View/Layout/Generator/Block.php:318]
#25 Magento\Framework\View\Layout\Generator\Block->evaluateArguments(array('view_model' => array('name' => 'view_model', 'xsi:type' => 'object', 'value' => 'Omikron\Factfind...'))) called at [vendor/magento/framework/View/Layout/Generator/Block.php:228]
#26 Magento\Framework\View\Layout\Generator\Block->generateBlock(&Magento\Framework\View\Layout\ScheduledStructure#00000000244596900000000022db8a70#, &Magento\Framework\View\Layout\Data\Structure#00000000244598090000000022db8a70#, 'factfinder.commu...') called at [vendor/magento/framework/View/Layout/Generator/Block.php:136]
#27 Magento\Framework\View\Layout\Generator\Block->process(&Magento\Framework\View\Layout\Reader\Context#00000000244596920000000022db8a70#, &Magento\Framework\View\Layout\Generator\Context#00000000244596ff0000000022db8a70#) called at [vendor/magento/framework/View/Layout/GeneratorPool.php:80]
#28 Magento\Framework\View\Layout\GeneratorPool->process(&Magento\Framework\View\Layout\Reader\Context#00000000244596920000000022db8a70#, &Magento\Framework\View\Layout\Generator\Context#00000000244596ff0000000022db8a70#) called at [vendor/magento/framework/View/Layout.php:343]
#29 Magento\Framework\View\Layout->generateElements() called at [generated/code/Magento/Framework/View/Layout/Interceptor.php:89]
#30 Magento\Framework\View\Layout\Interceptor->generateElements() called at [vendor/magento/framework/View/Layout/Builder.php:129]
#31 Magento\Framework\View\Layout\Builder->generateLayoutBlocks() called at [vendor/magento/framework/View/Page/Builder.php:55]
#32 Magento\Framework\View\Page\Builder->generateLayoutBlocks() called at [vendor/magento/framework/View/Layout/Builder.php:65]
#33 Magento\Framework\View\Layout\Builder->build() called at [vendor/magento/framework/View/Layout.php:253]
#34 Magento\Framework\View\Layout->build() called at [vendor/magento/framework/View/Layout.php:875]
#35 Magento\Framework\View\Layout->getBlock('page_content_hea...') called at [generated/code/Magento/Framework/View/Layout/Interceptor.php:414]
#36 Magento\Framework\View\Layout\Interceptor->getBlock('page_content_hea...') called at [vendor/magento/module-cms/Helper/Page.php:171]
#37 Magento\Cms\Helper\Page->prepareResultPage(&Magento\Cms\Controller\Index\Index\Interceptor#00000000244599ff0000000022db8a70#, 'home') called at [vendor/magento/module-cms/Controller/Index/Index.php:68]
#38 Magento\Cms\Controller\Index\Index->execute(NULL) called at [generated/code/Magento/Cms/Controller/Index/Index/Interceptor.php:24]
#39 Magento\Cms\Controller\Index\Index\Interceptor->execute() called at [vendor/magento/framework/App/Action/Action.php:107]
#40 Magento\Framework\App\Action\Action->dispatch(&Magento\Framework\App\Request\Http#0000000024459e310000000022db8a70#) called at [vendor/magento/framework/Interception/Interceptor.php:58]
#41 Magento\Cms\Controller\Index\Index\Interceptor->___callParent('dispatch', array(&Magento\Framework\App\Request\Http#0000000024459e310000000022db8a70#)) called at [vendor/magento/framework/Interception/Interceptor.php:138]
#42 Magento\Cms\Controller\Index\Index\Interceptor->Magento\Framework\Interception\{closure}(&Magento\Framework\App\Request\Http#0000000024459e310000000022db8a70#) called at [vendor/magento/framework/Interception/Interceptor.php:153]
#43 Magento\Cms\Controller\Index\Index\Interceptor->___callPlugins('dispatch', array(&Magento\Framework\App\Request\Http#0000000024459e310000000022db8a70#), array(array('designLoader', 'customerNotifica...', 'catalog_app_acti...', 'tax-app-action-d...', 'weee-app-action-...', 'storeCheck', 'contextPlugin', 'customer-app-act...'))) called at [generated/code/Magento/Cms/Controller/Index/Index/Interceptor.php:39]
#44 Magento\Cms\Controller\Index\Index\Interceptor->dispatch(&Magento\Framework\App\Request\Http#0000000024459e310000000022db8a70#) called at [vendor/magento/framework/App/FrontController.php:55]
#45 Magento\Framework\App\FrontController->dispatch(&Magento\Framework\App\Request\Http#0000000024459e310000000022db8a70#) called at [vendor/magento/framework/Interception/Interceptor.php:58]
#46 Magento\Framework\App\FrontController\Interceptor->___callParent('dispatch', array(&Magento\Framework\App\Request\Http#0000000024459e310000000022db8a70#)) called at [vendor/magento/framework/Interception/Interceptor.php:138]
#47 Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception\{closure}(&Magento\Framework\App\Request\Http#0000000024459e310000000022db8a70#) called at [vendor/magento/module-store/App/FrontController/Plugin/RequestPreprocessor.php:94]
#48 Magento\Store\App\FrontController\Plugin\RequestPreprocessor->aroundDispatch(&Magento\Framework\App\FrontController\Interceptor#0000000024459e5d0000000022db8a70#, &Closure#0000000024459e470000000022db8a70#, &Magento\Framework\App\Request\Http#0000000024459e310000000022db8a70#) called at [vendor/magento/framework/Interception/Interceptor.php:135]
#49 Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception\{closure}(&Magento\Framework\App\Request\Http#0000000024459e310000000022db8a70#) called at [vendor/magento/module-page-cache/Model/App/FrontController/BuiltinPlugin.php:69]
#50 Magento\PageCache\Model\App\FrontController\BuiltinPlugin->aroundDispatch(&Magento\Framework\App\FrontController\Interceptor#0000000024459e5d0000000022db8a70#, &Closure#0000000024459e470000000022db8a70#, &Magento\Framework\App\Request\Http#0000000024459e310000000022db8a70#) called at [vendor/magento/framework/Interception/Interceptor.php:135]
#51 Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception\{closure}(&Magento\Framework\App\Request\Http#0000000024459e310000000022db8a70#) called at [vendor/magento/framework/Interception/Interceptor.php:153]
#52 Magento\Framework\App\FrontController\Interceptor->___callPlugins('dispatch', array(&Magento\Framework\App\Request\Http#0000000024459e310000000022db8a70#), array(array('inspiredminds.ka...'))) called at [generated/code/Magento/Framework/App/FrontController/Interceptor.php:26]
#53 Magento\Framework\App\FrontController\Interceptor->dispatch(&Magento\Framework\App\Request\Http#0000000024459e310000000022db8a70#) called at [vendor/magento/framework/App/Http.php:136]
#54 Magento\Framework\App\Http->launch() called at [generated/code/Magento/Framework/App/Http/Interceptor.php:24]
#55 Magento\Framework\App\Http\Interceptor->launch() called at [vendor/magento/framework/App/Bootstrap.php:257]
#56 Magento\Framework\App\Bootstrap->run(&Magento\Framework\App\Http\Interceptor#0000000024459e700000000022db8a70#) called at [pub/index.php:37]

Seems to happen during the generation of the <ff-communication> block.

FFWEB-919/why is there a PRODUCT_LIMIT?

The Omikron\Factfinder\Model\Export\Product class defines a PRODUCT_LIMIT of 50000 which is then used in the buildFeed method. It is implemented in such a way that at most 50000 products will be exported to FACT Finder. If your store has 60000 products, those last 10000 will be ignored.

What is the limit for? Obviously we would like to export all products to FACT Finder, not just the first 50000.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.