Today we have a big update to announce regarding the behavior of the Category tree settings and its interpretation by our Magento plugins. The category view in Magento differs from the way it is presented in Tweakwise Demoshop which we consider to be desired and common behavior. This difference is related to the way how (sub)category levels in fact are shown.

We've added a setting to Magento2Tweakwise plugin in which you can define whether to use the old/existing way of presenting, or whether you want to use the desired way of presenting the category tree. The setting can be found under Stores > Catalog > Tweakwise > Layered Navigation >Category View in your Magento backend and is set to simple by default. This represents the current way of presenting and nothing will change if you do not touch this setting. If the setting is changed to extended, the category view is changed to the same view as the Tweakwise Demoshop.

The correct way of interpreting the category tree settings, is by showing multiple levels of categories always. This tree structure can be directly visible (recommended) or being collapsible depending on your front-end implementation. This differs from the link structure, where only the relevant category will be shown including the single parent category it belongs to.

Other improvements

  • Magento2Tweakwise v5.7.5 | Resolved a security vulnerability linked to product sorting.
  • Magento2Tweakwise v5.7.5 | Fixed an issue causing JavaScript errors with the Hyva theme and Ajax navigation.
  • Magento2Tweakwise v5.7.5 | Enhanced SEO by removing 'p1' from URLs; this issue specifically affected the query parameter strategy for URLs.
  • Magento2Tweakwise v5.7.5 | Rectified a bug causing an undefined index in active filters while using the ALP module.
  • Magento2Tweakwise v5.7.5 | Addressed a problem where 404 errors were logged in Magento when a product, no longer available in Tweakwise (e.g., out of stock), still had recommendations called. This change prevents such 404 errors from being logged.
  • Magento2Tweakwise v5.7.5 | Fixed an issue causing double filter values in URLs. This occurred when activating a filter while Merchandising Builder was active, resulting in incorrect filter URLs with doubled values.
  • Magento2Tweakwise v5.7.5 | Improved handling of double values in URL filters. Now, only consecutive double values, such as '/tables/tables/shape/oval', are removed.
  • Magento2Tweakwise v5.7.5 | Removed redundant double slashes in category URLs.
  • Magento2Tweakwise v5.7.5 | Prevented category ID from being added to the URL during certain category searches, ensuring URL consistency.
  • Magento2Tweakwise v5.7.5 | Cleaned up unused imports.
  • Magento2TweakwiseExport v6.0.0 (breaking change) | Modified the response returned when accessing the feed via URL to prevent header already sent errors with some external modules. This change might affect any customer-added code executed after reading the feed, though it's unlikely that any customers have such code.
  • Magento2TweakwiseExport v6.0.0 (breaking change) | Fixed a bug where a disabled stock source was still exported to Tweakwise in the product's stock count. Now, disabled stock locations won't export stock to Tweakwise, and products with no enabled stock locations won't be exported.
  • Magento Tweakwise Hyva v2.3.7 | Fixed a bug where, with Merchandising Builder enabled, refreshing a page with a page number in the URL (?p=2) reverted to the first page. The fix ensures the URL stays on the same page.
  • Magento Tweakwise Hyva v2.3.7 | Added styling support for the ALP overview page within the Hyva theme. Related user story 166879

The builder and pinning have an effect on the way products get sorted. It's already possible to view how the builder and pinning influenced the sorting in the demoshop. However, we also wanted to make this information publicly available as part of the frontend API.

For that reason we've added new information to all products, in both the JSON and XML response, we call origin. The origin field gets added whenever the builder or pinning was responsible for the position of that product in the sorting.

<!--This is an example of a XML response for a product-->
<item>
  <itemno>10001-101</itemno>
  <title>Tweakwise Hoodie Blue</title>
  <price>24.95</price>
  <brand>Tweakwise</brand>
  <url>https://sttwdocseuwe.blob.core.windows.net/shop/products/hoodie-blauw.jpg</url>
  <origin> <!--The new origin node-->
    <type>visual-merchandising</type>
    <name>Pinned</name>
  </origin>
</item>
// This is an example of a JSON response for a product
{
    "itemno": "10001-101",
    "title": "Tweakwise Hoodie Blue",
    "price": 24.95,
    "brand": "Tweakwise",
    "url": "https://sttwdocseuwe.blob.core.windows.net/shop/products/hoodie-blauw.jpg",
    "origin": { // The new origin object
        "type": "visual-merchandising",
        "name": "Pinned"
    }
}

Read more 👉

  • Frontend API | The tn_q parameter is now limited to the same 100 characters on every occasion. This parameter is used in Navigation Search, Facets, Products, Autocomplete and Suggestions endpoints.
  • Tweakwise App | When trying to delete a featured product recommendation that is being used in a builder, it now will show the specific builders name upon preventing the deletion.
  • Tweakwise App | In Merchandising > Templates and Merchandising > Builder, the connected tab will show full clickable pathnames to make it easier for finding (and browsing) corresponding categories and landing pages. The links will lead to the Catalog > Categories page, the selected item will be shown there and the category tree will also be opened to the corresponding path.
  • Tweakwise App | The previously released improvements to other 'connected to' tabs are also now available in Catalogue > Products > Connected Categories and in in Filtering > Filtertemplates > Detailpage > Connected. It shows the full path and is clickable.
  • Analytics API | We’ve added the API reference for the Analytics API to our documentation website, just like we have for the Backend and Frontend API. This should make it easier to do a server-side implementation of the Analytics API and track page views, purchases and searches that way. Feel free to take a look around: https://docs.tweakwise.com/reference/analytics-api-introduction
  • Analytics API | The Analytics API contained a bug where it would return a 500 Internal Server error when a request with an empty request body was made. We now return a 400 Bad Request with a clear error message, as expected.
  • Tweakwise App | You can now open Tweakwise Demoshop by quick accessing it from the category module in Tweakwise App > Catalog > Categories.
  • Backend API | The /product call now includes optional search and paging parameters. This also significantly enhances request performance, even if the optional parameters are not used.
  • Tweakwise App | The filtertemplates detail pages in Tweakwise App have now paging & search functionality in order to make this module way faster than before. Some side effects are in place since: The quick filterbuttons on the right will no longer save on click, but only after clicking the button which saves the whole form. A few notes:
    • If you add filters to a template, it will always be added at last position(s). This mean in case of paging that after adding a new filter, you will automatically go to the last page where the newly added filter is. Paging is currently set at 50 items per page.
    • If you change pages or search, it will not save the previous 'state'. So if you want to make changes in the filters and then search or use pagination, you have to save before doing that otherwise the changes will be lost.
    • If you make any change and then accidentally (or on purpose) click away from the page - you will be warned of unsaved changes and asked to save before leaving.
  • Tweakwise App | We’ve made a minor tweak to the category selector in the app. Basically, it now prioritizes categories which start with the entered search term. This should make it easier to find the categories you are looking for compared to before, when the categories were sorted only alphabetically. There was also a small bug that made is impossible to scroll through all the results. That’s now also fixed.
  • Tweakwise App | In the filter statistics module it is possible to filter the results by usage in a specific category. If the ID of the category being filtered on was very large, then the results on the page would be as if no category filter got applied. This was confusing and has now been fixed.
  • Tweakwise App | We have added direct links to entities on the property usage page. All property pages (feed, external, derived) now have clickable links on their ‘used’ tab. We also have added internal clickable linking to products and properties from multiple places in the app on occasions where this was still missing.

JavaScript

  • Suggestions JS | We have added an identifying data-property to each suggestion group so that customers can target each if they wish. The values are SearchPhrase, Category, FacetFilter and Product and these are under the property data-suggestion-type. These data-properties can be used for styling customizations for example, as you now can target each property by itself.
  • Suggestions JS | Suggestions JS now also listens to customer provided event listeners, and that is in two instances: when the suggestion container opens and when it closes. More information can be found here: https://docs.tweakwise.com/docs/js-suggestions-js-api-reference#on
  • JS Implementation | We've expanded the JS Implementation's settings in the App with tn_parameters_except options. You can now configure these hidden exclusion filters for the search and lister page results.
  • JS Implementation | Fixed a bug where filters using the slider-settings could not be updated if the minimum value was 0.
  • Recommendations JS | From now on some JS events will be fired with requests to our servers within the Javascript Recommendations plugin. In this way it is possible to hook into the plugin's life-cycle and, for example, inject more information to the product tiles. The following events will be fired: twn.request.started, twn.request.success (with data payload), twn.request.failed, twn.request.completed.
  • JS Implementation | We implemented a maximum number of showed categories in a category tree (facet tree; number already customizable in app), and after reaching this threshold (i.e. "Number of values"), showing a "Show more/less" button (as is the case with most other filters).
  • JS Implementation | We fixed a small bug when overriding translations.
  • Suggestions JS | In this release we've fixed a bug in the Suggestions JS where incidentally nothing was shown for a search term even though our API did return some results.

The possibilities regarding pagination in our Javascript implementation are expanded with two new options. Apart from paginating via page-numbers, which remains our default behavior, we have introduced infinite scroll and a load more button.

If a customer lands on a paginated link (for example via a bookmark), we show a ‘load previous products’ on top in order to be able to paginate back. Both new ways are available for all existing and new implementations and can be triggered via a local Javascript configuration or in Tweakwise App.

See more: https://docs.tweakwise.com/reference/js-js-implementation-local-configuration#paginationtype

With Universal Analytics (UA) being phased out last year (2023, July 1st) we implemented a Google Analytics 4 (GA4) module as its successor in Tweakwise App. As all of are customers are migrated in the meantime, we encountered some behavior we did not expect.

Apparently, as GA4 is way more flexible in configuration than UA, customer reports can be set-up with some dimensions you can use to group and filter your data. We updated our module so we are completely compatible with these configuration.

So, if you have configured your GA4 property and dimension reports based on for example hostname or language, we can split your reports in Tweakwise App too. This means that there is no longer a requirement to have a one on one relation between storeview and Google-property. You can use one property for multiple storeviews and purposes.

Google Analytics 4 is a paid feature and is accessible under Tweakwise App > Connectivity > Google Analytics 4

It now is possible to enable a searchbox within a specific filter, which is configurable at filter-attribute-level. Through these settings you can turn on/off our so called in-filter-search and even set a 'placeholder' or 'no results' text. This feature is available through our Frontend API and works out of the box for Javascript implementations.

To test the feature, you can use Tweakwise Demoshop (after a successful publish).

This solution can be extremely valuable for filters that contain so many values that it has become quite a chore to look through them all when filtering in your shop. In this situation, you may want to add a search box to the filter to allow your customers to search through them. Most seen use case for these searchboxes are applied to filters of the type 'brand'.

There are three things you need to configure which will impact the outcome of our API response:

  1. Filter search: True/false which can be seen as indicator if you want the filter to be 'searchable'
  2. Placeholder text: The text that should be shown as placeholder text in the search input field
  3. No-results text: The text that will be displayed when searching by filters give no results

The settings regarding infilter search are available at Tweakwise App > Filtertemplates > Template > Basic Options

📘

This option still has to be implemented in our Magento plugins and does not work out of the box right now.

We've added 11 new API endpoints for our filter templates, so you can now manage them via our Backend API. This feature allows you to create, read, update, and delete settings and attributes, and is ideal for automation. The following endpoints were added to our API:

🚧

Be aware that all requests you're doing at the API endpoints, do count for billing as well.

  • Tweakwise App | We fixed a bug where the Tweakwise App would briefly show an error message when opening the App again after some period of time. We fixed it twice. A first fix delayed opening the App, but that annoying behavior was solved quickly after.
  • Tweakwise App | After we had previously implemented a word breaker functionality for suggestions, the priority sorting for search phrases was the full-text rank. We now use the established rank again (as it is supposed to be), as seen in the established suggestions module.
  • Tweakwise App | A small change was made to the Google Analytics 4 module, where the report preview will let you know if the report does not contain any data instead of showing an empty table (which feels more like something went wrong).
  • Tweakwise App | We fixed a bug in Tweakwise App > Connectivity > Google Analytics 4 where the module would sometimes crash/freeze; for example, when trying to open a report. This should no longer be the case.
  • Tweakwise App | In the category tree view in the app, under Builder, you can use the parent template as an inheritance option in addition to not using a Builder template. By doing this, you no longer need to configure all underlying categories if they are meant to use the same Builder template.

JavaScript

  • Guided Selling JS | We've made minor updates to our Javascript Guided Selling. Navigating between steps will now always take you to the top of the container element. Apart from that, if a step has a single-answer question, the ui.autoAdvance feature will take you to the next step automatically. The results page from now on shows the amount of found items, which can be styled or hidden using custom CSS.
  • Suggestions JS | We removed the skeleton loading from the UI element as it was deemed distracting, and the server's requests are speedy anyway.
  • JS Implementation | For all of our Javascript solutions, it is possible to configure translation overwrites from now on. It not only makes it possible to do your own style of translations for our default languages, but it should also allow you to serve our JS in every other language. Complete information about this feature can be found at the Tweakwise JS technical documentation.
  • JS Implementation | We have fixed a bug where the combined configuration of the filter position on top and the grid list button enabled would not yield the product view switcher. Now customers can use the view switcher with filters on top.
  • JS Implementation | In the JS Implementation plugin, we have fixed an animation when opening and closing a facet - now, the animation works correctly in both cases.
  • JS Implementation | We have fixed a bug in the JS Implementation where a joint setting of 'Number of values' (any value) & 'Show number of products' (disabled) in filter settings within a filter template would interfere with showing a set number of filter values in a facet.

  • Tweakwise App | We improved the performance of the Derived Attributes Combine module (in particular, the attribute select boxes).
  • Tweakwise App | We fixed a bug in the language switcher where it would always show the English flag. Simultaneously a small bug with the Tweakwise logo not being responsive was solved.
  • Tweakwise App | Apparently, it was not possible to save an autocomplete configuration if the selected category had ID=0. It would instead give an error that no category had been selected. That has now been solved.
  • Frontend API | The next Frontend API endpoints now also support the tn_lang parameter, which should be used to specify the language to use for the search algorithms:
  • Tweakwise App | A bug was fixed where the external attributes preview didn't work properly for Page View reports in the Google Analytics 4 module.
  • Tweakwise App | We've fixed a bug that caused accrued filter values sorting (order of derived attributes) to not work correctly in some scenarios. For example, the accrued sorting order didn't work at all when used as alternative sorting order (sorting order used when the filter is expanded). Accrued sorting also wasn't applied when used in combination with smart filters; it could be configured to act as a fallback but wouldn't work if configured in that way.
  • Tweakwise App | We released a simplified way for users can switch between their instances once they log in to the app. Instead of being redirected to a separate page with a single select field, they are now presented with an in-app context menu with a list of their instances and will be redirected to it after a single click. At first glance, visually, everything stays the same.
  • Tweakwise App | We fixed a bug where an Up- & Cross-sell Recommendations with configured parameters could not be deleted.
  • Tweakwise App | It was possible for a publication task to fail if the instance used a derived attribute that took a lot of time to generate the values. We’ve effectively increased the amount of time this process is allowed to take, preventing the publication from failing because of it.
  • Tweakwise App | We’ve added a modern look to our AI Synonym suggestions, so it will be instantly clear that AI is involved in certain modules. This look and feel will come back in further AI implementations later on.
  • Tweakwise App | Google Analytics 4 import would fail on data from Google being provided in an unsupported format (Scientific notation of numbers: 1.04e-05). This is now fixed, so GA4 imports should not fail on this anymore.

Javascript

  • JS Implementation | We've made some changes for a smoother integration. Developers implementing the JS Implementation can now programmatically open and close the search results overlay. Also, we've fixed a bug when programmatically refreshing the JS Implementation.
  • JS Implementation | We added a class to the pagination component when it only has one page, which can be useful if you want to hide the complete pagination in case it makes no sense.
  • JS Implementation | We have made a few small changes to JS implementation filters (adding summary for slider type & configurable threshold for hiding top filter facets) and added metadata to the starter.js file:
  • JS Implementation | Fixed a bug where the (price) slider could break when first using the slider and then using a regular filter.
  • JS Implementation | The input fields (which were needed for technical implementation) are now optional instead of required. As it shouldn't be required in combination with the Suggestions JS.
  • Guided Selling JS | An option was added to the Guided Selling JS that non-js-implementation customers could use to redirect to an existing (non-js) lister page. Please note that custom JavaScript code/logic is still required to correctly pass on the selected filters to the (non-js) lister page.
  • JS Implementation | Sometimes when selecting a single filter, the selected filter summary didn’t show up; this has now been solved.

Magento

  • When a product belongs to multiple categories, and there are some recommendations configured for one of those categories, we now show the right recommendations. Previously the category recommendations only checked for the first category the product belonged to. We added a fallback category for recommendations as well, so we can always show at least something relevant to customers.

A grid/list view functionality for the displaying of products was added to our JS Implementation. This feature is optional for JS implementations and can be implemented in different ways. We can show only a grid, only a list (new), or a version with both grid and list view (new). For the last one, we implemented a switch functionality which will be shown next to the standard sorting dropdown. The choice made by customers will be recognized for reoccurring visits to the webshop.

At the moment, enabling this setting should be done by setting up some local Javascript documentation, as described in this article: https://docs.tweakwise.com/reference/js-js-implementation-local-configuration#uiproductsviewbutton

If this configuration is missing in you configuration, we show by default a grid view only.