前言
近期楼主在朋友推荐下知道了YQDOC这个神奇的开源文档站.欣喜之余,用起来着实有几分刺挠。这个开源的文档站潜力不小,目前得知作者已经停止维护了,所以没有写BUG能力的朋友建议还是绕行选择其他平台…
问题现象:
这个问题是我在语雀平台上编辑完毕文档目录以后,回到自己的文档站上发现的.
故障表现为点击首页内的知识库连接,随后302无限跳转问题.
该问题是由于目录当中新建了一个分组导致的,
经过强迫症的纠结,我终于找到了这个问题的具体原因及解决办法
故障原因:
我在语雀上编辑目录时,新建了一个分类并将文档拖拽到该目录当中.
这波操作改变了目录的顺序,所以数据结构也跟着变了起来.
经过了一顿神操作,终于定位到了问题所在位置,来看源代码是酱样事儿写的:
//XSS过滤
$name = $this->security->xss_clean($name);
$slug = $this->security->xss_clean($slug);
if( ($slug == '') OR ( ! isset($slug)) ) {
$toc_tmp = $this->get_data->toc($name);
$slug = $toc_tmp[0]->slug;
$url = current_url();
$url = $url.'/'.$slug;
header("location: {$url}");
}
这个文件位于:{Yqdoc}\application\controllers\Post.php
可以看到这里就只是简单粗暴的用了个0来引用第一个资源,然而这个时候获取到的$slug值为#,也就是分组的值.正是这个#导致了页面无限302跳转的问题.
(可能当时作者开发的时候,语雀平台还没有这么多目录分类吧,所以作者没写???..)
解决方案:
我将原来简单粗暴的部分用foreach遍历了一下,找到第一个$slug值不为#的跳出.然后在外部又加了一个判断最终是否获取到了正确的slug值.这里简单的放下代码,
//注释掉之前的代码
//$slug = $toc_tmp[0]->slug;
foreach ($toc_tmp as $toc_val){
$slug = $toc_val->slug;
if($slug === "#"){
//die ("<div>RunTrace:".__FILE__." Line:".__LINE__."</div><div>Error:slug===#</div>");
continue;
}else{
break;
}
}
if($slug === "#"){
die ("<div>RunTrace:".__FILE__." Line:".__LINE__."</div><div>错误:该知识库下没有文档无法显示!</div>");
}
然而…
事情并没有那么简单
虽然目前页面无限302的问题解决了,但是衍生的各种小问题也是醉了…
默认页面中左侧目录的选中状态
经过这样处理过的页面,左侧文档目录是不会显示点击后的绿色状态的
虽然看到代码下方已经写了header重定向但是地址栏的地址还是没跟着变,这里实测将下面的中括号去掉就好了
同样的我又测试了连接的目录类型,不出意外的,它果然又失控了…
行吧行吧行吧!!!下次用到的时候再搞吧!!如果有搞定的童鞋记得跟我说一下!
也可能哪天有空了再搞,搞好了补发.
欢迎入坑