代码之家  ›  专栏  ›  技术社区  ›  Dylan West

如何在Drupal的Create Content页面中钩住一个字段?

  •  1
  • Dylan West  · 技术社区  · 14 年前

    我正在从Drupal的阵列移位安装配置文件构建一个想法捕获网站,我正在尝试为用户开始创建新想法时创建类似的条目查找。是否有一种方法可以检测用户何时在创建新想法表单(在CCK中创建的新内容类型)的标题字段中键入文本,然后使用Ajax创建基于我创建的自定义SQL查询的所有其他已发布想法的动态下拉列表?我在许多第三方的COTS工具中看到了这一点,尤其是在StackOverflow中,我希望在Drupal中也能看到。现在,我能想到的唯一方法是黑客的CCK模块,我知道这不是一个好主意,或以某种方式挂钩的形式。我不知道该怎么做。我使用hook_form_alter()吗?我用的是Drupal6.16和CCK6.x-2.7。谢谢。

    3 回复  |  直到 14 年前
        1
  •  1
  •   Grayside    14 年前

    有一个非常好的 autocomplete system 在Drupal中,但是如果你想完全偏离传统的路径,就没有很好的文档记录。

    我已经充分利用了 Autocomplete Widgets 模块。您可以使用它作为一个小部件创建一个专用的CCK文本字段,然后使用一个PHP代码段来设置允许的值。允许的值用于生成自动完成选项。

    我只是将一个php函数调用放到了snippet区域。我在一个自定义模块中定义的PHP函数查询了一个远程数据库,并用drupal_json()返回了结果。

        2
  •  1
  •   Dylan West    14 年前

    我自己解决了问题。我是这样做的:

    • 为标题文本字段设置一个drupal.behavior of onchange
    • 在该onchange处理程序中进行了Ajax调用
    • 将Ajax调用连接到与我在自定义模块中创建的回调函数相对应的路径
    • 关键:为了调用回调函数(hook_menu()中定义的函数),我必须先禁用然后重新启用该自定义模块。
    • 在回调函数中进行了一个SQL查询,该函数在数据库中查找了类似的想法
    • 使结果打印在我放置在标题文本字段正下方的标记元素中。我将结果包装在链接到各自想法页面的标签中。

    瞧,它现在真是魅力四射!我不得不拼凑出大约10个教程来解决这个问题。

        3
  •  0
  •   DrColossos    14 年前

    不知道这是否与您想要的相似,但是您可以有一个带有freetext输入的cck字段,它将打开一个Ajax生成的带有可能匹配项的“下拉”字段。Afaik这只适用于节点、分类法和其他Drupal集成类型。无法使用自定义查询。

    如果您需要自己创建一些内容,请查看源文件中此“自由文本”字段的源文件,并根据需要对其进行调整和/或为此特殊类型创建自定义CCK字段。