Magento - 自动完成建议搜索不起作用

时间:2011-02-19 08:30:00

标签: search magento autocomplete magento-1.4 autosuggest

我在Magento v1.4.2.0中加入了一个新主题,并完成了所有必要的更改,但只遵循Magento真正的方式来覆盖Magento模块&方法

我唯一的问题是前端的自动完成建议搜索功能根本不起作用。 AJAX正在运行,因为我可以在“Firebug”中查看呼叫(状态显示为“200 OK”),但搜索结果下拉列表未到来。

更多信息:

  • 检查表单的方法,并将其设置为“get”。
  • form.mini.phtml”中文字字段的名称为“q”。
  • 同时检查了日志文件(exception.logsystem.log),但此处未打印任何有关自动完成搜索的内容。
  • 检查了最小查询长度的设置(来自“系统>配置>目录>目录搜索>最小查询长度”)并将其设置为“1
  • 尽可能精确地将所有HTML合并到“form.mini.phtml”页面中,同时包含所有必需的JS文件,其中没有任何错误。因此,Firebug正在报告blank / NULL AJAX响应,没有任何错误。

修改: -
我也遇到了另一个问题。假设我有4个产品,每个产品都以名称“测试”开头。另外,我们假设这4个产品的名称是“测试1 ”,“测试2 ”,“测试3 ”,“测试4 “ 现在,如果我使用查询“测试”进行简单搜索,则在路由器“catalogsearch/index”中,结果显示有4个产品可用,这是正确的。但是,如果我使用查询搜索“测试1 ”,则没有显示任何结果,这非常奇怪。

我也使用“jQuery”,没有冲突条件。但是,还有6个“jQuery”插件,所有插件都没有完全遵循无冲突条件。这是因为其中一些插件中的代码很大,而且我不可能改变每一个&每个“$”签到“jQuery”,使其不兼容冲突。任何人都可以提出这类问题吗?它是否以任何方式影响Auto Suggest Search?

4 个答案:

答案 0 :(得分:6)

听起来服务器响应AJAX调用的方式存在问题,而不是表单或javascript的问题。我建议你需要调试几个关键领域。

理想情况下,您可以使用连接到IDE(Netbeans,Eclipse,其他)的Apache上的Xdebug进行调试。我的个人偏好/设置是Netbeans,但其他人将工作正常。如果无法使用实时调试,则可以通过代码块插入print_r / echo语句并以此方式跟踪调用。

  1. Mage_CatalogSearch_AjaxController
  2. form.mini.phtml上的javascript应该将请求发送到Mage_CatalogSearch_AjaxControllersuggestAction。在此方法的第一个if语句的任一侧设置断点/跟踪消息。

    如果没有遇到断点/跟踪,请尝试通过将http://hostname/catalogsearch/ajax/suggest?q=query放入浏览器地址栏来手动点击操作。

    如果这不起作用,那么catalogsearch模块的配置就会出现问题,可能与<frontname><routers>部分有关。使用Alan Storm的Configviewer或CommerceBug模块进行调试。

    1. Mage_CatalogSearch_Block_Autocomplete
    2. AjaxController创建了Mage_CatalogSearch_Block_Autocomplete的实例,用于执行实际查询。在$suggestData = $this->getSuggestData();之前设置断点/跟踪以检查是否正在实例化块。

      在该行之后,该块调用它自己的getSuggestData()方法。继续跟踪代码以查看错误发生的位置。

      1. Mage_CatalogSearch_Model_Query :: getSuggestCollection()
      2. Block调用此方法来检索与q param匹配的值,特别是将param插入SQL查询条件的setQueryFilter()方法。再次,通过此处追踪以找到错误。

        当你在IDE中使用实时调试时,我无法强调你会发现这个(以及大多数Magento问题)会更容易。如果您需要有关此过程的提示,请阅读my answer here

        确保让Developer Mode中的服务器输出尽可能多的错误。

答案 1 :(得分:3)

如果您查看工作网站的来源(view-source:http://demo.magentocommerce.com/),您会发现搜索表单如下所示:

<div class="form-search">
    <label for="search">Search:</label>
    <input id="search" type="text" name="q" value="" class="input-text" />
    <button type="submit" title="Search" class="button"><span><span>Search</span></span></button>
    <div id="search_autocomplete" class="search-autocomplete"></div>
    <script type="text/javascript">
    //<![CDATA[
        var searchForm = new Varien.searchForm('search_mini_form', 'search', 'Search entire store here...');
        searchForm.initAutocomplete('http://demo.magentocommerce.com/catalogsearch/ajax/suggest/', 'search_autocomplete');
    //]]>
    </script>
</div>

重要的部分似乎是一个名为search_autocomplete的元素,它的ID被传递给searchForm.initAutocomplete()。另外,请确保您的新主题包含prototype.js和来自js/varien/的文件,并且没有任何其他Javascript错误。

答案 2 :(得分:3)

请检查一次,您搜索一个单词后,您知道该产品是否存在。如果无法显示,请按回车键,您将被发送到结果视图。在那次测试之后,如果您现在可以在建议搜索中找到该文章。

答案 3 :(得分:3)

我遇到了同样的问题......看起来搜索中有一个错误,或者与德国市场的某个扩展部门发生冲突....

如果您输入此内容,请检查您获得的内容:http://www.studio-ausruestung.de/catalogsearch/ajax/suggest/?q=%当然是您的网站名称。

Normaly你必须得到所有结果......