本帖最后由 孵蛋 于 2010-9-24 12:23 编辑
我们在阅读内容的时候,看完了想看看上一篇是啥?下一篇是啥?
ss的官方只有“下一篇”,没有标题。乍办?
https://discuz.dismall.com/thread-1437855-1-1.html 里面已经说得很好了(ss7 2010年适用),能够查出该文章同个小分类的上一篇、下一篇:
- $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');
- ......
复制代码
查询结果,比如查“西瓜”,阅读详细内容的时候上一篇下一篇还是不是关于西瓜的呢?不是了。
答: 查询结果摆在那里,上一篇下一篇很明显了,嘿嘿。所以无需要显示下一篇标题。嘿嘿。
然而各位都知道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
- <html><head><title>$title $_SCONFIG[seotitle]</title><meta name="description" content="$description $_SCONFIG[seodescription]" /></head>
- <body>
- <!--只动news_category.html.php、news_view.html.php两个,无关的在这里都省了,你把需要的东西插入自己的模板就可以了。-->
- <!--聚合栏目指的是聚集其他栏目信息、查询筛选结果而成的栏目。本来应该是sql语句来做的。为简单起见,假设27号栏目是聚集1、2号栏目中作者是阿蝶(uid=1)的文章而成的,就用block做。-->
- <!--栏目文章列表,分页的,分页也简单起见用它官方的-->
- <!--http://192.168.0.102/pzhwww/?action-category-catid-27-id-104这样的链接多了文章id,意思是该类文章列表直接跳转该文章所在分页,简单起见免了-->
- <!-- -juhe-$thecat[catid] 是为了文章阅读页处理时知道点击来自一般栏目还是聚合栏目-->
- <!--{eval $PSIZE=8}-->
- <!--{eval $isjuhe= $thecat[catid]==9 || $thecat[catid]==10 || $thecat[catid]==27 }-->
- <!--{if $isjuhe }-->
- <!--{if $_SGET['page'] < 2 || empty($_SGET['mode'])}-->
- <!--{if $thecat[catid]==27}-->
- <!--{block name="spacenews" parameter="perpage/$PSIZE/catid/1,2,27/uid/1/order/i.top desc,i.digest desc,i.dateline desc/cachename/juhelist"}-->
- <!--{else}-->
- 聚合文章列表和填入block
- <!--{/if}-->
- <!--{if $_SBLOCK['juhelist']}-->
- <ul>
- <!--{loop $_SBLOCK['juhelist'] $ckey $value}-->
- <li>#date('m-d', $value['dateline'])# <a href="$value[url]<!--{eval echo '-juhe-'.$thecat[catid]}-->" target="_blank">$value[subject]</a></li>
- <!--{/loop}-->
- </ul>
- <!--{/if}-->
- <!--{if $_SBLOCK[juhelist_multipage]}-->
- $_SBLOCK[juhelist_multipage]
- <!--{/if}-->
- <!--{/if}-->
- <!--把列表存入javascript数组pub_topiclist,这个数组前后都多些-->
- <!--{eval $k1 = empty($_SGET['page']) || $_SGET['page']<1 ? 0 : $_SGET['page'] }-->
- <!--{eval $k2 = ($k1-2)*$PSIZE<0 ? 0: ($k1-2)*$PSIZE}-->
- <!--{eval $k3 = 3*$PSIZE}-->
- <!--{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"}-->
- <script type="text/javascript">
- var pub_topiclist=[
- <!--{loop $_SBLOCK['juhelist2'] $value}-->
- [ $value[itemid],"$value[subject]","$value[url]<!--{eval echo '-juhe-'.$thecat[catid]}-->" ],
- <!--{/loop}-->
- [0,"",""]];
- pub_topiclist.pop();
- function pub_gonext(){
- var re= new RegExp("-page-(\\d+)","gi") ;
- if( re.test(window.location.href)){
- window.location.href=window.location.href.
- replace( re , "-page-"+(eval(RegExp.$1)+1));
- }else{
- window.location.href=window.location.href+"-page-2";
- }
- }
- function pub_gopre(){
- var re= new RegExp("-page-(\\d+)","gi");
- if( re.test(window.location.href)){
- var a=eval(RegExp.$1)-1;
- a= a<1 ? "" : "-page-"+a;
- window.location.href=window.location.href.
- replace( re , a);
- }else{
- window.location.href=window.location.href;
- }
- }
- </script>
- <!--{else}-->
- 一般栏目文章列表
- <!--{/if}-->
- <hr /> footer
- </body>
- </html>
复制代码
news_view.html.php
- <html><head><title>$title </title><meta name="description" content="$description $_SCONFIG[seodescription]" /></head>
- <body>
- <h1>$news[subject]</h1>
- <h4>catid=$news[catid] 聚合栏目id=$_SGET['juhe'] itemid=$news[itemid] author=$news[newsauthor] date=#date('m-d H:i', $news[dateline])#</h4>
- <hr />
- $news[message]
- <hr />
- <p>你所在的位置:<!--{eval empty($_SGET['juhe']) || $_SGET['juhe']<1 ? $news[catid] : $_SGET['juhe'] }-->号栏目</p>
- <!--{eval $juhecatid= empty($_SGET['juhe'])|| $_SGET['juhe']<1 ? 0 : $_SGET['juhe']+1-1 }-->
- <!--{if $juhecatid>0 }--> <!--聚合栏目才要这个代码-->
- <div id='prenext1'></div>
- <script type="text/javascript">
- var pub_topiclist=null;
- setTimeout('writethem()',1000);
- function writethem(){
- try{
- //从列表页点过来的,可以从window.opener取得文章列表数组 pub_topiclist
- //[id,"title","url"] 数组
- //然后获得上一篇、下一篇标题。
- pub_topiclist=window.opener.pub_topiclist;
- var str=pub_topiclist[0][2].substring(1,5);
- str='';
- var i=0;
- for(i=0;i<pub_topiclist.length;i++){
- if(pub_topiclist[i][0]==$news[itemid]){
- if(i>0) {
- str+='<a href="'+ pub_topiclist[i-1][2] +'">上一篇:'+ pub_topiclist[i-1][1] +'</a>';
- }else { //部分列表到头了
- str+='<a href="javascript:window.opener.pub_gopre();setTimeout(\'writethem()\',5000);this.href=\'\';void(0);"> ...更多</a>';
- }
- str+=' ';
- if(i<pub_topiclist.length-1) {
- str+='<a href="'+ pub_topiclist[i+1][2] +'">下一篇:'+ pub_topiclist[i+1][1] +'</a>';
- }else {
- str+='<a href="javascript:window.opener.pub_gonext();setTimeout(\'writethem()\',5000);this.href=\'\';void(0);"> ...更多</a>';
- }
- break;
- }
- }
- if(i>=pub_topiclist.length) i=1/(2-2);
- else document.getElementById('prenext1').innerHTML=str; //写入
- }catch(ex ){
- //从收藏、邮件、转帖链接过来的,缺少pub_topiclist,回到该分类的列表页
- //部分列表无此文章,同此处理
- //正常处理出错,同此处理
- 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>";
- document.getElementById('prenext1').innerHTML=str;
- }
- }
- </script>
- <!--{else}-->
- 一般栏目,https://discuz.dismall.com/thread-1437855-1-1.html 提供方法的上一篇下一篇标题
- <!--{/if}-->
- <hr /> footer
- </body>
- </html>
复制代码
|