【问题标题】:how to build Drupal 6 user form that display results on page?如何构建在页面上显示结果的 Drupal 6 用户表单?
【发布时间】:2009-10-02 09:46:47
【问题描述】:

我想在 LEFT 和 RESULTS 中的内容(中心)部分建立一个搜索表单。

我知道如何创建模块 .. 但是如何分配它们的位置? 或者我应该将搜索表单作为块并将它们分配给构建/块/中的 LEFT。

搜索表单有 3 个文本框,没有一个是必需的。 "姓名","姓氏","年龄"

无论用户输入什么,我都想在模板的 CENTER 部分显示结果。

显然表单会将变量发送为$_POST

但是如果有超过 5 个结果我想在结果页面中添加分页。

那么我应该如何为<a href="?"建立链接

我想要像 /search//Smith/24 这样的 cleanURL 或search/John//15search/John/Smith/40 用于响应“姓名、姓氏、年龄” 然后在使用分页时 通过添加/search/john/smith/40/page/3 ?

【问题讨论】:

  • 我非常想要。谁能给我 _MENU() 的示例,它支持 /results/% 的路径,因为我不知道我将发送多少个参数(基于用户输入)。所以如果它是 2 个参数,它将是 /search/john/smith 如果 1 个参数 /search/john 是否有任何通用 /N 野猫?所以无论向路径添加多少参数,这个 menu() 都会被触发
  • Drupal 会将任何附加的 URL 元素作为附加参数传递给您的 hook_menu 回调函数,无论您指定了多少占位符。在你的回调中使用func_get_args() 来获取它们。
  • 澄清最后一条评论,如果你只注册了一个通配符('results/%'),但实际请求有两个额外的元素('request/john/smith/40'),你的回调将作为显式参数传递“john”,但也将“smith”和“40”作为隐式附加参数传递。

标签: forms search drupal


【解决方案1】:

好的,首先,我第二个 googletorps 建议首先查看基于 views 的解决方案,因为它可以为您节省很多自定义编码。但是,我经常发现自己处于这样一个位置,即基于视图的解决方案只能提供我需要的 80%,并且从一开始就添加缺少的 20% 的视图可能比自定义解决方案更多的工作 - 查看视图暴露的过滤器,看看它是否适合。

如果没有,这里有一些提示可以帮助您开始使用自定义解决方案:

  • 对于搜索表单,块是正确的方法。查看hook_block() 了解如何创建一个(您至少需要为此实现“列表”和“视图”操作)
  • 如您所说,放置将通过构建/块发生
  • 在操作“查看”时,您将构建您的表单。看看 forms API Quickstartreference 在 Drupal 中的表单处理(不要手动构建自己的表单 - Drupal 表单 API 只需要一点点习惯,将来会为您节省大量时间)
  • 对于结果页面,您可以为所需的路径注册自己的页面回调函数,请参阅hook_menu()
    • 警告:您建议的路径 'search/...' 会与 Drupal 内置的搜索路径冲突,因此您可以考虑选择一个轻微的变化(例如 'search/people/...' 或 'peoplesearch /'等)
  • 要在 Drupal 中创建链接,请使用 l() 函数
  • 对于分页,您可能可以使用theme_pager,但这取决于您的实际搜索查询结果有多直接,因为它需要一组查询字符串参数来构建查询李>

【讨论】:

  • +1 花时间建立功能链接并彻底。
【解决方案2】:

您可以按照您描述的方式进行操作。您需要使用 hook_menu 来构建 url,使用 hook_block 来制作搜索表单块,然后使用 l() 函数来制作链接。但是,在您自己的自定义模块中完成所有这些操作将需要大量时间。为搜索等进行查询。相反,我建议您做的是将视图模块用于所有这些。有了它,你可以很容易地创建一个搜索表单,但是使用暴露的过滤器,你可以为它创建一个页面和一个块,进行分页和所有这些只需点击几下。因此,即使您是一个优秀的 php 开发人员,在这种情况下,最好的办法是简单地使用 Drupal 以视图模块的形式提供的内容并使用 AI 进行设置,而不是编写一堆代码。如果您确实想制作自己的模块,请查看 api.drupal.org 上的这些函数,您可以在其中找到 drupal 核心的文档。

【讨论】:

  • 然后使用 l() 函数制作链接 l() 是什么?
  • @David: l() 是一个 Drupal 内置函数,用于创建链接 - 请参阅 api.drupal.org/api/function/l/6
猜你喜欢
  • 2016-03-29
  • 1970-01-01
  • 2014-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多