分享

【标题向】Dedecms标题列表判断是否为当日新发布以及是否为头条推荐等原创代码详解–附’@me’理解简述 | Cavyff 's Blog

 yliu277 2015-05-15

上一篇刚讲过tab切换的部分,详细内容见:《【切换向】tab切换特效js函数适合Dedecms模板嵌套标签使用详解–附演示+源码下载》

这次我们继续说tab下面内容部分,其实不单单是tab,只要是Dedecms文章标题列表都可以应用,先看图片:

Dedecms文章标题列表

看到图片就应该很熟悉了,日常做Dedecms模版的时候,首页肯定会有这样或那样的文章标题列表,用{dede:arclist}调用列表出来是件很easy的事情这里就不过多叙述了,不太熟悉的童鞋可以去参考Dedecms官方文档。这里我主要想说的是有点时候我们想在这个文章标题列表上做点小文章,比如取出的标题是当天发布的内容,则在标题后面加上new图标;又比如头条推荐的文章标题后面加上上图里的top图标等等,而单纯透过{dede:arclist}里面的’flag’属性是无法单独判断的,这就需要我们单独做点什么了。既然需要判断,自然而然的会令我们想到用’if’,在Dedecms里面如果使用’if’判断的内容还跟文章有关,那不得不提的就是[field:array]这个东西很强大啊,基本上你想要的东西都在这里面,下面来看代码,先来两个热热身:

1、循环判断{dede:arclist}取出的标题是否为头条

PHP
0
1
2
3
4
5
6
7
8
{dede:arclist row=4 orderby=pubdate typeid=2}
    [field:flag runphp='yes']
        if(@me == 'h'){
    @me='这篇文章是头条推荐';
}else{
    @me='这篇文章不是头条推荐';
}
[/field:flag]
{/dede:arclist}

代码不长,比较好理解,因为这里我们只是要对文章里的’flag’属性做判断,所以如果使用[field:array]虽然也能达到效果,但是会取出很多多余的内容难免影响效率,而直接使用[field:flag]既简洁又方便,其中”@me = ‘h'”是判断文章是否属于头条,聪明的童鞋看到这里一定会衍生出很多种判断了,因为flag的值除了’h’外还可以是”头条[h]推荐[c]幻灯[f]特荐[a]滚动[s]加粗[b]图片[p]跳转[j]”。

另外说一下’@me’,刚接触Dedecms模版的童鞋可能对这个@me使用起来比较晕,不要紧。Dedecms里面虽然可以执行php语句,但是不支持用’echo’进行输出,所以‘@me’最简单的一个功能就是代替’echo’进行输出。比如本段代码中的”@me=’这篇文章是头条推荐';”,如果用php写法就应该是”echo ‘这篇文章是头条推荐';”这样看是否直观明白了呢。但是’@me’更高级的是它是配合在[field:xxx]等标签中使用的,’@me’不仅负责输出,其本身也会保存着上层标签查询数据库后所得的内容,比如本段代码’@me’保存的就是取出的文章信息里’flag’的值,因此”@me = ‘h'”这个判断才成立。

2、循环判断{dede:arclist}取出的标题是否为当天发布

PHP
0
1
2
3
4
5
6
7
8
9
10
{dede:arclist row=4 orderby=pubdate typeid=2}
    [field:senddate runphp='yes']
$now = time();
        $oneday = 3600 * 24;
        if(($now - @me) < $oneday){
    @me='这篇文章是今天新发布的';
}else{
    @me='这篇文章不是今天新发布的';
}
[/field:senddate]
{/dede:arclist}

有了上一个代码的基础,理解这个就不难了,这里不再赘述了。发这两个热身主要是为了来个有点点难度的,那就是本文最开始贴图里显示的,对{dede:arclist}取出的文章标题做判断,如果是头条推荐则在标题后面显示top图标,如果是当天新发布的则在标题后面显示new图标,二者都不属于的则只显示文章标题,见代码:

PHP
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
{dede:arclist row=4 orderby=pubdate typeid=2 titlelen='54'}
    [field:array runphp='yes']
        if(@me['flag'] == 'h'){
    @me="<li class='list '><a href='".@me['arcurl']."' title=' ".@me['title']."' target='_self'> ".@me['title']."</a><img class='listtop' src='".@me['templeturl']."/demo/images/top.gif' /></li>";
}else{
            $now = time();
            $oneday = 3600 * 24;
            if(($now - @me['senddate']) < $oneday ){
                @me="<li class='list '><a href='".@me['arcurl']."' title=' ".@me['title']."' target='_self'> ".@me['title']."</a><img class='listtop' src='".@me['templeturl']."/demo/images/news.gif' /></li>";
            }else{
                @me="<li class='list '><a href='".@me['arcurl']."' title=' ".@me['title']."' target='_self'> ".@me['title']."</a></li>";
            }
        }
    [/field:array]
{/dede:arclist}

代码虽然长点,但是有前两段代码的基础看懂这个还是没什么难度的,代码中包涵的html内容不影响整个功能,仅是用来是布局相对美观使用,阅读程序代码时可以忽略掉。这里就可以体现出[field:array]的好处了,之前我们用[field:flag]也好,用[field:senddate]也好,都只是单一的判断,如果想做多条件判断,那就非[field:array]莫属了,这里取出之后的’@me’不仅包涵了’flag’和’senddate’信息,还包含有其他底层字段很多信息,下面所列出的都有:

0
1
2
3
ID(同id),typeid,sortrank,flag,ismake,channel,arcrank,click,money,title,shorttitle,color,writer,source
litpic(同picname),pubdate,senddate,mid, lastpost,scores,goodpost,badpost,notpost,description(同infos)
filename, image, imglink, fulltitle, textlink, typelink,plusurl, memberurl, templeturl
stime(pubdate 的"0000-00-00"格式)

 

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

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多