帝国cms新闻模型 点击图片进入下一页完美修复

帝国cms自6.5版本后,自带点击图片进入下一页功能,只要在发布文章的时候选中“点击图片进入下一页”即可实现。

但是此功能并不完善,包括:

1、当处在文章最后一个分页的时候,点击进入的是文章列表,而不是下一篇文章。

2、部分用户希望在图片的左右两侧有上一页下一页的按钮,点击按钮也可以切换。


修改方法如下(请做好备份):

第一步:点击图片进入下一页,如果处在最后一页,则进入上一篇文章,如果没有上一篇文章,则进入文章列表页。

PS:这里说的是上一篇而非下一篇,因为当我们添加文章的时候,上一篇是存在的,而下一篇并不存在,所以我们选择最后一页进入上一篇文章,这样比较合理

1、修改新闻模型的newstext字段,默认选中 点击图片进入下一页 


2、修改functions.php中的UpdateImgNexturl函数

if($tbdataf)
	{
		$r=$empire->fetch1("select id,classid,titleurl,groupid,newspath,filename,stb from ".$infotbname." where id='$id'");
		$infodatatbname=$checked?$dbtbpre.'ecms_'.$tbname.'_data_'.$r[stb]:$dbtbpre.'ecms_'.$tbname.'_check_data';
		$finfor=$empire->fetch1("select ".$pf." from ".$infodatatbname." where id='$id'");
		$r[$pf]=$finfor[$pf];
	}

修改为:

if($tbdataf)
	{
		$next_r=$empire->fetch1("select isurl,titleurl,classid,id,title from ".$infotbname." where id<'$id' and classid='$classid' order by id desc limit 1");
		$r=$empire->fetch1("select id,classid,titleurl,groupid,newspath,filename,stb from ".$infotbname." where id='$id'");
		$infodatatbname=$checked?$dbtbpre.'ecms_'.$tbname.'_data_'.$r[stb]:$dbtbpre.'ecms_'.$tbname.'_check_data';
		$finfor=$empire->fetch1("select ".$pf." from ".$infodatatbname." where id='$id'");
		$r[$pf]=$finfor[$pf];
	}


$newstext=RepNewstextImgLink($r[$pf],$r);

修改为:

$newstext=RepNewstextImgLink($r[$pf],$r,$next_r[id]);


3、修改RepNewstextImgLink函数

function RepNewstextImgLink($newstext,$add)

修改为:

function RepNewstextImgLink($newstext,$add,$next_r)


$lastpageurl=$public_r['newsurl'].'e/public/ClassUrl/?classid='.$add['classid'];	//最后一页链接地址

修改为:

if(empty($next_r)){
		$lastpageurl=$public_r['newsurl'].'e/public/ClassUrl/?classid='.$add['classid'];	//最后一页链接地址
	}else{
		$lastpageurl=$public_r['newsurl'].'e/action/ShowInfo.php?classid='.$add['classid'].'&id='.$next_r;	//最后一页链接地址
	}


4、修改function GetHtml函数

最后一行增加:

$newstemptext=UpdateImgNexturl($classid,$id,$checked=1);



以上部分修改完后,内容图片自动增加下一页链接,当最后一页时,跳转到上一篇,当没有上一篇时,跳转到列表页。



第二步:增加左右按钮连接,点击分别进入上一页下一页,如果处在最后一页,点击进入上一篇,如果没有上一篇,进入文章列表。

1、function.php中 function GetHtml 函数 增加

$string=str_replace('[!--this.nowpage--]',$j,$string);
   $string=str_replace('[!--this.totalpage--]',$thispagenum,$string);	
   $string=str_replace('[!--this.dolink--]',$dolink,$string);	
   $string=str_replace('[!--this.filename--]',$add[filename],$string);	
   $string=str_replace('[!--this.filetype--]',$filetype,$string);

2、function GetHtmlRepVar中,增加

$nexturl='<?php
	$next_r=$empire->fetch1("select isurl,titleurl,classid,id,title from {$dbtbpre}ecms_".$class_r[$ecms_gr[classid]][tbname]." where id<$ecms_gr[id] and classid=\'$ecms_gr[classid]\' order by id desc limit 1");
	if(empty($next_r[id]))
	{$nexturl=$grclassurl;}
	else
	{
		$nexturl=sys_ReturnBqTitleLink($next_r);
	}
	echo $nexturl;
	?>';
	$newstempstr=str_replace('[!--next.url--]',$nexturl,$newstempstr);

这一句为输出当前文章的上一篇文章,如果不存在上一篇,则输出列表页地址


3、内容页模板中,添加js调用

<script language="javascript" type="text/javascript">
   var classurl ='[!--next.url--]';   //输出上一篇链接地址
   var nowpage=[!--this.nowpage--];   //输出当前分页数
   var totalpage=[!--this.totalpage--];  //输出总的分页数
   var dolink='[!--this.dolink--]';   //输出文章目录
   var filename=[!--this.filename--];  //输出文件名
   var filetype='[!--this.filetype--]';  //输出文件名
</script>


4、增加img_box.js文件

function PicPlayPre(){
	prevpage = nowpage - 1;
	if(prevpage < 2){
		location.href = dolink + filename + filetype;
	}else{
		location.href = dolink + filename + '_' + prevpage + filetype;
	}
}

function PicPlayNext(){
	var nextpage = nowpage + 1;
	if(nowpage == totalpage) { 
		location.href = classurl;
	}else {
		  location.href = dolink + filename + '_' + nextpage + filetype;
		}
}


5、内容页模板中,上一页按钮及下一页按钮

<a href="javascript:PicPlayPre();" class="prev direction_left"></a>
<a href="javascript:PicPlayNext();" class="next direction_right"></a>



补充:左右按钮正好在图片垂直中间位置的办法

<div class="article_pic">
<div class="bd">这里放newstext标签</div>
<div class="direction_box news_direction_box">
                  <a href="javascript:PicPlayPre();" class="prev direction_left"></a>
                  <a href="javascript:PicPlayNext();" class="next direction_right"></a>
                  <div class="clear"></div>
                </div>
</div>

CSS文件

.article_pic {
    position: relative;
}
.news_direction_box{ width:979px !important; top:45%;}
.direction_box{ position:absolute; z-index:10; top: 48%; width:601px;}
.direction_box a{ display:block; width:37px; height:62px;background-image:url(../images/arrow.png); background-repeat: no-repeat;}
.direction_left{ float:left; background-position:0 0;}
.direction_right{ float:right; background-position:-37px 0;}