织梦调取三级栏目名及栏目下的内容列表的方法以及勾选文章自定义属性显示小图标
1.
{dede:channelarclist}
<a href="">玻尿酸:{dede:field name='name'/}</a>
{dede:channel type='son'}
<a href="">玻尿酸塑形:[field:name/]</a>
{dede:arclist}
{field:title/}
{/dede:arclist}
{/dede:channel}
{/dede:channelarclist}
三级目录在首页嵌套标签,但是{dede:channel}里不能嵌套,因此{dede:arclist}标签会原样输出,解决如下:
在/include/taglib/channel.lib.php 中找到if($col>1) $likeType .= "</dd>\r\n"; (v5.6 是125行 v5.7是156行)在这句话上面加上代码
if($sanji)
{
$typeid = $row['id'];
if((class_exists('PartView')))
{
$pv = new PartView($typeid);
$text = $likeType;
$text= str_replace(array('{field', '/}'), array('[field', '/]'), $text);
$pv->SetTemplet($text,'string');
$artlist = $pv->GetResult();
$likeType = $artlist;
}
}
调用的时候,因为$text= str_replace(array('{field', '/}'), array('[field', '/]'), $text); 这句代码
调用变成:
{dede:channelartlist}
{dede:field name='typeurl'/} {dede:field name='typename'/} //外框架{dede:channel type='sun' sanji='1'}//子框架
<h3><a href="[field:typelink/]" target="_blank">[field:typename/]</a></h3>
{dede:arclist row='5' titlelen='39'} //调用文章
连接: {field:arcurl/}
标题: {field:title/}
{/dede:arclist}
{/dede:channel}
{/dede:channelartlist}
2.勾选添加的自定义属性前台显示想要的
进入后台——系统——SQL命令行工具——运行SQL命令行,
“insert into `dede_arcatt`(sortid,att,attname) values(9,'d','新自定义属性');
alter table `dede_archives` modify `flag` set ('h','c','p','f','s','j','a','b','d') default NULL ”
注意id从9开始,每次添加新的属性,set ('h','c','p','f','s','j','a','b','d') 里都要跟上之前已经添加的。
3.使用的时候勾上。需要根据是否选择这个属性来判断,如下所示
看如下代码:调用方式就是{field:flag}里的php判断
{dede:arclist addfields='price,qa1,qa2,qa3,titleinfo,listtitledesc' channelid='1' } <div class="product" data-url="{field:arcurl/} "> <div class="product-title"> {field:title/} {field:flag runphp='yes'} $a=explode(',','@me'); if(in_array('rr',$a)){ @me='<img class="ico" src="/icon/hot-867f562ca0.png" alt="">'; }else if(in_array('xx',$a)){ @me='<img class="ico" src="/icon/new-4131f2a9e9.png" alt="">'; }else{ @me=''; } [/field:flag] </div> <div class="product-info"> {field:price/} </div> <p class="product-des"> {field:listtitledesc/} </p> <ul class="product-ask"> <li><a href="{field:arcurl/}#qa"> {field:qa1/} </a></li> <li><a href="{field:arcurl/}#qa"> {field:qa2/} </a></li> <li><a href="{field:arcurl/}#qa"> {field:qa3/} </a></li> </ul> <div class="product-url"><a href="{field:arcurl/}">详情 ></a></div> </div> {/dede:arclist}
两个问题一起说是因为,{field:}这样只能获取到flag的值,php判断是失效的,因为在第一个问题中改了标签[field:]
[field:flag runphp='yes']
这样可以进行php判断,但是获取不到flag。
回到第一个问题中改的地方
在/include/taglib/channel.lib.php 中
if($sanji)
{
$typeid = $row['id'];
if((class_exists('PartView')))
{
$pv = new PartView($typeid);
$text = $likeType;
$text= str_replace(array('{field', '/}'), array('[field', '/]'), $text);
$pv->SetTemplet($text,'string');
$artlist = $pv->GetResult();
$likeType = $artlist;
}
}
$text= str_replace(array('{field', '/}'), array('[field', '/]'), $text);
这句添加一点改成:
$text= str_replace(array('{field', '/}',"runphp='yes'}"), array('[field', '/]',"runphp='yes']"), $text);
至此,
{field:flag runphp='yes'}
这个改过的标签可以获取到flag自定义属性也可以根据其进行判断输出想要的样式了。