织梦DedeCMS文章页调用栏目最新文章列表排除自身文章

瓦窑源码   2020-06-27   收藏本单
在文章内页调用栏目最新的文章作为相关文章,为了避免重复,怎么样才能做到排除自身文章?实际调试时发现并非易事,瓦窑源码不禁感叹Dede中使用if判断怎么这么难呢,相对于Phpcms来说,真是直接打脸。下面说说织梦DedeCMS文章页调用栏目最新文章列表排除自身文章的方法。

我们先来聊聊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}
  • {$r[title]}
{/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'}
  • [field:id function=GetOneArchiveURL(@me)/]
{/dede:sql}

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

以上就是关于“织梦DedeCMS文章页调用栏目最新文章列表排除自身文章”所有内容,如果你对DedeCMS也比较熟悉,对于这个调用方法,在文章内页调用栏目最新文章列表排除自身文章有更好的方法吗?分享下吧。

展开