Open Nuranto opened 1 year ago
I went into the
$category->getProductCollection()
problem. I saw that there is many issues on this problem, and I saw the proposed solution.However, it makes no sense to me. I think
$category->getProductCollection()
should return the correct results, without having to add custom code to make it work.I'm trying to find a solution for this, and I was first thinking at adding a plugin to Category model to return a Fulltext\Collection for
getProductCollection()
if category is virtual. But that will probably cause issues if we don't always return the same model, right ?
Yes, this is likely to break many things and probably any other extensions that are waiting for a clearly scoped Model.
So maybe another approach, would be to create an Indexer that populates catalog_category_product from the virtual category results. However, it would probably a be a very high resource-consuming indexer, so I'm not sure about that solution either.
Nope, we made virtual categories to avoid having doing such things.
Third solution I was thinking about : a Plugin for
Magento\Catalog\Model\ResourceModel\Product\Collection
, foraddCategoryFilter
method : If virtual : exec the request, and add a filter on product ID, else use parent method. It could result at filtering on thousands of IDs, which I don't like, but I think it is already working like this elsewhere, so why not ?
We already have a plugin for that : https://github.com/Smile-SA/elasticsuite/blob/2.11.x/src/module-elasticsuite-virtual-category/Plugin/Collection/AddVirtualCategoryQuery.php#L53
What do you think about it ? Do you see a better solution ?
Regards
Third solution I was thinking about : a Plugin for
Magento\Catalog\Model\ResourceModel\Product\Collection
, foraddCategoryFilter
method : If virtual : exec the request, and add a filter on product ID, else use parent method. It could result at filtering on thousands of IDs, which I don't like, but I think it is already working like this elsewhere, so why not ?We already have a plugin for that : https://github.com/Smile-SA/elasticsuite/blob/2.11.x/src/module-elasticsuite-virtual-category/Plugin/Collection/AddVirtualCategoryQuery.php#L53
This plugins applies on Smile\ElasticsuiteCatalog\Model\ResourceModel\Product\Fulltext\Collection
which overrides (through preferences) magento core's fulltext & widget collection models, but not Magento\Catalog\Model\ResourceModel\Product\Collection
which is the model used/returned by Category::getProductCollection
. Am I missing something ?
@romainruaud I'm willing to make a PR, but I need to be sure I'm not missing something first, since your last answer confused me.
I went into the
$category->getProductCollection()
problem. I saw that there is many issues on this problem, and I saw the proposed solution.However, it makes no sense to me. I think
$category->getProductCollection()
should return the correct results, without having to add custom code to make it work.I'm trying to find a solution for this, and I was first thinking at adding a plugin to Category model to return a Fulltext\Collection for
getProductCollection()
if category is virtual. But that will probably cause issues if we don't always return the same model, right ?So maybe another approach, would be to create an Indexer that populates catalog_category_product from the virtual category results. However, it would probably a be a very high resource-consuming indexer, so I'm not sure about that solution either.
Third solution I was thinking about : a Plugin for
Magento\Catalog\Model\ResourceModel\Product\Collection
, foraddCategoryFilter
method : If virtual : exec the request, and add a filter on product ID, else use parent method. It could result at filtering on thousands of IDs, which I don't like, but I think it is already working like this elsewhere, so why not ?What do you think about it ? Do you see a better solution ?