dedecms中如何让专题不显示在文章列表中
2012-04-16 15:10
232 查看
dede的对专题的构思有很多好的方面,但是也有不合理的地方,比如专题的处理。
在dede中专题会默认显示在文章列表中,多数时候我们是不希望这样的,设置专题就是为了和普通文章区分开来。
但是dede默认是要这样显示的。那么我们可以来改arclist标签对应的php文件。
处理arclist文章列表的标签对应的php文件是文件\include\taglib\arclist.lib.php。
然后找到查询文章列表的sql语句,经过仔细的分析,初步认为设置查询语句条件是在lib_arclistDone()函数的$orwhere变量里面。在文件中搜索orwhere,发现orwhere其实是一个数组 $orwheres = array();,这个数组是这样赋值的: $orwheres[] = " And arc.channel !=-1",先判断标签属性,如果有某某标签需要更改查询条件,就用这种方式将限制条件的字符串保存在
orwheres里面,在最后将整个数组用join函数连在一起,结合其他变量形成sql语句。在lib_arclistDone函数中是这样做的
if(isset($orwheres[0])) {
$orwhere = join(' And ',$orwheres);
$orwhere = preg_replace("#^ And#is", '', $orwhere);
$orwhere = preg_replace("#And[ ]{1,}And#is", 'And ', $orwhere);
}
if($orwhere!='') $orwhere = " WHERE $orwhere ";
上面这段代码形成 where查询条件
然后sql语句是这样的:
$query = "SELECT arc.*,tp.typedir,tp.typename,tp.corank,tp.isdefault,tp.defaultname,tp.namerule,
tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath
$addfieldsSql
FROM `$maintable` arc LEFT JOIN `jcode_arctype` tp on arc.typeid=tp.id
$addfieldsSqlJoin
$orwhere $ordersql $limitsql";
弄清楚了查询文章的sql语句在哪里,我们就很好修改了,不是要取消默认专题被显示的功能么,我们都知道所有专题都有个channel字段,该字段为-1就表示为专题,那么我们只需在orwheres里面加上这个条件就行了。
$orwheres[] = " And arc.channel !=-1";
但是我们还需要考虑到,有些地方是需要显示专题列表的,仅仅这样做,会让需要专题的地方也显示不出来。
所以最终我决定这样写:
if(preg_match('#spec#i', $listtype))
$channelid=-1;
else
$orwheres[] = " And arc.channel !=-1";
if(!empty($channelid)) $orwheres[] = " And arc.channel = '$channelid' ";
把上面这段代码的位置放在大概该文件的305行的地方,需要注意的是不仅仅是增加代码而已,原有的代码还是有小小的改动,不过假如你读懂了我写的,你应该知道怎么改。如果你不放心,可以先保存再修改试试,不成功的话也不会有大的影响。
有了上面的代码,所有arclist标签默认情况下均不会显示专题。
如果需要显示专题的话需要这样写arclist标签:
{dede:arclist titlelen=42 row=10 type='spec'}
<li><a href="[field:arcurl/]" target="_blank">[field:title function=' (strlen("@me")>28 ? cn_substr("@me",28)."..." : "@me" ) '/]</a></li>
{/dede:arclist}
在dede中专题会默认显示在文章列表中,多数时候我们是不希望这样的,设置专题就是为了和普通文章区分开来。
但是dede默认是要这样显示的。那么我们可以来改arclist标签对应的php文件。
处理arclist文章列表的标签对应的php文件是文件\include\taglib\arclist.lib.php。
然后找到查询文章列表的sql语句,经过仔细的分析,初步认为设置查询语句条件是在lib_arclistDone()函数的$orwhere变量里面。在文件中搜索orwhere,发现orwhere其实是一个数组 $orwheres = array();,这个数组是这样赋值的: $orwheres[] = " And arc.channel !=-1",先判断标签属性,如果有某某标签需要更改查询条件,就用这种方式将限制条件的字符串保存在
orwheres里面,在最后将整个数组用join函数连在一起,结合其他变量形成sql语句。在lib_arclistDone函数中是这样做的
if(isset($orwheres[0])) {
$orwhere = join(' And ',$orwheres);
$orwhere = preg_replace("#^ And#is", '', $orwhere);
$orwhere = preg_replace("#And[ ]{1,}And#is", 'And ', $orwhere);
}
if($orwhere!='') $orwhere = " WHERE $orwhere ";
上面这段代码形成 where查询条件
然后sql语句是这样的:
$query = "SELECT arc.*,tp.typedir,tp.typename,tp.corank,tp.isdefault,tp.defaultname,tp.namerule,
tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath
$addfieldsSql
FROM `$maintable` arc LEFT JOIN `jcode_arctype` tp on arc.typeid=tp.id
$addfieldsSqlJoin
$orwhere $ordersql $limitsql";
弄清楚了查询文章的sql语句在哪里,我们就很好修改了,不是要取消默认专题被显示的功能么,我们都知道所有专题都有个channel字段,该字段为-1就表示为专题,那么我们只需在orwheres里面加上这个条件就行了。
$orwheres[] = " And arc.channel !=-1";
但是我们还需要考虑到,有些地方是需要显示专题列表的,仅仅这样做,会让需要专题的地方也显示不出来。
所以最终我决定这样写:
if(preg_match('#spec#i', $listtype))
$channelid=-1;
else
$orwheres[] = " And arc.channel !=-1";
if(!empty($channelid)) $orwheres[] = " And arc.channel = '$channelid' ";
把上面这段代码的位置放在大概该文件的305行的地方,需要注意的是不仅仅是增加代码而已,原有的代码还是有小小的改动,不过假如你读懂了我写的,你应该知道怎么改。如果你不放心,可以先保存再修改试试,不成功的话也不会有大的影响。
有了上面的代码,所有arclist标签默认情况下均不会显示专题。
如果需要显示专题的话需要这样写arclist标签:
{dede:arclist titlelen=42 row=10 type='spec'}
<li><a href="[field:arcurl/]" target="_blank">[field:title function=' (strlen("@me")>28 ? cn_substr("@me",28)."..." : "@me" ) '/]</a></li>
{/dede:arclist}
相关文章推荐
- dedecms文章列表如何分组显示
- dedecms后台每页文章条数如何修改(“文档列表”每一页显示的文档条数)
- 织梦dedecms如何显示所有文章列表
- 织梦dedecms如何显示所有文章列表
- 关于文章列表如何直接显示文章类别名的问题
- (转)织梦dedecms模板。如何让type='image'和不带type='image'的文章同时出现在列表里。
- dedecms中如何在栏目列表和文章页面中获得当前栏目标题
- PHP CMS 如何让父栏目显示该栏目并分页和子栏目所有文章列表
- 如何让织梦文章列表有缩略图则显示…
- dedecms列表中显示文章完整标题的一个解决办法
- dedecms5.7会员空间文章列表分页一直显示为0条记录
- phpcms如何显示所有的列表和文章?
- dedecms列表中显示文章完整标题的解决办法
- 如何让织梦文章列表有缩略图则显示缩略图,无则不显示
- 如何将文章列表用<li>分两列显示
- 织梦DedeCMS如何让文章列表实现“隔行换色”
- 如何以仅标题的形式显示blogger所有文章列表
- 文章页显示tag标签列表和dedecms的tag标签随机背景彩色
- DISCUZ论坛中如何设置列表文章显示的条数呢?
- 如何让织梦文章列表有缩略图则显示缩略图,无则不显示