题
如何在Magento中禁用高级搜索功能?
即使您使用布局从前端删除链接,如果有人知道Magento URL的访问 /目录搜索/高级 将获得高级搜索页面。
我发现一些访问者正在访问目录搜索/高级/直接。他们为什么要这样做?我发现使用高级搜索功能可以为您的竞争对手提供非常简单快捷的信息,了解您从每个品牌/类别/总共启用了多少产品。
例如,在高级搜索中,只需搜索0到1000000之间的价格,您就可以确定所有产品都是数字。搜索所有制造商,您将获得您商店中所有产品的数量。在我看来,这应该得到保护。在这种情况下,应该使用高级搜索功能,但要小心。
回到主要问题如何启用/禁用高级搜索我上面提到的问题。首先,我想重写/catalogsearch/avanced link的规则。重定向页面可能有一个非常好的横幅。
谢谢!.
解决方案
如果您想删除链接,您可以通过布局XML:
<layout version="0.1.0">
<default>
<reference name="footer_links">
<!-- Remove 'Advanced Search' -->
<action method="removeLinkByUrl"><url helper="catalogsearch/getAdvancedSearchUrl" /></action>
</reference>
</default>
</layout>
要禁用控制器本身(而不是最干净的方法是最快的),请创建:
app/code/core/Mage/CatalogSearch/controllers/AdvancedController.php
进入 本地 代码池 app/code/local/Mage/CatalogSearch/controllers/AdvancedController.php
并将本地副本复盖为:
class Mage_CatalogSearch_AdvancedController extends Mage_Core_Controller_Front_Action
{
public function indexAction()
{
$this->_redirectUrl('/');
}
public function resultAction()
{
$this->_redirectUrl('/');
}
}
任何请求将被重定向到主页。
其他提示
由于URL重写不适用于结果页面(禁用模块输出也是如此),这里还有另一个更灵活的解决方案:
解决方案1:
创建扩展以将用户重定向到配置的"CMS无路由页面"。
听两个事件:
controller_action_predispatch_catalogsearch_advanced_index
controller_action_predispatch_catalogsearch_advanced_result
添加观察者
public function disableAdvancedSearch(Varien_Event_Observer $observer) { if (!Mage::getStoreConfigFlag('catalog/search/enable_advanced_search')) { $path = Mage::getStoreConfig('web/default/cms_no_route'); $observer->getControllerAction()->getResponse()->setRedirect(Mage::getUrl($path)); } }
添加配置部分
<?xml version="1.0" encoding="UTF-8"?> <config> <sections> <catalog> <groups> <search> <fields> <enable_advanced_search translate="label"> <label>Enable Advanced Search</label> <frontend_type>select</frontend_type> <source_model>adminhtml/system_config_source_enabledisable</source_model> <sort_order>999</sort_order> <show_in_default>1</show_in_default> <show_in_website>1</show_in_website> <show_in_store>1</show_in_store> </enable_advanced_search> </fields> </search> </groups> </catalog> </sections> </config>
M1: https://github.com/sreichel/magento-StackExchange_DisableAdvancedSearch
M2: https://github.com/sreichel/magento2-StackExchange_DisableAdvancedSearch
解决方案2:
将此(或更好的东西)添加到 .htaccess
...
RewriteCond %{HTTP_HOST} ^www.domain.com$ [OR]
RewriteCond %{HTTP_HOST} ^domain.com$
RewriteRule ^catalogsearch/advanced/(.*)$ /no-route [R=301,L]
是的,您可以使用重写选项,因为Magento具有用于搜索功能的Catalogsearch模块,如果我们将禁用该扩展,那么它也将停止简单搜索。
有一个可以使用的选项,可以覆盖高级目录搜索模板文件哪个位置如下: - 基本/默认/模板/ catalogsearch / apprent / form.phtml文件,您可以将此文件与相同的文件夹使用不同设计的结构进入主题文件夹。因此,您可以从那里删除搜索表单,可以使用不同的设计。
我认为代替重写控制器,您可以使用magento的 URL重定向管理功能
i.e在admin中转到
目录> URL重定向>添加URL重定向>选择URL重定向类型为“自定义”
选择store ,请求路径: catalogsearch / advanced / 目标路径:任何页线无路线或主页重定向类型:永久性(301)“,以便爬虫将爬网,而不是提前搜索URL”
在Magento 2.1中,您可以从后端禁用搜索模块:转到商店>>配置>>高级>> Advanced >>禁用模块输出滚动到 magento_search 和/或 magento_catalogsearch 并禁用它然后保存。此后记得清除缓存。