Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[分享] 给聚合内容的栏目添加上一篇下一篇标题 代码

[复制链接]
孵蛋 发表于 2010-9-22 11:23:44 | 显示全部楼层 |阅读模式
本帖最后由 孵蛋 于 2010-9-24 12:23 编辑

我们在阅读内容的时候,看完了想看看上一篇是啥?下一篇是啥?
ss的官方只有“下一篇”,没有标题。乍办?
https://discuz.dismall.com/thread-1437855-1-1.html  里面已经说得很好了(ss7 2010年适用),能够查出该文章同个小分类的上一篇、下一篇

  1. $query = $_SGLOBAL['db']->query('SELECT i.itemid,i.subject FROM '.tname('spaceitems').' i WHERE i.itemid>\''.$itemid.'\' AND catid = \''.$news['catid'].'\' ORDER BY itemid LIMIT 0,1');
  2. ......
复制代码

查询结果,比如查“西瓜”,阅读详细内容的时候上一篇下一篇还是不是关于西瓜的呢?不是了。
答:  查询结果摆在那里,上一篇下一篇很明显了,嘿嘿。所以无需要显示下一篇标题。嘿嘿。

然而各位都知道ss网站的内容是聚合而来的,举个例子,“西瓜节”这个栏目是聚合“新闻”(id 1)、“工作简报”(id 2)、“三农资讯”(id 8)中间站长发布、tag是“西瓜”的内容而来,然后按置顶、精华、时间来排序。这个时候访问者并不知道有个查询存在,我们也不希望因为“下一篇”而去到别的版块,分散注意力。在他从搜索引擎过来、从收藏夹或者邮件的链接过来的时候尤其如此。

聚合内容的栏目如何做上一篇下一篇呢?
javascript的window.opener是打开我的窗口,也就是列表页。在列表页存储文章列表为js数组pub_topiclist,在文章页可以用window.opener.pub_topiclist取得,也就可以显示上一篇、下一篇的标题了。难处在此列表毕竟只是几十个,猛点下一篇走到头怎么更新列表。 我用 window.opener.pub_gopre()使得列表页换页。于是达到目的。
注意一点,文章列表存储在列表页的窗口里,关了此窗口,文章页就看不到上一篇下一篇标题了。这是肯定的。另一个办法是硬拷贝到文章页里面。相应的上一篇/下一篇到头了就到头了,不会更新。二选一咯。
在只有文章id的文章页,有了一个来源栏目编号,就能区分是一般栏目,还是聚合栏目点击来的。
那么从收藏夹、邮件来的怎办?上一篇、下一篇的字样还在,但是连接到该聚合分类的列表页去也。列表页关了,也是这样处理的。

代码运行正常,直接拷来分享。只动news_category.html.php、news_view.html.php两个,无关的在这里都省了,你把需要的东西插入自己的模板就可以了。

news_category.html.php

  1. <html><head><title>$title $_SCONFIG[seotitle]</title><meta name="description" content="$description $_SCONFIG[seodescription]" /></head>
  2. <body>
  3. <!--只动news_category.html.php、news_view.html.php两个,无关的在这里都省了,你把需要的东西插入自己的模板就可以了。-->
  4. <!--聚合栏目指的是聚集其他栏目信息、查询筛选结果而成的栏目。本来应该是sql语句来做的。为简单起见,假设27号栏目是聚集1、2号栏目中作者是阿蝶(uid=1)的文章而成的,就用block做。-->
  5. <!--栏目文章列表,分页的,分页也简单起见用它官方的-->
  6. <!--http://192.168.0.102/pzhwww/?action-category-catid-27-id-104这样的链接多了文章id,意思是该类文章列表直接跳转该文章所在分页,简单起见免了-->
  7. <!-- -juhe-$thecat[catid] 是为了文章阅读页处理时知道点击来自一般栏目还是聚合栏目-->


  8. <!--{eval $PSIZE=8}-->
  9. <!--{eval $isjuhe= $thecat[catid]==9 || $thecat[catid]==10 || $thecat[catid]==27 }-->
  10. <!--{if $isjuhe }-->
  11. <!--{if $_SGET['page'] < 2 || empty($_SGET['mode'])}-->
  12. <!--{if $thecat[catid]==27}-->
  13. <!--{block name="spacenews" parameter="perpage/$PSIZE/catid/1,2,27/uid/1/order/i.top desc,i.digest desc,i.dateline desc/cachename/juhelist"}-->
  14. <!--{else}-->
  15. 聚合文章列表和填入block
  16. <!--{/if}-->
  17. <!--{if $_SBLOCK['juhelist']}-->
  18. <ul>
  19. <!--{loop $_SBLOCK['juhelist'] $ckey $value}-->
  20. <li>#date('m-d', $value['dateline'])# <a href="$value[url]<!--{eval echo '-juhe-'.$thecat[catid]}-->" target="_blank">$value[subject]</a></li>
  21. <!--{/loop}-->
  22. </ul>
  23. <!--{/if}-->
  24. <!--{if $_SBLOCK[juhelist_multipage]}-->
  25. $_SBLOCK[juhelist_multipage]
  26. <!--{/if}-->
  27. <!--{/if}-->

  28. <!--把列表存入javascript数组pub_topiclist,这个数组前后都多些-->
  29. <!--{eval $k1 = empty($_SGET['page']) || $_SGET['page']<1 ? 0 : $_SGET['page'] }-->
  30. <!--{eval $k2 = ($k1-2)*$PSIZE<0 ? 0: ($k1-2)*$PSIZE}-->
  31. <!--{eval $k3 = 3*$PSIZE}-->
  32. <!--{block name="spacenews" parameter="limit/$k2,$k3/catid/1,2,27/uid/1/order/i.top desc,i.digest desc,i.dateline desc/cachename/juhelist2"}-->
  33. <script type="text/javascript">
  34. var pub_topiclist=[
  35. <!--{loop $_SBLOCK['juhelist2'] $value}-->
  36. [ $value[itemid],"$value[subject]","$value[url]<!--{eval echo '-juhe-'.$thecat[catid]}-->" ],
  37. <!--{/loop}-->
  38. [0,"",""]];
  39. pub_topiclist.pop();

  40. function pub_gonext(){
  41. var re= new RegExp("-page-(\\d+)","gi") ;
  42. if( re.test(window.location.href)){
  43. window.location.href=window.location.href.
  44. replace( re , "-page-"+(eval(RegExp.$1)+1));
  45. }else{
  46. window.location.href=window.location.href+"-page-2";
  47. }
  48. }
  49. function pub_gopre(){
  50. var re= new RegExp("-page-(\\d+)","gi");
  51. if( re.test(window.location.href)){
  52. var a=eval(RegExp.$1)-1;
  53. a= a<1 ? "" : "-page-"+a;
  54. window.location.href=window.location.href.
  55. replace( re , a);
  56. }else{
  57. window.location.href=window.location.href;
  58. }
  59. }
  60. </script>

  61. <!--{else}-->
  62. 一般栏目文章列表
  63. <!--{/if}-->

  64. <hr /> footer
  65. </body>
  66. </html>
复制代码

news_view.html.php
  1. <html><head><title>$title </title><meta name="description" content="$description $_SCONFIG[seodescription]" /></head>
  2. <body>
  3. <h1>$news[subject]</h1>
  4. <h4>catid=$news[catid] 聚合栏目id=$_SGET['juhe'] itemid=$news[itemid] author=$news[newsauthor] date=#date('m-d H:i', $news[dateline])#</h4>
  5. <hr />
  6. $news[message]
  7. <hr />
  8. <p>你所在的位置:<!--{eval empty($_SGET['juhe']) || $_SGET['juhe']<1 ? $news[catid] : $_SGET['juhe'] }-->号栏目</p>

  9. <!--{eval $juhecatid= empty($_SGET['juhe'])|| $_SGET['juhe']<1 ? 0 : $_SGET['juhe']+1-1 }-->
  10. <!--{if $juhecatid>0 }--> <!--聚合栏目才要这个代码-->
  11. <div id='prenext1'></div>
  12. <script type="text/javascript">
  13. var pub_topiclist=null;
  14. setTimeout('writethem()',1000);

  15. function writethem(){
  16. try{
  17. //从列表页点过来的,可以从window.opener取得文章列表数组 pub_topiclist
  18. //[id,"title","url"] 数组
  19. //然后获得上一篇、下一篇标题。
  20. pub_topiclist=window.opener.pub_topiclist;
  21. var str=pub_topiclist[0][2].substring(1,5);
  22. str='';
  23. var i=0;
  24. for(i=0;i<pub_topiclist.length;i++){
  25. if(pub_topiclist[i][0]==$news[itemid]){
  26. if(i>0) {
  27. str+='<a href="'+ pub_topiclist[i-1][2] +'">上一篇:'+ pub_topiclist[i-1][1] +'</a>';
  28. }else { //部分列表到头了
  29. str+='<a href="javascript:window.opener.pub_gopre();setTimeout(\'writethem()\',5000);this.href=\'\';void(0);"> ...更多</a>';
  30. }
  31. str+='    ';
  32. if(i<pub_topiclist.length-1) {
  33. str+='<a href="'+ pub_topiclist[i+1][2] +'">下一篇:'+ pub_topiclist[i+1][1] +'</a>';
  34. }else {
  35. str+='<a href="javascript:window.opener.pub_gonext();setTimeout(\'writethem()\',5000);this.href=\'\';void(0);"> ...更多</a>';
  36. }
  37. break;
  38. }
  39. }
  40. if(i>=pub_topiclist.length) i=1/(2-2);
  41. else document.getElementById('prenext1').innerHTML=str; //写入
  42. }catch(ex ){
  43. //从收藏、邮件、转帖链接过来的,缺少pub_topiclist,回到该分类的列表页
  44. //部分列表无此文章,同此处理
  45. //正常处理出错,同此处理
  46. var str="<a href='?action-category-catid-$juhecatid<!--{eval echo '-id-'.$news[itemid]}-->'>上一篇</a>     <a href='?action-category-catid-$juhecatid<!--{eval echo '-id-'.$news[itemid]}-->'>下一篇</a>";
  47. document.getElementById('prenext1').innerHTML=str;
  48. }
  49. }
  50. </script>
  51. <!--{else}-->
  52. 一般栏目,https://discuz.dismall.com/thread-1437855-1-1.html 提供方法的上一篇下一篇标题
  53. <!--{/if}-->
  54. <hr /> footer
  55. </body>
  56. </html>
复制代码


saleroad 发表于 2010-9-22 19:22:49 | 显示全部楼层
如果你是提问,就不要用“分享”,这样的帖子,如果是我的论坛,就会“封”!
回复

使用道具 举报

 楼主| 孵蛋 发表于 2010-9-24 12:24:05 | 显示全部楼层
已经调试完成,直接就可以用了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-16 18:09 , Processed in 0.031162 second(s), 3 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表