php 织梦symbol,织梦内置标签小优化之三—dede:field name=position标签优化

本文主要是将{dede:field name=’position’/}栏目当前位置修改为隐藏隐藏栏目,仅显示不隐藏的栏目。比如,一级栏目为隐藏栏目,他下面有不隐藏的二级栏目和三级栏目,当我们访问三级级栏目时,改为主页>二级栏目>三级栏目。

其实,大部分人把织梦的隐藏栏目理解错了,以为隐藏栏目就是什么都没有,仅仅是建个分类,其实不是,隐藏栏目仅仅是在导航中隐藏该栏目,而这个栏目其实是真实存在的,和其他栏目并没有差别,因为有的情况下,我们写了很多栏目,而并不希望这些栏目都显示在导航中,所以就用到了隐藏栏目,而有的人理解错了,但是我们没法改变人家的想法,人家就会要求,文章、列表等当前位置的地方,应该隐藏掉隐藏栏目。没办法,织梦自身没有这样的功能,我们只能是修改他的源文件了。其实这样隐藏了,仅仅也是控制那些访问网站仅仅靠点击而非手动输入的人,这个隐藏栏目的封面模板或者列表模板还是要做的,以免人家直接访问这个隐藏栏目目录,这里仅仅是隐藏了这个当前位置的显示而已。方法如下。

找到include/typelink.class.php,这个是栏目链接类库。找到LogicGetPosition方法大约在166行,一看这个就知道应该是{dede:field name=’position’/}这个标签调用的方法。

1、我们分析栏目表,dede_arctype,里面有个ishidden字段,就是控制是否为隐藏栏目的,1为隐藏,0为显示。所以就可以通过获取的栏目信息判断这个字段的值来控制是否让其显示。首先要读取栏目的这个字段。找到方法开始位置的$this->dsql->SetQuery(“SELECT id,reid,typename,typedir,isdefault,ispart这里,这里就是读取出需要的栏目信息,我们增加一个字段,ishidden,即改为:

PHP

$this->dsql->SetQuery("SELECT id,reid,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,ishidden,siteurl,sitepath FROM #@__arctype WHERE id='".$id."'");

1

$this->dsql->SetQuery("SELECT id,reid,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,ishidden,siteurl,sitepath FROM #@__arctype WHERE id='".$id."'");

2、然后在下面,我们要控制>这个符号的显示,因为如果这个栏目是隐藏栏目,那么如果我们仅隐藏这个栏目,就会多出来一个>符号,所以我们要进行控制。找到下面的

PHP

$this->valuePosition = $this->GetOneTypeLink($tinfos).$this->SplitSymbol.$this->valuePosition;

1

$this->valuePosition=$this->GetOneTypeLink($tinfos).$this->SplitSymbol.$this->valuePosition;

给其加上判断,即改为

PHP

if($this->GetOneTypeLink($tinfos)){

$this->valuePosition = $this->GetOneTypeLink($tinfos).$this->SplitSymbol.$this->valuePosition;

}else{

$this->valuePosition = $this->valuePosition;

}

1

2

3

4

5

if($this->GetOneTypeLink($tinfos)){

$this->valuePosition=$this->GetOneTypeLink($tinfos).$this->SplitSymbol.$this->valuePosition;

}else{

$this->valuePosition=$this->valuePosition;

}

3、下面就是改获取栏目的方法,判断这个栏目是否为隐藏。隐藏就不返回,

找到function GetOneTypeLink($typeinfos)方法,大约在190行左右

将其内容

PHP

$typepage = $this->GetOneTypeUrl($typeinfos);

$typelink = "".$typeinfos['typename']."";

return $typelink;

1

2

3

$typepage=$this->GetOneTypeUrl($typeinfos);

$typelink="".$typeinfos['typename']."";

return$typelink;

改为

PHP

if('1'==$typeinfos['ishidden']){

return false;

}else{

$typepage = $this->GetOneTypeUrl($typeinfos);

$typelink = "".$typeinfos['typename']."";

return $typelink;

}

1

2

3

4

5

6

7

if('1'==$typeinfos['ishidden']){

returnfalse;

}else{

$typepage=$this->GetOneTypeUrl($typeinfos);

$typelink="".$typeinfos['typename']."";

return$typelink;

}

这样,这个功能就算是改完了。要注意上面说的,即使不显示了,也是可以访问到的,要注意其列表模板或封面模板!

程序本天成,妙手偶得之!我们只是代码的搬运工!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值