我正在尝试创建一个表单,在每行上提供一个复选框元素。问题是,我有2000行,这需要一些时间来加载,而且在整个列表中导航也不容易。
有没有办法在Drupal形式中创建某种分页?

发布于 2013-09-17 04:16:27
据我所知,在一个更大的表单上下文中没有内置的字段值分页。相反,您可能希望考虑使用Javascript解决方案,加载所有2000个表单值,但使用JS和CSS隐藏除第一个页面以外的所有页面。然后创建Javascript前进/后退和页面链接,动态隐藏复选框中的第一个“页面”,并加载有问题的页面。
我之所以推荐这样做,而不是AJAX请求只加载前20条记录,然后通过分页程序动态加载更多记录,是因为您必须单独跟踪和存储已检查的值(因为AJAX实际上会丢弃并重新加载接下来的20个复选框值)。相比之下,如果它没有减慢页面速度,加载所有2000个复选框,比如100个单独的部分,然后使用自定义的JS分页程序来显示/隐藏页面,那么用户可以在分页时选中和取消选中,所有的值都会被记住。( HTML表单的一个经常被忽视的特性是,即使通过CSS隐藏,它们也会保留字段值,当您意识到这一点时,这会非常有帮助)。
我认为代码片段在这里不会太有用,因为这是一个相当开放的问题,但基本过程如下:
hook_form_alter()更改特定的复选框组字段。具体地说,您可以在运行数据库查询以检索结果并确定页数后,使用标记来添加分页器控件。hook_form_alter()的一部分,您可以一次循环一页并生成全部100页(或任意数量)的复选框选项,在站点定制主题中checkbox JS或jQuery函数周围的<div>标记中将除第一页以外的所有页设置为display:none。或者将代码放到一个includes/文件夹中,然后通过hook_form_alter动态加载它(这并不优雅--我建议总是有一个自定义主题或子主题可用)。此函数将侦听按下的链接和当前页面,并隐藏/显示适当的CSS块。如果您想获得更好的体验,您还可以创建一个支持JS的页码字段,您可以在其中键入页码并按Enter键,或者创建一个返回单个结果的搜索功能(现在您必须能够显示/隐藏所有单独的记录),以及针对单个页面的check all/uncheck all功能。玩得开心!
https://stackoverflow.com/questions/18780376
复制相似问题