建站帮助

诚信合作, 高质专业!

织梦DedeCMS在文章内页调用栏目最新文章列表排除自身文章的方法

2020-05-09 18:59:52 浏览 我要评论

昨天有客户找来写织梦DedeCMS的数据调用,需求是:在文章内页调用栏目最新的文章作为相关文章,为了避免重复,怎么样才能做到排除自身文章?咋一看这个需求,会觉得很简单,但实际调试时发现并非易事,CMSYOU不禁感叹Dede中使用if判断怎么这么难呢,相对于Phpcms来说,真是直接打脸。

我们先来聊聊DedeCMS模板中如何写if判断:

Dede在模板中写php语句是用runphp='yes'开启,比如DedeCMS判断当前栏目下是否有子栏目:

{dede:field name=typeid runphp="yes"}

global $dsql;

$sql = "SELECT id From `dede_arctype` WHERE reid='@me' And ishidden<>1 order by sortrank asc limit 0, 10 ";

$row = $dsql->GetOne($sql);

if(@me=is_array($row))

@me="有子栏目";

else @me = "没子栏目";

{/dede:field}

如果在DedeCMS内容页模板,可以用类似写法:

{dede:field.original runphp='yes'}

if(@me<>'')@me="本文原创";

else

@me="原创属性未知";

{/dede:field.original}

从上面两个示范可以看出,DedeCMS模板中写php存在比较大的局限,如果要写多重调用则比较困难。相对来说Phpcms里边写php则可以直接用{php}标记来写,也可以用{if}{else}{/if}直接来if判断,比如Phpcms内容页模板里边调用栏目最新的文章列表排除自身:

{pc:content action="lists" catid="$catid" num="10" order="listorder DESC"}

{loop $data $r}

{if $r[id]!=$id}

<li><a href="{$r[url]}">{$r[title]}</a></li>

{/if}

{/loop}

{/pc}

可以看出只需要{if $r[id]!=$id}直接判断不等于自身id,就轻松实现。

Dede在文章内页调用栏目最新的文章怎么排除自身文章?则相对困难,最终费了一番功夫,得出调用如下:

{dede:php}

$typeid = $refObj->Fields['typeid'];

$id = $refObj->Fields['id'];

{/dede:php}

{dede:sql sql='Select * from #@__archives where typeid = ~typeid~ AND id!=~id~ LIMIT 0,10'}

<li class="duo-ct"><a href="[field:id function=GetOneArchiveURL(@me)/]">[field:title/]</a></li>

{/dede:sql}

其中GetOneArchiveURL函数是根据\include\helpers\archive.helper.php文件的GetOneArchive函数衍生的,修改这个文件,新增GetOneArchiveURL函数。相当于没能直接在模板中调用出来,借助了修改PHP文件增加函数方法来实现。

如果你对DedeCMS也比较熟悉,对于这个调用方法,在文章内页调用栏目最新文章列表排除自身文章有更好的方法吗?

我要收藏
点个赞吧

相关阅读

本月热门

精选推荐

在线客服

扫一扫,关注我们

扫一扫,关注我们