织梦当前位置函数GetPositionLink($islink=true)教程
如果说这个函数GetPositionLink($islink=true)你可能不知道这个函数是做什么的,但是,如果说这个标签{dede:field.position/}你肯定非常熟悉了吧,这个标签的作用就是为了实现下面的功能:
这个功能就是通过这个函数来实现的,织梦官方给出这个函数的功能是:获得某类目的链接列表 如:类目一>>类目二>> 这样的形式,这个函数的参数是islink 表示返回的列表是否带连接。
这个标签一般用在列表或内容页,标签的使用不是本教程的重点,本教程重点讲解这个功能是如何实现的,标签调用其实是最简单的,但是,功能的实现只有读懂代码才能弄明白。
所在文件:include/typelink.class.php
从这个函数被织梦官方按排到这个类中,就足以看出这个函数的重要程度了。
代码分析开始:
上来就来个条件判断:定义上图中的“主页”链接。
if ( defined('DEDEMOB') ) { $indexpage = "<a href='index.php'>".$this->indexName."</a>"; } else{ $indexpage = "<a href='".$this->indexUrl."'>".$this->indexName."</a>"; }
判断一下是否已经定义了DEDEMOB这个常量,若定义了则使用<a href='index.php'>主页</a>,如果没有定义,则使用<a href='index.php'>主页</a>作为主页链接。默认情况下这个常量"DEDEMOB"是没有定义的,假定我去定义一下,在common.inc.php里面定义如下:define('DEDEMOB', DEDEROOT.'/');
那么,生成一个当前位置链接就是多了个index.php,生成的内容如下图所示:
这是正常的,因为,织梦系统默认就是使用的静态的网页,而定义这个后,就会在“主页”这里面多出一个index.php,这样路径就全错了,css当然,也加载不了,所以,就会出现这样的情况。建议不要定义这个,除非你站作成特殊用途的站,黑认下就是最好的。
"主页" 这个链接已经确定了,接下来的整个条件判断代码就是处理整个“当前位置的”,代码如下:
若当前位置不空且$islink为true,则说明调用的这个函数的值为位置名加链接;若当前位置名不空且$islink的值为false时,说明调用的是当前位置名;若当前的栏目id为0,则表示当前没有栏目且$islink为true,说明虽然,没有栏目但是调用了这个函数,则返回$indexpage(即根目录一个连接或根目录加index.php的一个连接),但是,要指定当前位置名,必须有栏目才行,否则就返回“没指定分类”。
除上面的条件外的其它条件是:如果$islink为true,获取$this->valuePosition 的值。若$this->TypeInfos['reid']的值不为0,说明这个栏目不是顶级栏目,那么,获得这个栏目的链接列表。
然后,组装当前位置:
$this->valuePosition = $indexpage.$this->SplitSymbol.$this->valuePosition;
这才是一个完整的当前位置。然后,返回这个当前位置,并加上一个符号“>”。
若$islink为flase,说明调用这个函数的是要获取当前位置名,也就是上面代码else后面代码处理的部分。直接获取当前栏目名:
$this->valuePositionName = $this->TypeInfos['typename'];
然后,同上面处理一样,若当前栏目是一个子栏目,跟上面一样调用递归逻辑函数$this->LogicGetPostion()函数。然后,返回当前位置名。
实验测试:
光分析代码这样看确实不好理解,尤其是关联到好几个函数,不过没有关系,我们可以实验一下。
在根目录里面建立test.php文件,然后,写上如下代码:
<?php require './include/common.inc.php'; require './include/typelink.class.php'; $tl = new typelink(1); echo $tl->GetPositionLink(true); ?>
在浏览器上面打开这个文件,显示的结果如下所示:
因为,我实例化栏目类的时,传递给这个类的栏目id为1,而栏目id为1的是“网页基础”,所以,当前位置显示的就如上图所示。
现在我把调用的这个函数里面由true改成flase,得到的结果如下图所示。
这就说明了$this->valuePosition是一个完整的链接加链接名,$this->valuePositionName则是只获得的是当前栏目名。现在你对这个函数理解了吧。