Smile-SA / elasticsuite

Smile ElasticSuite - Magento 2 merchandising and search engine built on ElasticSearch
https://elasticsuite.io
Open Software License 3.0
760 stars 336 forks source link

Broken default_sort_by in admin/category/edit #3309

Closed eperrotta closed 2 days ago

eperrotta commented 2 days ago

Hello, I am having an issue after a recent upgrade of the Elasticsuite modules. Basically: the "Default Product Listing Sort By" as well as the "Sort direction" fields are empty and don't show any option.

image

This cause every category with the "Use config setting" unflagged to display an ajax error in the browser console:

TypeError: Smile\ElasticsuiteVirtualCategory\Model\Preview::getSortBy(): Return value must be of type string, null returned in /Users/local/workspace/www/mywebsite.com/public_m2/vendor/smile/elasticsuite/src/module-elasticsuite-virtual-category/Model/Preview.php:224
Stack trace:
#0 /Users/local/workspace/www/mywebsite.com/public_m2/vendor/smile/elasticsuite/src/module-elasticsuite-virtual-category/Model/Preview.php(120): Smile\ElasticsuiteVirtualCategory\Model\Preview->getSortBy()
#1 /Users/local/workspace/www/mywebsite.com/public_m2/vendor/smile/elasticsuite/src/module-elasticsuite-catalog/Model/ProductSorter/AbstractPreview.php(158): Smile\ElasticsuiteVirtualCategory\Model\Preview->prepareProductCollection(Object(Smile\ElasticsuiteCatalog\Model\ResourceModel\Product\Fulltext\Collection\Interceptor))
#2 /Users/local/workspace/www/mywebsite.com/public_m2/vendor/smile/elasticsuite/src/module-elasticsuite-catalog/Model/ProductSorter/AbstractPreview.php(199): Smile\ElasticsuiteCatalog\Model\ProductSorter\AbstractPreview->getProductCollection()
#3 /Users/local/workspace/www/mywebsite.com/public_m2/vendor/smile/elasticsuite/src/module-elasticsuite-catalog/Model/ProductSorter/AbstractPreview.php(101): Smile\ElasticsuiteCatalog\Model\ProductSorter\AbstractPreview->getUnsortedProductData()
#4 /Users/local/workspace/www/mywebsite.com/public_m2/vendor/smile/elasticsuite/src/module-elasticsuite-virtual-category/Controller/Adminhtml/Category/Virtual/Preview.php(70): Smile\ElasticsuiteCatalog\Model\ProductSorter\AbstractPreview->getData()
#5 /Users/local/workspace/www/mywebsite.com/public_m2/vendor/magento/framework/Interception/Interceptor.php(58): Smile\ElasticsuiteVirtualCategory\Controller\Adminhtml\Category\Virtual\Preview->execute()
#6 /Users/local/workspace/www/mywebsite.com/public_m2/vendor/magento/framework/Interception/Interceptor.php(138): Smile\ElasticsuiteVirtualCategory\Controller\Adminhtml\Category\Virtual\Preview\Interceptor->___callParent('execute', Array)
#7 /Users/local/workspace/www/mywebsite.com/public_m2/vendor/magento/framework/Interception/Interceptor.php(153): Smile\ElasticsuiteVirtualCategory\Controller\Adminhtml\Category\Virtual\Preview\Interceptor->Magento\Framework\Interception\{closure}()
#8 /Users/local/workspace/www/mywebsite.com/public_m2/generated/code/Smile/ElasticsuiteVirtualCategory/Controller/Adminhtml/Category/Virtual/Preview/Interceptor.php(23): Smile\ElasticsuiteVirtualCategory\Controller\Adminhtml\Category\Virtual\Preview\Interceptor->___callPlugins('execute', Array, Array)
#9 /Users/local/workspace/www/mywebsite.com/public_m2/vendor/magento/framework/App/Action/Action.php(111): Smile\ElasticsuiteVirtualCategory\Controller\Adminhtml\Category\Virtual\Preview\Interceptor->execute()
#10 /Users/local/workspace/www/mywebsite.com/public_m2/vendor/magento/module-backend/App/AbstractAction.php(151): Magento\Framework\App\Action\Action->dispatch(Object(Magento\Framework\App\Request\Http))
#11 /Users/local/workspace/www/mywebsite.com/public_m2/vendor/magento/framework/Interception/Interceptor.php(58): Magento\Backend\App\AbstractAction->dispatch(Object(Magento\Framework\App\Request\Http))
#12 /Users/local/workspace/www/mywebsite.com/public_m2/vendor/magento/framework/Interception/Interceptor.php(138): Smile\ElasticsuiteVirtualCategory\Controller\Adminhtml\Category\Virtual\Preview\Interceptor->___callParent('dispatch', Array)
#13 /Users/local/workspace/www/mywebsite.com/public_m2/vendor/magento/module-backend/App/Action/Plugin/Authentication.php(145): Smile\ElasticsuiteVirtualCategory\Controller\Adminhtml\Category\Virtual\Preview\Interceptor->Magento\Framework\Interception\{closure}(Object(Magento\Framework\App\Request\Http))
#14 /Users/local/workspace/www/mywebsite.com/public_m2/vendor/magento/framework/Interception/Interceptor.php(135): Magento\Backend\App\Action\Plugin\Authentication->aroundDispatch(Object(Smile\ElasticsuiteVirtualCategory\Controller\Adminhtml\Category\Virtual\Preview\Interceptor), Object(Closure), Object(Magento\Framework\App\Request\Http))
#15 /Users/local/workspace/www/mywebsite.com/public_m2/vendor/magento/framework/Interception/Interceptor.php(153): Smile\ElasticsuiteVirtualCategory\Controller\Adminhtml\Category\Virtual\Preview\Interceptor->Magento\Framework\Interception\{closure}(Object(Magento\Framework\App\Request\Http))
#16 /Users/local/workspace/www/mywebsite.com/public_m2/generated/code/Smile/ElasticsuiteVirtualCategory/Controller/Adminhtml/Category/Virtual/Preview/Interceptor.php(32): Smile\ElasticsuiteVirtualCategory\Controller\Adminhtml\Category\Virtual\Preview\Interceptor->___callPlugins('dispatch', Array, Array)
#17 /Users/local/workspace/www/mywebsite.com/public_m2/vendor/magento/framework/App/FrontController.php(245): Smile\ElasticsuiteVirtualCategory\Controller\Adminhtml\Category\Virtual\Preview\Interceptor->dispatch(Object(Magento\Framework\App\Request\Http))
#18 /Users/local/workspace/www/mywebsite.com/public_m2/vendor/magento/framework/App/FrontController.php(212): Magento\Framework\App\FrontController->getActionResponse(Object(Smile\ElasticsuiteVirtualCategory\Controller\Adminhtml\Category\Virtual\Preview\Interceptor), Object(Magento\Framework\App\Request\Http))
#19 /Users/local/workspace/www/mywebsite.com/public_m2/vendor/magento/framework/App/FrontController.php(147): Magento\Framework\App\FrontController->processRequest(Object(Magento\Framework\App\Request\Http), Object(Smile\ElasticsuiteVirtualCategory\Controller\Adminhtml\Category\Virtual\Preview\Interceptor))
#20 /Users/local/workspace/www/mywebsite.com/public_m2/vendor/magento/framework/Interception/Interceptor.php(58): Magento\Framework\App\FrontController->dispatch(Object(Magento\Framework\App\Request\Http))
#21 /Users/local/workspace/www/mywebsite.com/public_m2/vendor/magento/framework/Interception/Interceptor.php(138): Magento\Framework\App\FrontController\Interceptor->___callParent('dispatch', Array)
#22 /Users/local/workspace/www/mywebsite.com/public_m2/vendor/magento/framework/Interception/Interceptor.php(153): Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception\{closure}(Object(Magento\Framework\App\Request\Http))
#23 /Users/local/workspace/www/mywebsite.com/public_m2/generated/code/Magento/Framework/App/FrontController/Interceptor.php(23): Magento\Framework\App\FrontController\Interceptor->___callPlugins('dispatch', Array, Array)
#24 /Users/local/workspace/www/mywebsite.com/public_m2/vendor/magento/framework/App/Http.php(116): Magento\Framework\App\FrontController\Interceptor->dispatch(Object(Magento\Framework\App\Request\Http))
#25 /Users/local/workspace/www/mywebsite.com/public_m2/generated/code/Magento/Framework/App/Http/Interceptor.php(23): Magento\Framework\App\Http->launch()
#26 /Users/local/workspace/www/mywebsite.com/public_m2/vendor/magento/framework/App/Bootstrap.php(264): Magento\Framework\App\Http\Interceptor->launch()
#27 /Users/local/workspace/www/mywebsite.com/public_m2/pub/index.php(30): Magento\Framework\App\Bootstrap->run(Object(Magento\Framework\App\Http\Interceptor))
#28 {main}

Disabling Elasticsuite, those fields are correctly populated.

Working on Magento Comunity Edition, 2.4.6-p6, PHP 8.1.28, Elasticsuite: 2.11.7.1

vahonc commented 2 days ago

Hello @eperrotta

I was not able to reproduce your issue on the fresh Magento 2.4.6-p6 CE, PHP 8.1.29 and Elasticsuite: 2.11.7.1

Screenshot from 2024-07-01 15-00-30

As you can see if, I unflagged "Use config setting" I can select any options from the list and it's not empty.

So, probably something wrong on your end, or it's pretty specific to your project. Are you sure there are no third party extensions that could be affecting this? Also, from which version you are upgrade of the Elasticsuite modules and how exactly did you do it?

BR, Vadym

tufahu commented 2 days ago

I've the same issue.

Using elasticsuite for years.. the latest upgrade paths are: 2.11.5.1 => 2.11.6 2.11.6 => 2.11.6.1 now it's on 2.11.7.1

vahonc commented 2 days ago

@tufahu,

Have you noticed any errors in Magento logs? How exactly did you do an upgrade?

BR, Vadym

rbayet commented 2 days ago

Hello @eperrotta,

Was the "Default Product Listing Sort by" select already empty before upgrading to the last version of Elasticsuite ?

Regards,

tufahu commented 2 days ago

@vahonc Ok from my side it is a non issue. Caused by a 3rd party.

eperrotta commented 2 days ago

Ok from my side it is a non issue. Caused by a 3rd party.

Can you kindly disclose which 3rd party module is causing your issue?

Edit: i found out the problem on my side. Fault of the 3rd party module MageBig_SmartMenu

Thanks for your support.