重构进入第二天——熟悉我风格的人都知道,这不是真正的第二天。
今天主要进行书籍详细信息页面的创建,以及对书籍封面的处理。
页面的创建继续使用Bootstrap来完成,用到的元素包括Hero Unit,Table等。我这里不进行详细的展开。
相较之前的页面,我准备在新的页面中加入书籍的封面。这里的一个问题是:不是所有我收藏的书我都扫描了封面——以后也许会的,但是目前的话,我觉得用一个类似缺省封面的设计是比较好的。
缺省封面当然不能将每本书的信息都录入,因此需要动态生成。同样的,即使有书籍本身的封面,我也要生成一些版权信息。所幸的事,这段代码大部分已经在我之前的编程中实现,因此本次只是进行修改并配合Symfony 2的框架。
首先创建一个路由,这个路由只有一个功能,就是将形如:/bookseller/cover/id_title_author.png这样的请求映射给恰当的控制器,并由控制器来完成缺省封面的动态生成,然后返回一个png图形的句柄,再由浏览器进行渲染:
cover:
pattern: books/cover/{id}_{title}_{author}.png
defaults: {_controller: trrsywxBundle:Default:cover}
然后修改模板文件,引用到<img ...="..." />的地方都要改写:
<img src="{{path("cover", {'id':book.id, 'author':book.author, 'title':book.title}) }}" alt="{{book.title}}的封面" title="{{book.title}}的封面"/>
最后,当然是控制器的编写,主要是用到PHP内置的GD库的函数,我这里不展开。
我将default.jpg和某本书对应的真正封面(如果有)放在一个目录里,如果找到和书籍对应的封面(根据文件名判断),那么显示这个封面并加上版权信息;如果没有对应的封面,那么显示缺省封面,加上书名、作者以及版权信息等。
以下是效果:
这样做,当然有副作用:每个图片都需要动态调入,会有额外的开销。
【本文收录于[go4pro.org]】
Leave a Reply