当前位置: 首页 > 文章教程  > 计算机与互联网 > 网络编程

5.14书签共享系统——个人收藏夹的管理

9/17/2020 9:43:31 PM 人评论

5.14书签共享系统——个人收藏夹的管理

5.14 书签共享系统——个人收藏夹的管理

本节介绍书签共享系统最主要的页面——个人收藏夹。个人收藏夹中除了罗列出用户所有收藏的书签,还提供了各种维护自己书签的功能。比如用户可以修改自己的评论,同时在自己的收藏夹下,用户可以建立各种子文件夹来管理自己的书签。

另外,个人收藏夹中书签列表有两种排序方式:一种是按照书签的人气顺序,另一种是按照收藏的时间顺序排列,默认的是按第一种人气顺序排列的。

alt

个人书签收藏夹

要点

如图所示网页的右边是个人书签一览,左边中部是自建文件夹,其中自建文件夹的根目录的名称是用户ID。

一条书签至少包含三行以上的内容:

第一行主要是标题部分,标题前有网站的Logo,最后是网站的网址。

第二行是书签的补充信息,依次为所属的个人文件夹,内容分类/媒体类别,包含的标签(一一罗列),人气数(被收藏的用户数),收藏时间。

第三行是用户的书签评论以及追加时间,如果是此书签的所有者,当鼠标放在此行上时,会在行的该行的最后显示修改,删除按钮,可以对修改评论和个人目录,还可以删除此书签。

第四行以后是书签的内容简介。

上述的书签信息从数据库中取出后,放在联想数组中,再在Smarty模板中将联想数组解析后,显示在页面上。联想数组的数据就像如下的例子一样。

alt

在理解下面的代码时,结合上述联想数组的结构,一定会收到事半功倍的效果。请注意将数组的数据与实际的代码一一对应起来研读。

目录结构

alt

代码

alt

定义个人书签收藏夹的动作(action)方法。

alt

调用getBookmarks方法取出用户所有的书签信息。

alt

取得并设置页面左边的标签云。关于标签云方法getTagcloud,请参照5.15节。

alt

取得并设置朋友一览。

alt

取得并设置个人目录数组。个人目录的显示需要用到JavaScript prototype技术(js/TreeFolderNew.js),而在目录的追加、修改、删除操作中涉及Ajax技术。关于Ajax技术,在补充资料有些简单的介绍,而关于JavaScript脚本的解说超出了本书的范围,只能割爱了。有兴趣的朋友可参照相关资料以及本书的官方网站来理解它。

alt

设置个人收藏夹的RSS网址,关于RSS feed的相关代码在5.20节中有详细介绍。

alt

为了在页面保存个人目录ID及目录名,使用getOrigiFolder方法将个人目录信息取出,并设定到模板变量中。

alt

定义目录维护(追加,修改,删除)动作的方法。

alt

调用mngFolders方法进行个人目录相关的更新,并将新的目录结构返回。

alt

定义个人评论更新动作方法。

alt

调用commentChange方法进行评论的更新。

alt

定义个人书签收藏夹页面的换页方法。因为个人书签收藏夹页面是分页显示,且能显示具体自定义目录中的所有信息,所以方法的第三、第四参数分别为页码与目录ID。

alt

取得设置的分页方式。

个人书签收藏夹提供两种分页方式:一种是按照时间,人气顺序取出信息后,按照每页显示固定的条目数分页(即$sess->bmflg=1时);另一种按照日期分页,同一天追加的书签放在同一页中。

alt

目录ID非空时,在一览的开始位置显示目录名。

alt

当为第一种分页方式时,调用getPager方法做成分页链接。

alt

当为第二种分页方式时,调用getCdats方法取出所有追加过书签的日期。

alt

合成分页的链接,形式为“前一日2010-3-10后一日”。

alt

将分页链接设置到模板变量中。

alt

当folderid为0时,意味着条件中没有目录ID,因此采用“0=:folderid”忽略目录ID的条件。

alt

50行到62行取得总书签数量。

alt

当浏览个人收藏夹不是个人收藏夹的拥有者时,非公开的书签不显示。

alt

组合分页的网址。

alt

bmcount为每页中最多能显示的书签数目。用户可以在系统设置中进行自由修改。默认为20条。

alt

调用Pager::factory生成分页对象。

alt

方法getLinks会根据分页对象的数据生成分页链接数组。

alt

返回分页链接字符串,$navi['all']中存储了所有的分页链接。

alt

定义个人书签检索方法。

alt

取出页码。当然,默认从第一页开始显示。

alt

默认显示20条书签。

alt

取出Query信息中目录ID,如果没有时,为方便编程将其设为0。

alt

取出Query信息中的日期信息。

alt

取得个人书签收藏夹的分页方式。分页方式不同检索条件是一样的。默认按照固定条目分页。

alt

组合与目录相关的条件。

alt

组合与日期相关的条件。

alt

当采用固定条目的分页方式时,110行组合检索SQL。使用LIMIT命令只检索出相关页码的书签信息。

alt

当采取按日期的分页方式,默认显示最近一天的书签信息,即包含所有日期的数组$cdats的第一个元素。

alt

组合按日期分页的检索SQL。其中DATE_FORMAT用于将数据库里的日期数据(datetime类型)转换为指定的格式,quote方法用于自动追加单引号。

alt

对检索出的数据进行格式化。142行到148行进行从书签URL中抽出其所属网站的网址的工作(保存在$result[$i]['mainurl']中)。

alt

变量ownerflg中保存当前的书签是否为登录用户所有的标志。

alt

变量editflg中保存评论是否可编辑的标志。除了超级用户及评论的所有者外,是不能编辑(值为0)的。

alt

设置分页链接。

alt

调用getBookmarkDetails方法整理输出数组(参见要点),主要是补充标签(tag)、人气数等数据。

alt

定义取出所有个人目录信息的方法。

alt

定义取得所有追加日期的方法,返回日期字符数组。

alt

定义取得标签(tag)、人气度、关键字信息的方法。

alt

定义个人自定义目录的更新方法,包括追加、修改、删除等处理。

alt

追加新的目录。追加的目录必须指定其父目录。

alt

修改目录名。

alt

删除目录。根目录是不能删除的(根目录不提供删除按钮)。

alt

定义更新评论,所属目录的方法。

alt

模式为更新时(即单击了“更新”按钮),进行评论的更新处理。

alt

当模式为删除时(单击了“删除”按钮),则进行评论的删除动作。如果是删除最后一条评论(count=1),那么必须将对应的书签基本信息(表bm_master)也删除掉。

alt

以下的getFolders,setNode,createTitle,createLink方法构筑折叠型目录结构。定义折叠型目录结构的主方法。

alt

使用PEAR::HTML_TreeMenu程序库进行构筑折叠型目录结构(或称为折叠菜单)。

alt

使用HTML_TreeNode来生成具体的折叠型菜单的节点。这里只生成根目录这个节点。

alt

在'cssClass'元素中指定显示用的CSS类。

alt

createTitle方法生成节点的字符串,createLink方法生成节点的链接字符串。

alt

调用setNode方法生成根目录以下的其他节点。

alt

如果存在子节点,则给加上展开图片与文件夹图片。

alt

将做成的节点追加到母树中。

alt

将树对象传到HTML_TreeMenu_DHTML类的构造函数中用于生成折叠型目录的HTML代码。

alt

指定图片的保存目录。

alt

调用toHTML方法最终生成折叠型目录(菜单)的HTML代码。

alt

setNode是一个自调用方法,从根目录开始将所有以下的目录信息都取出来。

具体过程与上述的getFolders方法中的相关过程类似,此处省略解说。

alt

定义节点字符串生成方法。

alt

检索此目录下拥有的书签总数。

alt

定义节点链接生成方法。

alt

标签检索功能时也用到此界面。

alt

显示分类链接。

alt

当鼠标放在评论上时,评论的最后会显示“更新”与“删除”按钮。单击“更新”按钮会显示评论更新的form,而form的显示采用了Ajax技术。

alt

根据标签显示与否的设置,控制此处标签一览的显示。

alt

在could/index.tpl中也用到相同的界面,也采用相同的include命令(参见5.15节)。

alt

补充

PEAR::Pager中可以使用的参数

在PEAR::Pager程序库中,为了管理分页,可以指定各种各样的参数。表5-29将一些经常使用的参数汇总在一起了。

表5-29 PEAR::Pager程序库常用参数

alt

alt

Ajax技术

Ajax不是一个技术,它实际上是几种技术,每种技术都有其独特这处,合在一起就成了一个功能强大的新技术。Ajax包括:

● XHTML和CSS。

● 使用文档对象模型(Document Object Model)做动态显示和交互。

● 使用XML和XSLT做数据交互和操作。

● 使用XMLHttpRequest进行异步数据接收。

● 使用JavaScript将它们绑定在一起。

传统的Web应用模型工作起来就像这样:大部分界面上的用户动作触发一个链接到Web服务器的HTTP请求。服务器完成一些处理——接收数据,处理计算,再访问其他的数据库系统,最后返回一个HTML页面到客户端。这是一个老套的模式,自采用超文本作为Web使用以来,一直都这样用的。

这种旧的途径让我们认识到了许多技术,但它不会产生很好的用户体验。当服务器正在处理自己的事情的时候,用户在做什么?没错,等待。每一个动作,用户都要等待。

很明显,如果我们按桌面程序的思维设计Web应用,我们不愿意让用户总是等待。当界面加载后,为什么还要让用户每次再花一半的时间从服务取数据呢?实际上,为什么老是让用户看到程序去服务器取数据呢?

Ajax如何不同凡响,通过在用户和服务器之间引入一个Ajax引擎,可以消除Web的“开始-停止-开始-停止”这样的交互过程。它就像增加了一层机制到程序中,使它响应更灵敏,而它的确做到了这一点。

不像加载一个页面一样,在会话的开始,浏览器加载了一个Ajax引擎——采用JavaScript编写并且通常在一个隐藏frame中。这个引擎负责绘制用户界面以及与服务器端通信。Ajax引擎允许用异步通信的方式实现用户与程序的交互——不用等待服务器的响应。所以用户再不用打开一个空白窗口,看到等待光标不断的转动,等待服务器完成后再响应了。


知识专栏:PHP的开发支援环境(三)——Microsoft Expression Web 2

Expression Web(http://www.microsoft.com/china/products/expression/)是微软公司提供的面向设计者的开发工具。微软的产品总归以.NET Framework为背景的开发环境,在新发布的2.0版本中,已经能对应PHP的开发了。

Expression Web 2作为最初的PHP对应版,尽管还有很多功能不全的地方,已经具有了从智能感知,到WYSIWYG编辑器,预览用的开发服务器,与用文本编辑器进行代码编辑比较起来,能够大大提高开发效率。

如果专门为了PHP开发而购买Expression Web 2,可能会因为价格与效率比不太理想而烦恼,如果因为在进行ASP.NET开发后,手头已经有了Expression Web,不妨可以试试它进行PHP的开发。另外,可以从微软网站上下载英语的评价版来先试试。


相关教程

共有条评论 网友评论

验证码: 看不清楚?