2011-07-14 38 views
0

我有一个自定义搜索正在我正在Drupal中建立的网站之一进行。当“在每个页面上重建主题注册表”时,搜索工作完好无损。在主题配置页面上选中复选框。但是,当我取消选中(用于制作)时,搜索不再起作用,同一页面会在点击搜索按钮时重新加载。在查看最近的日志条目时,我发现错误: preg_match()期望参数2是字符串,数组在671行的/var/www/devel_sites/SITENAME/docroot/modules/search/search.module中给出。Drupal - 搜索显示preg_match错误

有人有任何想法,为什么我的搜索将取决于主题注册表,以及如何解决这个问题?我有一个用于搜索的自定义模块,部分功能位于template.php中。

任何提示表示赞赏,谢谢。

+0

如果你有主题开发者或启用devel软件包,禁用它们,然后再试一次 – Laxman13

+0

我没有让他们安装和它显示错误。事实上,我只是安装他们认为我可以从他们那里得到一些帮助,但到目前为止没有运气 – Navneet

回答

0

我(终于)能够解决这个问题,并发布了下面的解决方案,以防其他人面临相同的问题。

我开始通过移动从template.php文件所有的功能逻辑,我的自定义模块(我应该做反正它,它看起来像它可能是一个问题),但它并没有解决它。我不得不挖掘我的自定义模块代码,这就是我发现问题的地方。我用的是以下获得输入的关键字:

$form_state['values']['processed_keys']

事实证明,重建主题注册表选项是关闭的,上面的阵列值由主题注册表覆盖,并正在由一个空的更换时数组,因此导致搜索模块的行671中的错误,期望将字符串作为第二个参数,而不是数组。更换上面下面的解决了这个问题对我来说:

$form['basic']['inline']['processed_keys']['#post']['keys']

0

没有张贴代码(因为代码是自定义的),我不认为任何人都可以令人满意的回答你的问题。但是,如果你不介意修改模块代码,只需做一个is_array条件线671之前,如果是,implode条款(或检查它,摆脱任何垃圾。)传递到行线671

+0

感谢您的提示,我其实只是为了测试目的而去那条路线。我做了print_r($ keys)($ key是第671行中preg_match的第二个参数),它实际上只是一个空数组。因此,只有当'每页上的重建主题注册表'选项关闭时,$ keys变量会(可能会调用它)损坏并作为空数组传递,当该选项打开时,$ keys返回类型化搜索关键字和一切都很好。也许,有一些方法可以排除搜索依赖于主题注册表? – Navneet

+0

'$ keys'从哪里来?在主题注册表中的某处是否有一个名为'$ keys'的变量?不知怎的,'$ keys'正在被覆盖。 – wanovak

+0

$ keys是search.module中使用的变量,并且(看起来像)它从我的自定义搜索模块中获取它的值。我使用devel模块(在/ devel/theme/registry页面)检查了主题注册表,但是在那里我没有看到任何$ keys变量/数组。这基本上是发生了什么,来自我的自定义模块的搜索值被覆盖,被一个空的数组替换,并以某种方式与主题注册表相关,并在第671行(通过$键)引用,但我应该如何检查/确认并更重要的是找出它发生的地方? – Navneet