【问题标题】:Drupal - Search showing preg_match errorDrupal - 搜索显示 preg_match 错误
【发布时间】:2011-07-14 19:17:48
【问题描述】:

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

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

感谢任何提示,谢谢。

【问题讨论】:

  • 如果您启用了主题开发者或开发者,请禁用它们并重试
  • 我没有安装它们,它显示错误。事实上,我只是安装了它们,以为我可以从它们那里得到一些帮助,但到目前为止还没有运气

标签: php drupal


【解决方案1】:

如果不发布代码(因为代码是自定义的),我认为没有人可以满意地回答您的问题。但是,如果您不介意修改模块代码,只需在第 671 行之前执行 is_array 条件,如果是,则 implode 条款(或检查它并删除任何垃圾。)将该字符串传递到行671.

【讨论】:

  • 感谢您的提示,我实际上只是出于测试目的而走那条路。我做了 print_r($keys) ($keys 是第 671 行中 preg_match 的第二个参数),它实际上只是一个空数组。 So only when the 'Rebuild Theme Registry on every page' option is turned OFF, the $keys variable is (may I call it) corrupted and being passed as an empty array, when the option is turned ON, $keys returns the typed search关键字,一切都很好。也许,我可以通过某种方式排除搜索对主题注册表的依赖?
  • $keys 来自哪里?主题注册表中是否有一个名为$keys 的变量? $keys 以某种方式被覆盖。
  • $keys 是 search.module 中使用的变量,并且(看起来)它从我的自定义搜索模块中获取它的值。我使用 devel 模块(在 /devel/theme/registry 页面上)签入了主题注册表,但在那里我没有看到任何 $keys 变量/数组。这基本上是正在发生的事情,我的自定义模块中的搜索值被覆盖,被某个地方的空数组替换,并且在某种程度上与主题注册表相关,并且在第 671 行(由 $keys)上引用,但是我应该如何检查/确认这一点,更重要的是找出它发生在哪里?
  • @Navneet 您需要自己搜索代码,跟踪一切进展情况(使用调试器比尝试手动执行要容易得多),或者进行回溯。跨度>
【解决方案2】:

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

我首先将所有功能逻辑从 template.php 移动到我的自定义模块(无论如何我都应该这样做,但它似乎可能是个问题)但它并没有解决它。我不得不挖掘我的自定义模块代码,这就是我发现问题所在的地方。我正在使用以下内容来获取输入的关键字:

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

事实证明,当 Rebuild Theme 注册表选项关闭时,上面的数组值被主题注册表覆盖并被一个空数组替换,因此导致搜索模块的第 671 行出现错误,这是期待的一个字符串作为第二个参数,而不是一个数组。用下面的替换上面的为我解决了它:

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

【讨论】:

    猜你喜欢
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多