From f7e70cceedf3576ed36ce1c8ffa59109acae84f1 Mon Sep 17 00:00:00 2001 From: Sven Reichel Date: Fri, 14 Mar 2025 14:53:22 +0100 Subject: [PATCH 1/5] [FEAT] Redirect single search result to product page --- app/code/core/Mage/Catalog/Helper/Search.php | 8 +++ .../Model/Observer/SingleSearchResult.php | 57 +++++++++++++++++++ app/code/core/Mage/Catalog/etc/config.xml | 17 ++++++ app/code/core/Mage/Catalog/etc/system.xml | 9 +++ app/locale/en_US/Mage_Catalog.csv | 1 + 5 files changed, 92 insertions(+) create mode 100644 app/code/core/Mage/Catalog/Model/Observer/SingleSearchResult.php diff --git a/app/code/core/Mage/Catalog/Helper/Search.php b/app/code/core/Mage/Catalog/Helper/Search.php index 7fdb9006b37..37a2a95a394 100644 --- a/app/code/core/Mage/Catalog/Helper/Search.php +++ b/app/code/core/Mage/Catalog/Helper/Search.php @@ -31,6 +31,14 @@ public function isNotEnabled(): bool return !Mage::getStoreConfigFlag('catalog/search/enable_advanced_search'); } + /** + * @SuppressWarnings("PHPMD.StaticAccess") + */ + public function isRedirectSingleSearchResult(): bool + { + return Mage::getStoreConfigFlag('catalog/search/enable_single_search_result'); + } + /** * @SuppressWarnings("PHPMD.StaticAccess") */ diff --git a/app/code/core/Mage/Catalog/Model/Observer/SingleSearchResult.php b/app/code/core/Mage/Catalog/Model/Observer/SingleSearchResult.php new file mode 100644 index 00000000000..0e468817c8a --- /dev/null +++ b/app/code/core/Mage/Catalog/Model/Observer/SingleSearchResult.php @@ -0,0 +1,57 @@ +isRedirectSingleSearchResult()) { + return; + } + + /** @var Mage_Catalog_Block_Product_List $block */ + $block = Mage::app()->getLayout()->getBlock(self::RESULT_BLOCK_NAME); + if ($block) { + $collection = $block->getLoadedProductCollection(); + if ($collection && $collection->getSize() === 1) { + /** @var Mage_Catalog_Model_Product $product */ + $product = $collection->getFirstItem(); + $url = $product->getProductUrl(); + if ($url) { + Mage::app()->getResponse()->setRedirect($url)->sendResponse(); + exit; //stop everything else + } + } + } + } +} diff --git a/app/code/core/Mage/Catalog/etc/config.xml b/app/code/core/Mage/Catalog/etc/config.xml index ea54533b4d5..d0a878af775 100644 --- a/app/code/core/Mage/Catalog/etc/config.xml +++ b/app/code/core/Mage/Catalog/etc/config.xml @@ -727,6 +727,22 @@ + + + + catalog/observer_singleSearchResult + execute + + + + + + + catalog/observer_singleSearchResult + execute + + + @@ -839,6 +855,7 @@ 1 + 1 diff --git a/app/code/core/Mage/Catalog/etc/system.xml b/app/code/core/Mage/Catalog/etc/system.xml index 6020afc0372..43dcb3268ce 100644 --- a/app/code/core/Mage/Catalog/etc/system.xml +++ b/app/code/core/Mage/Catalog/etc/system.xml @@ -486,6 +486,15 @@ 1 1 + + + select + adminhtml/system_config_source_enabledisable + 850 + 1 + 1 + 1 + diff --git a/app/locale/en_US/Mage_Catalog.csv b/app/locale/en_US/Mage_Catalog.csv index 83e6ec489d0..79735d8c352 100644 --- a/app/locale/en_US/Mage_Catalog.csv +++ b/app/locale/en_US/Mage_Catalog.csv @@ -287,6 +287,7 @@ "Enable Advanced Search","Enable Advanced Search" "Enable MAP","Enable MAP" "Enable Qty Increments","Enable Qty Increments" +"Enable redirect single search result to product","Enable redirect single search result to product" "Enable WYSIWYG","Enable WYSIWYG" "Enable for reindexing a big number of SKUs.","Enable for reindexing a big number of SKUs." "Enabled","Enabled" From 3913a1bd69ad8aa9604edbc9f5c09831a533ed0a Mon Sep 17 00:00:00 2001 From: Sven Reichel Date: Fri, 14 Mar 2025 15:07:00 +0100 Subject: [PATCH 2/5] phpmd --- .../core/Mage/Catalog/Model/Observer/SingleSearchResult.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/code/core/Mage/Catalog/Model/Observer/SingleSearchResult.php b/app/code/core/Mage/Catalog/Model/Observer/SingleSearchResult.php index 0e468817c8a..2775484b354 100644 --- a/app/code/core/Mage/Catalog/Model/Observer/SingleSearchResult.php +++ b/app/code/core/Mage/Catalog/Model/Observer/SingleSearchResult.php @@ -29,6 +29,9 @@ class Mage_Catalog_Model_Observer_SingleSearchResult /** * Disable Advanced Search at storeview scope + * + * @SuppressWarnings("PHPMD.ExitExpression") + * @SuppressWarnings("PHPMD.StaticAccess") */ public function execute(Varien_Event_Observer $observer): void { From e3cfc5bf84c6af9fdae38b95c798b0fc7cf71a59 Mon Sep 17 00:00:00 2001 From: Sven Reichel Date: Fri, 14 Mar 2025 15:21:03 +0100 Subject: [PATCH 3/5] typo + interface --- .../Model/Observer/DisableAdvancedSearch.php | 2 +- .../Model/Observer/SingleSearchResult.php | 4 +-- .../core/Mage/Core/Observer/Interface.php | 26 +++++++++++++++++++ 3 files changed, 29 insertions(+), 3 deletions(-) create mode 100644 app/code/core/Mage/Core/Observer/Interface.php diff --git a/app/code/core/Mage/Catalog/Model/Observer/DisableAdvancedSearch.php b/app/code/core/Mage/Catalog/Model/Observer/DisableAdvancedSearch.php index 1e8bcf60bc3..70ee95ed646 100644 --- a/app/code/core/Mage/Catalog/Model/Observer/DisableAdvancedSearch.php +++ b/app/code/core/Mage/Catalog/Model/Observer/DisableAdvancedSearch.php @@ -20,7 +20,7 @@ * @category Mage * @package Mage_Catalog */ -class Mage_Catalog_Model_Observer_DisableAdvancedSearch +class Mage_Catalog_Model_Observer_DisableAdvancedSearch implements Mage_Core_Observer_Interface { /** * Disable Advanced Search at storeview scope diff --git a/app/code/core/Mage/Catalog/Model/Observer/SingleSearchResult.php b/app/code/core/Mage/Catalog/Model/Observer/SingleSearchResult.php index 2775484b354..49de1a7e76a 100644 --- a/app/code/core/Mage/Catalog/Model/Observer/SingleSearchResult.php +++ b/app/code/core/Mage/Catalog/Model/Observer/SingleSearchResult.php @@ -20,7 +20,7 @@ * @category Mage * @package Mage_Catalog */ -class Mage_Catalog_Model_Observer_SingleSearchResult +class Mage_Catalog_Model_Observer_SingleSearchResult implements Mage_Core_Observer_Interface { /** * Product list block name in layout @@ -28,7 +28,7 @@ class Mage_Catalog_Model_Observer_SingleSearchResult public const RESULT_BLOCK_NAME = 'search_result_list'; /** - * Disable Advanced Search at storeview scope + * Redirect single search result to product page * * @SuppressWarnings("PHPMD.ExitExpression") * @SuppressWarnings("PHPMD.StaticAccess") diff --git a/app/code/core/Mage/Core/Observer/Interface.php b/app/code/core/Mage/Core/Observer/Interface.php new file mode 100644 index 00000000000..030d9e369e2 --- /dev/null +++ b/app/code/core/Mage/Core/Observer/Interface.php @@ -0,0 +1,26 @@ + Date: Fri, 14 Mar 2025 15:36:38 +0100 Subject: [PATCH 4/5] Use `execute()` from observer interface --- app/code/core/Mage/Catalog/etc/config.xml | 4 ---- app/code/core/Mage/Core/Model/App.php | 12 ++++++++++-- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/app/code/core/Mage/Catalog/etc/config.xml b/app/code/core/Mage/Catalog/etc/config.xml index d0a878af775..25343927bbf 100644 --- a/app/code/core/Mage/Catalog/etc/config.xml +++ b/app/code/core/Mage/Catalog/etc/config.xml @@ -715,7 +715,6 @@ catalog/observer_disableAdvancedSearch - execute @@ -723,7 +722,6 @@ catalog/observer_disableAdvancedSearch - execute @@ -731,7 +729,6 @@ catalog/observer_singleSearchResult - execute @@ -739,7 +736,6 @@ catalog/observer_singleSearchResult - execute diff --git a/app/code/core/Mage/Core/Model/App.php b/app/code/core/Mage/Core/Model/App.php index 53ddcf49eae..e1f0fa95773 100644 --- a/app/code/core/Mage/Core/Model/App.php +++ b/app/code/core/Mage/Core/Model/App.php @@ -1413,15 +1413,23 @@ public function dispatchEvent($eventName, $args) break; case 'object': case 'model': - $method = $obs['method']; $observer->addData($args); $object = Mage::getModel($obs['model']); + if ($object instanceof Mage_Core_Observer_Interface) { + $method = 'execute'; + } else { + $method = $obs['method']; + } $this->_callObserverMethod($object, $method, $observer, $obsName); break; default: - $method = $obs['method']; $observer->addData($args); $object = Mage::getSingleton($obs['model']); + if ($object instanceof Mage_Core_Observer_Interface) { + $method = 'execute'; + } else { + $method = $obs['method']; + } $this->_callObserverMethod($object, $method, $observer, $obsName); break; } From 94b641446ac1ef2aedd932a91a821dcc71453cb2 Mon Sep 17 00:00:00 2001 From: Sven Reichel Date: Sat, 22 Mar 2025 03:59:59 +0100 Subject: [PATCH 5/5] revert and move to catalog-search --- app/code/core/Mage/Catalog/Helper/Search.php | 49 ------------------- app/code/core/Mage/Catalog/etc/config.xml | 32 ------------ app/code/core/Mage/Catalog/etc/system.xml | 23 --------- .../core/Mage/CatalogSearch/Helper/Data.php | 24 +++++++++ .../Model/Observer/DisableAdvancedSearch.php | 5 +- .../Model/Observer/SingleSearchResult.php | 5 +- .../core/Mage/CatalogSearch/etc/config.xml | 34 +++++++++++++ .../core/Mage/CatalogSearch/etc/system.xml | 20 ++++++++ app/locale/en_US/Mage_Catalog.csv | 2 - app/locale/en_US/Mage_CatalogSearch.csv | 2 + 10 files changed, 84 insertions(+), 112 deletions(-) delete mode 100644 app/code/core/Mage/Catalog/Helper/Search.php rename app/code/core/Mage/{Catalog => CatalogSearch}/Model/Observer/DisableAdvancedSearch.php (82%) rename app/code/core/Mage/{Catalog => CatalogSearch}/Model/Observer/SingleSearchResult.php (89%) diff --git a/app/code/core/Mage/Catalog/Helper/Search.php b/app/code/core/Mage/Catalog/Helper/Search.php deleted file mode 100644 index 37a2a95a394..00000000000 --- a/app/code/core/Mage/Catalog/Helper/Search.php +++ /dev/null @@ -1,49 +0,0 @@ -_getUrl(Mage::getStoreConfig('web/default/cms_no_route')); - } -} diff --git a/app/code/core/Mage/Catalog/etc/config.xml b/app/code/core/Mage/Catalog/etc/config.xml index 25343927bbf..73f95fb4ffd 100644 --- a/app/code/core/Mage/Catalog/etc/config.xml +++ b/app/code/core/Mage/Catalog/etc/config.xml @@ -711,34 +711,6 @@ - - - - catalog/observer_disableAdvancedSearch - - - - - - - catalog/observer_disableAdvancedSearch - - - - - - - catalog/observer_singleSearchResult - - - - - - - catalog/observer_singleSearchResult - - - @@ -849,10 +821,6 @@ 9 1 - - 1 - 1 - diff --git a/app/code/core/Mage/Catalog/etc/system.xml b/app/code/core/Mage/Catalog/etc/system.xml index 43dcb3268ce..8dc4f3f07e5 100644 --- a/app/code/core/Mage/Catalog/etc/system.xml +++ b/app/code/core/Mage/Catalog/etc/system.xml @@ -474,29 +474,6 @@ --> - - - - - - select - adminhtml/system_config_source_enabledisable - 800 - 1 - 1 - 1 - - - - select - adminhtml/system_config_source_enabledisable - 850 - 1 - 1 - 1 - - - diff --git a/app/code/core/Mage/CatalogSearch/Helper/Data.php b/app/code/core/Mage/CatalogSearch/Helper/Data.php index 311782b2abf..d69439fab35 100644 --- a/app/code/core/Mage/CatalogSearch/Helper/Data.php +++ b/app/code/core/Mage/CatalogSearch/Helper/Data.php @@ -354,4 +354,28 @@ public function getEngine() return $this->_engine; } + + /** + * @SuppressWarnings("PHPMD.StaticAccess") + */ + public function isNotEnabled(): bool + { + return !Mage::getStoreConfigFlag('catalog/advanced_search/enabled'); + } + + /** + * @SuppressWarnings("PHPMD.StaticAccess") + */ + public function isRedirectSingleSearchResult(): bool + { + return Mage::getStoreConfigFlag('catalog/search/redirect_to_single_search_result'); + } + + /** + * @SuppressWarnings("PHPMD.StaticAccess") + */ + public function getNoRoutePath(): string + { + return $this->_getUrl(Mage::getStoreConfig('web/default/cms_no_route')); + } } diff --git a/app/code/core/Mage/Catalog/Model/Observer/DisableAdvancedSearch.php b/app/code/core/Mage/CatalogSearch/Model/Observer/DisableAdvancedSearch.php similarity index 82% rename from app/code/core/Mage/Catalog/Model/Observer/DisableAdvancedSearch.php rename to app/code/core/Mage/CatalogSearch/Model/Observer/DisableAdvancedSearch.php index 70ee95ed646..de9fad0edff 100644 --- a/app/code/core/Mage/Catalog/Model/Observer/DisableAdvancedSearch.php +++ b/app/code/core/Mage/CatalogSearch/Model/Observer/DisableAdvancedSearch.php @@ -20,7 +20,7 @@ * @category Mage * @package Mage_Catalog */ -class Mage_Catalog_Model_Observer_DisableAdvancedSearch implements Mage_Core_Observer_Interface +class Mage_CatalogSearch_Model_Observer_DisableAdvancedSearch implements Mage_Core_Observer_Interface { /** * Disable Advanced Search at storeview scope @@ -29,8 +29,7 @@ class Mage_Catalog_Model_Observer_DisableAdvancedSearch implements Mage_Core_Obs */ public function execute(Varien_Event_Observer $observer): void { - /** @var Mage_Catalog_Helper_Search $helper */ - $helper = Mage::helper('catalog/search'); + $helper = Mage::helper('catalogsearch'); if ($helper->isNotEnabled()) { $observer->getControllerAction()->getResponse()->setRedirect($helper->getNoRoutePath()); } diff --git a/app/code/core/Mage/Catalog/Model/Observer/SingleSearchResult.php b/app/code/core/Mage/CatalogSearch/Model/Observer/SingleSearchResult.php similarity index 89% rename from app/code/core/Mage/Catalog/Model/Observer/SingleSearchResult.php rename to app/code/core/Mage/CatalogSearch/Model/Observer/SingleSearchResult.php index 49de1a7e76a..04e43a77777 100644 --- a/app/code/core/Mage/Catalog/Model/Observer/SingleSearchResult.php +++ b/app/code/core/Mage/CatalogSearch/Model/Observer/SingleSearchResult.php @@ -20,7 +20,7 @@ * @category Mage * @package Mage_Catalog */ -class Mage_Catalog_Model_Observer_SingleSearchResult implements Mage_Core_Observer_Interface +class Mage_CatalogSearch_Model_Observer_SingleSearchResult implements Mage_Core_Observer_Interface { /** * Product list block name in layout @@ -35,8 +35,7 @@ class Mage_Catalog_Model_Observer_SingleSearchResult implements Mage_Core_Observ */ public function execute(Varien_Event_Observer $observer): void { - /** @var Mage_Catalog_Helper_Search $helper */ - $helper = Mage::helper('catalog/search'); + $helper = Mage::helper('catalogsearch'); if (!$helper->isRedirectSingleSearchResult()) { return; diff --git a/app/code/core/Mage/CatalogSearch/etc/config.xml b/app/code/core/Mage/CatalogSearch/etc/config.xml index 43b9e74fc0b..4f0d830a8dc 100644 --- a/app/code/core/Mage/CatalogSearch/etc/config.xml +++ b/app/code/core/Mage/CatalogSearch/etc/config.xml @@ -96,6 +96,36 @@ + + + + + catalogsearch/observer_disableAdvancedSearch + + + + + + + catalogsearch/observer_disableAdvancedSearch + + + + + + + catalogsearch/observer_singleSearchResult + + + + + + + catalogsearch/observer_singleSearchResult + + + + @@ -129,7 +159,11 @@ OR 2000 1 + 1 + + 1 + diff --git a/app/code/core/Mage/CatalogSearch/etc/system.xml b/app/code/core/Mage/CatalogSearch/etc/system.xml index 8b886e584c1..49cd15800b0 100644 --- a/app/code/core/Mage/CatalogSearch/etc/system.xml +++ b/app/code/core/Mage/CatalogSearch/etc/system.xml @@ -111,8 +111,28 @@ 1 1 + + + select + adminhtml/system_config_source_enabledisable + 80 + 1 + 1 + 1 + + + + + select + adminhtml/system_config_source_enabledisable + 1 + 1 + 1 + 1 + + diff --git a/app/locale/en_US/Mage_Catalog.csv b/app/locale/en_US/Mage_Catalog.csv index 79735d8c352..6f461c89f46 100644 --- a/app/locale/en_US/Mage_Catalog.csv +++ b/app/locale/en_US/Mage_Catalog.csv @@ -284,10 +284,8 @@ "Email","Email" "Email to a Friend","Email to a Friend" "Empty","Empty" -"Enable Advanced Search","Enable Advanced Search" "Enable MAP","Enable MAP" "Enable Qty Increments","Enable Qty Increments" -"Enable redirect single search result to product","Enable redirect single search result to product" "Enable WYSIWYG","Enable WYSIWYG" "Enable for reindexing a big number of SKUs.","Enable for reindexing a big number of SKUs." "Enabled","Enabled" diff --git a/app/locale/en_US/Mage_CatalogSearch.csv b/app/locale/en_US/Mage_CatalogSearch.csv index 93e84fe1386..c8896422ecf 100644 --- a/app/locale/en_US/Mage_CatalogSearch.csv +++ b/app/locale/en_US/Mage_CatalogSearch.csv @@ -12,6 +12,7 @@ "Catalog Search","Catalog Search" "Catalog Search Index","Catalog Search Index" "Don't see what you're looking for?","Don't see what you're looking for?" +"Enable Advanced Search","Enable Advanced Search" "Enter ""0"" to enable layered navigation for any number of results.","Enter ""0"" to enable layered navigation for any number of results." "Go","Go" "Go to Home Page","Go to Home Page" @@ -31,6 +32,7 @@ "Popular Search Terms","Popular Search Terms" "Quick Search Form","Quick Search Form" "Rebuild Catalog product fulltext search index","Rebuild Catalog product fulltext search index" +"Redirect single search result to product","Redirect single search result to product" "Relevance","Relevance" "Results","Results" "Search","Search"