• 专注于网站建设,网络推广,关键词优化,SEO优化,专业的网站建设开发团队!
首页 > IT技术 > PHP > 内容

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

2015-06-11 22:16:27   来源:叶景网络

我们在网上阅读文章时,当阅读完一篇感兴趣的文章时,还不够尽兴,还想阅读一些相关的文章,在文章的末尾往下看,就会发现相关阅读列出和本次阅读的文章相关的篇章,我们点击又可以阅读了,节省了搜索时间。在注重用户体验的设计方面来说,相关阅读功能肯定是少不了的。
     实现相关阅读的方法很多,这里是根据相同标签的方法去列出相关的文章,其原理是文章的标签如果相同,那么它们的标签的ID也会相同,因此列出一篇文章的相关文章其实就是列出和其标签相同的文章。
进入正题吧,准备两张关联的表tp_tagged和tp_news,具体数据如下:
-- ---------------------------- 
-- Table structure for `tp_tagged` 
-- ---------------------------- 
DROP TABLE IF EXISTS `tp_tagged`; 
CREATE TABLE `wb_tagged` ( 
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
  `recordId` int(11) unsigned NOT NULL, 
  `tagId` int(11) NOT NULL, 
  `module` varchar(25) NOT NULL, 
  PRIMARY KEY (`id`), 
  KEY `module` (`module`) 
) ENGINE=MyISAM  CHARSET=utf8; 
   
-- ---------------------------- 
-- Table structure for `tp_news` 
-- ---------------------------- 
DROP TABLE IF EXISTS `tp_news`; 
CREATE TABLE `wb_news` ( 
  `id` int(8) unsigned NOT NULL AUTO_INCREMENT, 
  `title` varchar(80) NOT NULL DEFAULT '', 
  `status` tinyint(1) NOT NULL DEFAULT '0', 
  PRIMARY KEY (`id`) 
) ENGINE=MyISAM  CHARSET=utf8;
注:wb_news表的ID关联wb_tagged表的recordId
接下来定义上面两张表的视图模型RelaNewsView,代码如下:
<?php 
class RelaNewsViewModel extends ViewModel { 
    public $viewFields = array( 
        'News'=>array('id','title','status'),//根据需求筛选news表的字段 
        'Tagged'=>array('tagId','recordId','_on'=>'Tagged.recordId=News.id'), 
      ); 

?>
上面模型代码中,news和tagged的关联点是“_on'=>'Tagged.recordId=News.id'”,这是一个查询条件,在模型定义好后,在后面的查询语句中就不用再重复写这个条件了。
视图模型定义好,下面是相关阅读的查询语句方法,当然你可以使用sql语句来查询,这里我喜欢用ThinkPHP的视图模型来实现。
/* 
    *相关阅读 
    *$ModelName:模型名称 
    *$rid:文章ID 
    *$ViewName 视图模型名称 
    */
    public function relaread($ModelName, $rid, $ViewName) { 
   
         $tagId=M('Tagged')->field('tagId')->where(array ( 
            'module' => $ModelName, 
            'recordId' => trim($rid
        )))->getField('tagId');  //获取标签tagId  
        if ($relalist !== false) { 
            $map['tagId'] = $tagId; 
            $map['status'] = 1; 
            $map['id'] = array (//过滤本篇文章在相关文章列表列出 
                'neq', 
                $rid
            ); 
            $map['recordId'] = array ( 
                'neq', 
                $rid
            ); 
            $relalist = D($ViewName)->where($map)->order('id desc')->select();//相关阅读查询语句 
   
            return $relalist;//返回相关文章列表 
   
        } 
    } 
//最后,我们调用使分配到模板read.html 
    public function read($ModelName) {             
        if (empty ($_GET['id'])) $this->error404();  
        $relalist=$this->relaread('News',$_GET['id'],'RelaNewsView')//在这里调用上面的relaread函数 
               $this->assign('relalist',$relalist );  

         }

 }

叶景网络,网络推广,网站建设
特别推荐RECOMMEND
搜索引擎网站关键词seo优化的意义
视频推广怎么做
网站seo优化怎么做关键词排上首页?
SEO介绍什么叫搜索引擎网站关键词优化
seo优化怎样做提升关键词排名
热点图文Hot
PHP通过soap调用.net接口asmx文件 PHP通过soap调用.ne
PHP开发环境配置 PHP开发环境配置
wamp集成环境的虚拟域名配置方法 wamp集成环境的虚拟
wamp独立安装配置 wamp独立安装配置
关注排行RANKING
1

PHP通过soap调用.net接口asmx文件

PHP通过soap调用.net接口asmx文件 叶景网络(www cngxit com),致力于互联网品牌建设与网络营销,专业领域包括网...

2

PHP开发环境配置

PHP开发环境配置 下载PHP安装程序,并解压缩。(下载页面为http: www php net downloads php,下...

3

wamp集成环境的虚拟域名配置方法

wamp集成环境的虚拟域名配置方法 最近,发现身边很多人用wamp集成环境,这个虽然比较快捷,一步到位,但是只能访...

4

wamp独立安装配置

wamp独立安装配置 apache 中的 httpd conf LoadModule php5_module "D: lamp php5 php5apache2_2 dll " 加载模块并开启

5

php 获取今天明天昨天时间戳

php 获取今天明天昨天时间戳 叶景网络(www cngxit com),致力于互联网品牌建设与网络营销,专业领域包括网...

6

PHP获取服务器信息 MySql版本和浏览器信息

PHP获取服务器信息 MySql版本和浏览器信息 1、$_SESSION[ PHP_SELF ] -- 获取当前正在执行脚本的文件名 2...

7

smarty 截取字符串函数 truncate的用法

smarty 截取字符串函数 truncate的用法 smarty truncate 截取字符串,从字符串开始处截取某长度的字符,默认的长度为8...

8

php编程常用函数方法等

php编程常用函数方法等 叶景网络(www cngxit com),致力于互联网品牌建设与网络营销,专业领域包括网站...

9

如何让ThinkPHP的模板引擎达到最佳效率

如何让ThinkPHP的模板引擎达到最佳效率 默认情况下ThinkPHP框架系统默认使用的模板引擎是内置模板引擎。内置模板引擎支持模板文...