spryker/product-storage
ProductStorage module
1.56.1
2.5M downloads/mo
#4636 most downloaded on Packagist
spryker/product-storage
What this package is like to depend on
Last release 3 days ago
20 Aug 2026
Release timing varies
gaps range from 2 weeks to 4 months
Rarely documented
notes for 10 of 86 stable releases
Nothing withdrawn
no release was ever pulled
9 years old
86 releases · first in 2018
13 releases in the last 12 months
see the full history below
Release timeline
86 releases · Jan 2018 to Aug 2026Releases
latest 60 of 86-
1.56.120 Aug 2026Release notes
Open source →Included commits: 1.56.0...1.56.1
Fixes
- Fixed attribute filtering to correctly handle super attributes with a single value that are filtered out of the variant map but still selected, preventing incorrect variant compatibility checks.
-
1.56.019 Aug 2026Release notes
Open source →Included commits: 1.55.0...1.56.0
Fixes
- Fixed product attribute filtering to correctly resolve available attributes when a product variant is selected.
-
1.55.012 Aug 2026Release notes
Open source →Included commits: 1.54.0...1.55.0
Improvements
- Improved product storage publishing performance by applying
OptimizedSimpleArrayFormatterto bulk concrete product queries, reducing memory usage for projects with large product catalogs.
Adjustments
- Updated
spryker/propel-ormconstraint to^1.22.0.
- Improved product storage publishing performance by applying
-
1.54.107 Aug 2026Release notes
Open source →Included commits: 1.54.0...1.54.1
Fixes
- Fixed
ProductConcreteStorageCatalogSearcherto populate all product view transfer fields when mapping toProductConcretePageSearchTransfer, ensuring the full product data is available during concrete product search. - Changed visibility of
createAttributeMap(),getProductFacade(), andgetProductStorageClient()inProductStorageBusinessFactoryfrom protected to public to allow access from extending classes.
- Fixed
-
1.54.013 Jul 2026Release notes
Open source →Included commits: 1.53.0...1.54.0
Improvements
- Extended
ProductConcreteStorageCatalogSearcherto map product images fromProductViewTransferintoProductConcretePageSearchTransfer, enabling product images to be available in catalog search results.
Overview
Bug
On the Configurable Bundle configurator slot page (e.g./DE/en/configurable-bundle/configurator/2/slots/6), non-selected products rendered without images; only the selected product showed its image.Root cause
Spryker\Client\ProductStorage\ProductConcreteSearch\ProductConcreteStorageCatalogSearcher::mapProductViewTransfersToProductConcretePageSearchTransfers()mapped onlyfkProduct,fkProductAbstract,sku,nameinto theProductConcretePageSearchTransferand dropped the images. The non-selected product list is rendered byProductConcreteSearchGridWidget, which consumes these search-result transfers, so it had no image data. The selected product is expanded via a separate path (ConfigurableBundlePage\Expander\ProductConcreteImageExpander) and therefore kept its image.Fix
Carry the images already resolved by the product view expanders into the search-result transfer:->setImages($productViewTransfer->getImages()->getArrayCopy())
ProductViewTransfer::getImages()returnsArrayObject<ProductImageStorageTransfer>;getArrayCopy()yieldsarray<ProductImageStorageTransfer>matchingProductConcretePageSearchTransfer::setImages(array). DownstreamProductSearchWidget\Mapper\ProductConcreteMapperround-trips viafromArray(toArray());AbstractTransfer::processArrayObjectpassesTransferInterfaceelements through untouched, so images survive. Purely additive — no interface/transfer/schema change (Internal API, MINOR).Tests
AddedProductConcreteStorageCatalogSearcherTest::testGivenProductViewWithImagesWhenSearchingProductConcretesThenMapsImagesToPageSearchTransfer(Client suite) — fails without the fix (imagessize 0 vs 1), passes with it. Plus an explicit empty-images boundary assertion. Suite green: 12 tests, 26 assertions.Verification
- Runtime on the repro URL: 47/47 products now render a real image
data-src(was 1/47). - Independent QA accepted across 3 slots (47/47, 51/51, 18/18), no regression to the selected product, invalid slots redirect cleanly.
- Static: phpcs + phpstan (L6) clean on both changed files.
Change log
- Fixed missing product images for non-selected products in the Configurable Bundle configurator by mapping images in
ProductConcreteStorageCatalogSearcher.
Release Table
| Module | Type | Change |
| - Extended
-
1.53.002 Jun 2026Release notes
Open source →Included commits: 1.52.0...1.53.0
Improvements
- Introduced
ProductStorageClient::getRawProductCollection()to support batch retrieval of raw product data from storage, enabling product readiness improvements. - Introduced
ProductStorageRepositoryInterface::getProductAbstractStorageEntriesByIdProductAbstract()to fetch all per-store/locale storage entries for a given product abstract. - Enhanced product abstract and concrete storage readiness providers to compare database and Redis storage data, displaying per-entry sync status with timestamps and clickable storage key links to support product readiness improvements.
Deprecations
- Deprecated
StorageProductAbstractReadinessProviderPluginin favor ofStorageTableProductAbstractReadinessProviderPlugin.
- Introduced
-
1.52.029 May 2026Release notes
Open source →Included commits: 1.51.0...1.52.0
Improvements
- Introduced
ProductConcreteStorageSearchPluginto serve concrete product search results from Redis storage via direct SKU lookup and abstract-product fallback, supporting removal of product concretes from the search index. - Introduced
ProductConcreteSuggestionEnricherPluginto enrich suggest search results with matching concrete product SKUs loaded from storage when product concretes are not indexed in the search engine. - Added
spryker/catalog-extension: ^1.2.0dependency to support the new storage-based search plugin interfaces. - Fixed
ProductAbstractStorageReader::isProductInCurrentStore()to correctly bypass the store-map check when the unified store storage key is used.
- Introduced
-
1.51.014 May 2026Release notes
Open source →Included commits: 1.50.2...1.51.0
Improvements
- Introduced unified KV storage mode for product abstract data to reduce storage consumption: product abstract entries are now stored once per locale under a shared key (instead of per-store keys), with a
product_abstract_stores_mapfield listing which stores carry the product. - Introduced
ProductStorageConfig::isProductAbstractStorageUnifiedEnabled()on the Zed and Client layers andProductStorageConfig::isProductAbstractStorageUnifiedFallbackEnabled()on the Client layer to allow incremental migration to unified storage without interrupting URL resolution. - Introduced
ProductStorageConfig::PRODUCT_ABSTRACT_STORES_MAPandProductStorageConfig::PRODUCT_ABSTRACT_STORAGE_UNIFIED_STORE_KEYconstants toSpryker\Shared\ProductStorage\ProductStorageConfig. - Added
isProductAbstractStorageUnifiedEnabled()method to the sharedProductStorageConfigto enable consistent configuration across Zed and Client layers. - Changed
ProductStorageFactory::getStorageClient()visibility from protected to public to support unified storage resolution in URL mapper plugins.
- Introduced unified KV storage mode for product abstract data to reduce storage consumption: product abstract entries are now stored once per locale under a shared key (instead of per-store keys), with a
-
1.50.230 Apr 2026Release notes
Open source →Included commits: 1.50.1...1.50.2
Fixes
- Fixed
ProductCategoryStorageFacade::publish()not removing orphaned storage entries —commit()was missing after processing stale store/locale entries, causing batched deletes to never be flushed to the database.
- Fixed
-
1.50.130 Apr 2026Release notes
Open source →Included commits: 1.50.0...1.50.1
Fixes
- Fixed transaction commit after deleting concrete product storage records during publishing of a deactivated product.
-
1.50.012 Mar 2026Nothing published for this version
-
1.49.011 Mar 2026Nothing published for this version
-
1.48.017 Nov 2025Nothing published for this version
-
1.47.021 Aug 2025Nothing published for this version
-
1.46.006 Aug 2025Nothing published for this version
-
1.45.004 Aug 2025Nothing published for this version
-
1.44.003 Jul 2025Nothing published for this version
-
1.43.020 May 2025Nothing published for this version
-
1.42.005 Mar 2025Nothing published for this version
-
1.41.024 Dec 2024Nothing published for this version
-
1.40.204 Nov 2024Nothing published for this version
-
1.40.110 Oct 2024Nothing published for this version
-
1.40.002 Oct 2024Nothing published for this version
-
1.39.106 May 2024Nothing published for this version
-
1.39.025 Jan 2024Nothing published for this version
-
1.38.005 Jun 2023Nothing published for this version
-
1.37.105 May 2023Nothing published for this version
-
1.37.031 Mar 2023Nothing published for this version
-
1.36.214 Mar 2023Nothing published for this version
-
1.36.128 Apr 2022Nothing published for this version
-
1.36.018 Apr 2022Nothing published for this version
-
1.35.011 Feb 2022Nothing published for this version
-
1.34.026 Jan 2022Nothing published for this version
-
1.33.004 Jan 2022Nothing published for this version
-
1.32.123 Aug 2021Nothing published for this version
-
1.32.011 Mar 2021Nothing published for this version
-
1.31.026 Jan 2021Nothing published for this version
-
1.30.103 Nov 2020Nothing published for this version
-
1.30.003 Nov 2020Nothing published for this version
-
1.29.007 Oct 2020Nothing published for this version
-
1.28.009 Sep 2020Nothing published for this version
-
1.27.007 Jul 2020Nothing published for this version
-
1.26.003 Jul 2020Nothing published for this version
-
1.25.129 May 2020Nothing published for this version
-
1.25.013 Apr 2020Nothing published for this version
-
1.24.009 Apr 2020Nothing published for this version
-
1.23.009 Apr 2020Nothing published for this version
-
1.22.006 Apr 2020Nothing published for this version
-
1.21.123 Mar 2020Nothing published for this version
-
1.21.006 Mar 2020Nothing published for this version
-
1.20.021 Feb 2020Nothing published for this version
-
1.19.014 Feb 2020Nothing published for this version
-
1.18.124 Dec 2019Nothing published for this version
-
1.18.006 Dec 2019Nothing published for this version
-
1.17.106 Dec 2019Nothing published for this version
-
1.17.005 Dec 2019Nothing published for this version
-
1.16.103 Dec 2019Nothing published for this version
-
1.16.027 Nov 2019Nothing published for this version
-
1.15.120 Nov 2019Nothing published for this version
-
1.15.023 Oct 2019Nothing published for this version