1、导航栏仿制

织梦导航栏的仿制

 

综述:

织梦导航栏的仿制一般是用 {dede:channelartlist}和 {dede:channel}实现,涉及到的属性有:type='top',type='son',typeid='top' ,typeid='m,n,k',row='h' ,其中,m,n,k,h表示具体数字。

以下是常见导航栏仿制的几种情况:

·1、 调用指定栏目(即通过栏目id调用栏目名称(通常放在首页)):

{dede:type typeid=’1′}
<a href="”[field:typelink">[field:typename /]</a>
{/dede:type}

· 2、调用栏目下的子栏目的3种方法:

注意:要根据实际情况要写m和n,row='n'不写的话,默认表示调用所有子栏目.

方法1:通过dede:channelartlist循环调用:

{dede:channelartlist type='son' row='n'} 
<ul>
    <li><a href="{dede:field name='typeurl'/}">{dede:field name='typename'/}</a></li>
</ul>
 {/dede:channelartlist}

方法2:通过dede:channel 调用:

{dede:channel type=’son’ typeid='m' row='n'}

<ul>

    <li><a href=’[field:typeurl/]’><span>[field:typename/]</span></a></li>

</ul>

{/dede:channel}

方法3:通过 dede:channelartlist 和 channel 配合调用:

{dede:channelartlist}
{dede:channel type=’son’ }
<ul>
    <li><a href=’[field:typeurl/]’><span>[field:typename/]</span></a></li>
</ul>
{/dede:channel}
{/dede:channelartlist}

一般是在首页、栏目页要把顶级栏目及其下的子栏目(二级导航菜单)列出来,常以下拉列表的形式显示导航菜单(如下图):

 115301_ECyV_2350294.jpg

 

· 3、获取所有顶级栏目下的子栏目(二级导航菜单仿制),则:

{dede:channelartlist type='top'}

<h3><a href='{dede:field name='typeurl'/}'>{dede:field name='typename'/}</a></h3>

<ul>

{dede:channel type='son' noself='yes' } 

<li><a href='[field:typelink/]'>[field:typename/]</a></li>

{/dede:channel}

</ul>

{/dede:channelartlist}

· 4、获取前几个顶级栏目下的子栏目
将{dede:channelartlist}改写成如下:
 {dede:channelartlist type='top' row='6'}<!--表示将前6个顶级栏目下的子栏目列出-->


· 5、封面页获取该栏目下的全部子栏目(一般用在index_article.htm或list_article.htm中)

{dede:channelartlist type='son'}

<a href="{dede:field name='typeurl'/}">{dede:field name='typename'/}</a>

{/dede:channelartlist}

115330_vPxA_2350294.jpg

 

 

· 6、获取指定的多个栏目(不一定非要顶级栏目)下的子栏目
将{dede:channelartlist}改写成如下:
{dede:channelartlist row='2' typeid='1,2' }<!--表示要把id为1和2的栏目下的所有子栏目列出-->
注意:
调用多个指定的顶级栏目导航,
想用channel是实现不了的:
   {dede:channel type='top' typeid='5,6,7'}
          <dd><a href="[field:typelink/]" title="[field:typename/]" target="_self">[field:typename/]</a></dd>
          {/dede:channel}

必须用channelartlist才能实现:
         {dede:channelartlist row='3' typeid='5,6,7'}
          <dd><a href="{dede:field name='typeurl'/}" title="{dede:field name='typename'/}" target="_self">{dede:field name='typename'/}</a></dd>
         {/dede:channelartlist}

 


但是如果写 {dede:channelartlist type='top'}或 {dede:channelartlist type='top' row='6'}之类常会遇到如下问题:

》》》列表页无法读取(二级)导航,首页可以正常读取是什么原因呢?

这种情况多是由于读取二级导航的缘故。
描述:
首页和列表页引入同样的header.htm,且导航代码统一是写在header.htm文件里的,
首页有读取顶级导航和二级导航,那么导航的代码如下:
-------------------------------------------------------

   {dede:channelartlist type='top' row='4'}

      <li>

       <strong>

         <a href="{dede:field name='typeurl'/}" title="{dede:field name='typename'/}" target="_self"><span class="glyphicon glyphicon-book"></span>&nbsp;&nbsp;{dede:field name='typename'/}</a>

         </strong>

            <dl>

              <em></em>

              {dede:channel type='son' noself='yes'}

              <dd><a href="[field:typelink/]" title="[field:typename/]" target="_self">[field:typename/]</a></dd>

              {/dede:channel}

            </dl>

      </li>

      {/dede:channelartlist}

-------------------------------------------------------
这样会有一个问题,就是首页可以正常显示顶级导航和二级导航,但在列表页就会出现无法读取导航的问题
解决办法是:把type='top'改成typeid='top',也就是 {dede:channelartlist typeid='top' row='4'} ,这样首页和列表页都可以读取顶级和二级导航了


· 7、获取从第N个导航栏目开始的M个栏目(channelartlist添加limit属性)
给channelartlist标签添加limit属性是非常实用的一个扩展,比如当前做的这个站要求栏目必须要有可扩展性,模板也有通用性,以后可以随意添加栏目,而不用改模板,按照这个要求,那么就只能用channelartlist来实现栏目循环,但是第一个栏目被定位在特殊位置,也有着不同的样式,这会让人素手无策,那么channelartlist标签如果也能像arclist那样具有limit属性,那问题就可以轻松解决了。
将自己的想法在百度上搜索了一下,原来已经有网友给出了方法:
打开include/taglib/channelartlist.lib.php文件,约62行处找到
if(empty($totalnum)) $totalnum = 20;
在下面加一行
if(!empty($limit)) $totalnum = $limit;
就这么简单,如果有limit属性的话就可以用limit属性来控制调用的记录数量了。

这样子它只会调用顶级栏目,即使顶级栏目有子栏目,它也不会调用出来。

115420_Qeou_2350294.jpg

如上图,我现在只想调用ID为5的栏目开始的10个栏目(虽然下面只有3个栏目
),前面的ID为1-4的顶级栏目我不想调用,可以这样:

{dede:channelartlist  limit='4,3' typeid='top' }<!--调用ID为5的栏目开始的3个顶级栏目,因为limit默认是从0开始的,所以这里要写limit='4,3',而不是limit='5,10'-->

<dd><a href="{dede:field name='typeurl'/}" title="{dede:field name='typename'/}" target="_self">{dede:field name='typename'/}</a></dd>

{/dede:channelartlist}

如不行,请增加typeid='top' 属性
结果如下:【更多】里只列出了3个栏目,而不会把【视野】、【创投】、【商业】、【智客】也列出。

115459_nA8L_2350294.jpg

 

下面是另一个实例,先取第一个栏目单独处理,然后再从第二个开始取出后面栏目,其中奇数栏目向左浮动,偶数栏目向右浮动。
-------------------------------------------------------

{dede:channelartlist limit='0,1'}

<div class='box' id='news'>

<h2><a href="{dede:field name='typeurl'/}">{dede:field name='typename'/}</a></h2>

<ul>

{dede:arclist row='8'}

<li><a href="[field:arcurl/]">[field:title/]</a></li>

{/dede:arclist}

</ul>

</div>

{/dede:channelartlist}

<div class='banner'>广告条</div>

{dede:channelartlist limit='1,10'}

{dede:global runphp='yes' name='itemindex'}

$a="<div class='box left'>";

$b="<div class='box right'>";

if ((@me%2)==0) @me=$b;

else @me=$a;

{/dede:global}

<h3><a href="{dede:field name='typeurl'/}">{dede:field name='typename'/}</a></h3>

<ul>

{dede:arclist row='8' titlelen='46'}

<li><a href="[field:arcurl/]">[field:title/]</a></li>

{/dede:arclist}

</ul>

</div>

{/dede:channelartlist}

-------------------------------------------------------
------------------------------------------------------------------------

 

 

{dede:channel}无子栏目时不获取同级栏目的解决方法

昨天在处理一个用dede做的网站,发现栏目无子类时候显示同级分类,影响用户的体验!特提供下面的解决方法!
查找打开:include\taglib\channel.lib.php文件,找到:
if($type=='son' && $reid!=0 && $totalRow==0)
将上述代码修改为:
if($type=='son' && $reid!=0 && $totalRow==0 && $noself=='')
保存页面,然后在模板中用dede:channel标签即可!

转载于:https://my.oschina.net/zhumofeng/blog/403797

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值