书籍列表页面

    首先我们看看分页模块的编写。

    在目录下创建一个lib目录,并创建一个Paginator.php

    这个模块只负责一件事情:根据记录总数和每页的记录数算出总页面,并根据当前页数返回一个(合理的)包含前后各2个页数及当前页数(共5个)的数组,使得调用端可以显示去往不同页面的链接。这个类的编写并不复杂,这里不再做进一步的解释。

    书籍列表的路由定义比较长,这是因为在设计这个路由(和对应的动作)时,我们考虑要将该路由(和对应的动作)复用。它不仅只是简单地按照登录顺序的逆序分页显示若干书籍,而且还能按照搜索方式的不同只显示符合搜索条件的若干书籍1

    这个路由定义的路径可以解读为:按照某个类型()下的关键字(key)搜索并返回搜索结果中的某一页(page)。

    由于我们采用API的方式获得远程数据,所以控制器中的动作编写相对简单:

    简单说来,我们通过API调用获得适当的数据(符合搜索条件的书籍和书籍总数),从SF全局配置文件中获得这个参数并调用上文提到的Paginator类构造一个分页列表。最后将相应的参数(共6个)传递到模板中显示。

    注意: books_per_page参数应该在中得到定义。方法是在该文件中加入一行:

    虽然说从Paginator获得的是一个页面导航列表,但是我们选择用“前后页”(加上首页、末页)的方式显示导航按钮。也因此,我们分离了分页本身、导航、显示这三部分。这样做能提供最大程度的灵活性。

    至此页面效果如下:

    当然,这个页面还有一些功能没有完成。比如搜索以及直接跳转页面。搜索会在后续章节讲述。直接页面跳转比较简单,请自行完成。