分享

ThinkPHP文章相关阅读功能的实现方法

 覡先生藏书馆 2015-10-03

我们在网上阅读文章时,当阅读完一篇感兴趣的文章时,还不够尽兴,还想阅读一些相关的文章,在文章的末尾往下看,就会发现相关阅读列出和本次阅读的文章相关的篇章,我们点击又可以阅读了,节省了搜索时间。在注重用户体验的设计方面来说,相关阅读功能肯定是少不了的。


实现相关阅读的方法很多,这里是根据相同标签的方法去列出相关的文章,其原理是文章的标签如果相同,那么它们的标签的ID也会相同,因此列出一篇文章的相关文章其实就是列出和其标签相同的文章。


好了,进入正题吧。准备两张关联的表wb_tagged和wb_news,具体数据如下:

01-- ---------------------------- 
02-- Table structure for `wb_tagged` 
03-- ---------------------------- 
04DROP TABLE IF EXISTS `wb_tagged`; 
05CREATE TABLE `wb_tagged` ( 
06  `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
07  `recordId` int(11) unsigned NOT NULL, 
08  `tagId` int(11) NOT NULL, 
09  `module` varchar(25) NOT NULL, 
10  PRIMARY KEY (`id`), 
11  KEY `module` (`module`) 
12) ENGINE=MyISAM  CHARSET=utf8; 
13    
14-- ---------------------------- 
15-- Table structure for `wb_news` 
16-- ---------------------------- 
17DROP TABLE IF EXISTS `wb_news`; 
18CREATE TABLE `wb_news` ( 
19  `id` int(8) unsigned NOT NULL AUTO_INCREMENT, 
20  `title` varchar(80) NOT NULL DEFAULT ''
21  `status` tinyint(1) NOT NULL DEFAULT '0'
22  PRIMARY KEY (`id`) 
23) ENGINE=MyISAM  CHARSET=utf8;

注:wb_news表的ID关联wb_tagged表的recordId

接下来定义上面两张表的视图模型RelaNewsView,代码如下:

01<?php 
02class RelaNewsViewModel extends ViewModel { 
03    
04    public $viewFields array
05    
06        'News'=>array('id','title','status'),//根据需求筛选news表的字段 
07    
08        'Tagged'=>array('tagId','recordId','_on'=>'Tagged.recordId=News.id'), 
09      ); 
10
11?>

上面模型代码中,news和tagged的关联点是“_on'=>'Tagged.recordId=News.id'”,这是一个查询条件,在模型定义好后,在后面的查询语句中就不用再重复写这个条件了。
视图模型定义好,下面是相关阅读的查询语句方法,当然你可以使用sql语句来查询,这里我喜欢用ThinkPHP的视图模型来实现。

01/* 
02    *相关阅读 
03    *$ModelName:模型名称 
04    *$rid:文章ID 
05    *$ViewName 视图模型名称 
06    */
07    public function relaread($ModelName$rid$ViewName) { 
08    
09         $tagId=M('Tagged')->field('tagId')->where(array 
10            'module' => $ModelName
11            'recordId' => trim($rid
12        )))->getField('tagId');  //获取标签tagId  
13            
14        if ($relalist !== false) { 
15    
16            $map['tagId'] = $tagId
17            $map['status'] = 1; 
18            $map['id'] = array (//过滤本篇文章在相关文章列表列出 
19                'neq'
20                $rid
21            ); 
22            $map['recordId'] = array 
23                'neq'
24                $rid
25            ); 
26            $relalist = D($ViewName)->where($map)->order('id desc')->select();//相关阅读查询语句 
27    
28            return $relalist;//返回相关文章列表 
29    
30        
31    
32//最后,我们调用使分配到模板read.html 
33    public function read($ModelName) {             
34        if (empty ($_GET['id'])) $this->error404(); 
35            
36        $relalist=$this->relaread('News',$_GET['id'],'RelaNewsView')//在这里调用上面的relaread函数 
37            
38               $this->assign('relalist',$relalist );  
39               }



        


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多