创建分页的Drupal表单。 (Drupal 6)

时间:2013-09-13 07:12:52

标签: php drupal

我正在尝试创建一个在每一行上提供复选框元素的表单。问题是我有2000行需要一些时间来加载,并且在整个列表中导航并不容易。

有没有办法以Drupal形式创建某种分页?

enter image description here

1 个答案:

答案 0 :(得分:0)

在我所知道的更大形式的上下文中,没有内置的字段值分页。相反,您可能想要考虑一个Javascript解决方案,您可以在其中加载所有2000个表单值,但您使用JS和CSS来隐藏除第一页之外的所有内容。然后创建Javascript前进/后退和页面链接,动态隐藏复选框的第一个“页面”并加载相关页面。

我之所以推荐这个,而不是只加载前20条记录然后通过寻呼机动态加载更多的AJAX请求,你必须分别跟踪和存储已经检查过的值(因为AJAX)将丢弃并重新加载接下来的20个复选框值)。相比之下,如果它没有减慢页面速度以加载所有2000个复选框,比如幕后100个单独的部分,然后使用您的自定义JS寻呼机来显示/隐藏页面,您的用户可以在分页时检查和取消选中并且会记住所有的价值观。 (这是HTML表单经常被忽视的一个特性,即使通过CSS隐藏它们也会保留它们的字段值,当你意识到它时它们会非常有用。)

我认为代码片段在这里不太有用,因为这是一个相当开放的问题,但基本过程是:

  1. 使用hook_form_alter()更改特定的复选框组字段。具体来说,您可以在运行数据库查询后使用标记添加分页器控件以检索结果并确定页数。
  2. 同样,作为使用hook_form_alter()的一部分,您可以一次循环一个页面并生成所有100个(或任何数量)的复选框选项页面,将除第一页以外的所有页面设置为display:none复选框选项周围的<div>个标签。
  3. 在您网站的自定义主题中创建JS或jQuery函数,或将代码放入includes/文件夹并通过hook_form_alter动态加载(不优雅 - 我建议始终使用自定义主题或子主题可用)。此功能将侦听链接按下和当前页面并隐藏/显示正确的CSS块。
  4. 如果您想获得想象力,您还可以创建一个支持JS的页码字段,您可以在其中键入页码并按Enter键,或者可以返回单个结果的搜索功能(从现在开始您会更复杂)必须能够显示/隐藏所有单个记录),并检查所有/取消选中各个页面的所有功能。玩得开心!