0

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

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

在此处输入图像描述

4

1 回答 1

0

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

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

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

  1. 用于hook_form_alter()更改特定的复选框组字段。具体来说,在运行数据库查询以检索结果并确定页数后,您将使用标记添加分页器控件。
  2. 同样作为 using 的一部分hook_form_alter(),您将一次循环一个页面并生成所有 100 个(或任何数量)页面的复选框选项,将除第一页之外的所有页面设置为复选框选项周围的标签display:none<div>
  3. 在您网站的自定义主题中创建 JS 或 jQuery 函数,或者将代码放入includes/文件夹并动态加载它hook_form_alter(不优雅 - 我建议始终使用自定义主题或子主题)。此函数将监听链接按下和当前页面并隐藏/显示正确的 CSS 块。

如果您想变得花哨,您还可以创建一个启用 JS 的页码字段,您可以在其中输入页码并按 Enter,或者返回单个结果的搜索功能(更复杂,因为现在您必须能够显示/隐藏所有单个记录),以及单个页面的全部选中/取消选中所有功能。玩得开心!

于 2013-09-16T20:16:27.060 回答