dede本身自带的有一个相关文章的板块“{dede:likeart}”,可以用了之后发现这个板块调用的是全站的文章,而且没有什么关联性,基本美工页面调用的也是一样的文章,百度是很不喜欢这样做的。

    今天上网查了下找到了一个东西,亲自试过之后发现还可以,把他分享给大家。原来从dedecms5.5版开始已经替换了该标签,把模板中 likeart 标签修改为 likearticle 就可以了。

    代码如下:

    1. {dede:likearticlerow=”col=”titlelen=”infolen=”}
    2. <ahref=’[field:arcurl/]‘>[field:title/]</a>
    3. {/dede:likearticle}

    参数说明:

    col:分多少列显示(默认为单列)

    row:返回文档列表总数

    titlelen:标题长度 等同于titlelength

    infolen:表示内容简介长度 等同于infolength

    mytypeid:手工指定要限定的栏目id,用,分开表示多个

    innertext:单条记录样式(指标签中间的内容)

    likeartcle标签默认是不支持order by属性的(包括V5.7),在网上找到了修改的方法:

    编辑likearticle.lib.php文件,首先获得标签传递过来的orderby的属性值,

    找到:

    1. extract($ctag->CAttribute->Items,EXTR_SKIP);
    2. $revalue=”;

    在下面添加:

    1. $orderby=$ctag->GetAtt(‘orderby’);

    在源代码中找到下面代码:

    1. if(empty($arcid)||$byabs==0){
    2. $orderquery=”orderbyarc.iddesc“;
    3. }
    4. else{
    5. $orderquery=”orderbyABS(arc.id–“.$arcid.”)“;
    6. }

    这是likearticle标签默认的排序方式。赋予标签orderby属性那么这段代码就没意义了,把上面代码替换为:

    1. $orderquery=”;
    2. if($orderby==’hot’||$orderby==’click’)$orderquery=”orderbyarc.click$orderWay”;
    3. elseif($orderby==‘sortrank’||$orderby==’pubdate’)$orderquery=”orderbyarc.sortrank$orderWay”;
    4. elseif($orderby==‘id’)$orderquery=”orderbyarc.id$orderWay”;
    5. elseif($orderby==‘near’)$orderquery=”orderbyABS(arc.id–“.$arcid.”)”;
    6. elseif($orderby==‘lastpost’)$orderquery=”orderbyarc.lastpost$orderWay”;
    7. elseif($orderby==‘scores’)$orderquery=”orderbyarc.scores$orderWay”;
    8. elseif($orderby==‘rand’)$orderquery=”orderbyrand()”;
    9. elseif($orderby==‘weight’)$orderquery=”orderbyarc.weightasc”;//如果没有特定设置排序则按照权重先排序
    10. else$orderquery=”orderbyarc.sortrank$orderWay”;

    搞定!!!

发表评论

电子邮件地址不会被公开。 必填项已用*标注