Dokuwiki辅助功能开发-命名空间下页面导航

<php>
$pinfo = pageinfo();//获取pageinfo函数返回的当前页面信息数组
$mdir =  dirname($pinfo['filepath']);//获取当前页面所在的目录名
$mdir =  str_replace("/","\\",$mdir);//替换斜杠为反斜杠
$file = scandir($mdir);//获得目录下文件列表//显示
echo " <pre>";
print_r($file);
echo " </pre>";
</php>

返回结果:

Array
([0] => %E4%BA%8C%E6%AC%A1%E5%BC%80%E5%8F%91%E4%B9%8B%E6%96%87%E4%BB%B6%E5%88%97%E8%A1%A8.txt[1] => %E5%90%8E%E5%8F%B0%E8%AE%BE%E7%BD%AE.txt[2] => %E5%91%BD%E5%90%8D%E7%A9%BA%E9%97%B4.txt[3] => %E5%BC%80%E5%8F%91[4] => %E5%BC%95%E7%94%A8%E5%92%8C%E8%84%9A%E6%B3%A8.txt[5] => %E6%8F%92%E4%BB%B6[6] => %E6%8F%92%E4%BB%B6%E6%96%87%E4%BB%B6%E7%BB%93%E6%9E%84.txt[7] => %E6%8F%92%E5%85%A5%E4%BB%A3%E7%A0%81%E5%9D%97.txt[8] => %E6%8F%92%E5%85%A5php%E5%92%8Chtml.txt[9] => %E6%97%B6%E9%97%B4%E8%BD%B4.txt[10] => %E6%9D%83%E9%99%90%E7%AE%A1%E7%90%86.txt[11] => %E6%A8%A1%E6%9D%BF%E5%BC%80%E5%8F%91.txt[12] => %E7%BC%96%E8%BE%91%E5%99%A8%E4%BF%AE%E6%94%B9.txt[13] => .[14] => ..[15] => dokuwiki.txt[16] => vector%E4%B8%BB%E9%A2%98%E8%87%AA%E5%AE%9A%E4%B9%89.txt
)

转码中文显示

$str=implode('^',$file);//将数组转换为字符串,并用^拼接
//显示
echo " <pre>";
print_r(urldecode($str));//显示解码后的字符串
echo " </pre>";

显示结果:

二次开发之文件列表.txt^后台设置.txt^命名空间.txt^开发^引用和脚注.txt^插件^插件文件结构.txt^插入代码块.txt^插入php和html.txt^时间轴.txt^权限管理.txt^模板开发.txt^编辑器修改.txt^.^..^dokuwiki.txt^vector主题自定义.txt

以超链接列表方式显示

//以列表方式显示
echo "<ul>";
foreach($file as $f){$f=str_replace(".txt"," ",$f);//替换掉后缀echo "<li><a href='#'>".urldecode($f)."</a>";
};
echo "</ul>";

//以mlist列表方式显示
echo "<div class='mlist'>aaaa";
foreach($file as $f){$f=str_replace(".txt"," ",$f);//替换掉后缀echo "<a href='#'>".urldecode($f)."</a>";
};
echo "</div>";

生成正确的URL

<php>
$pinfo = pageinfo();//获取pageinfo函数返回的当前页面信息数组
$mdir =  dirname($pinfo['filepath']);//获取当前页面所在的目录名
$mdir =  str_replace("/","\\",$mdir);//替换斜杠为反斜杠
$file = scandir($mdir);//获得目录下文件列表$str=implode('^',$file);
//以列表方式显示
echo "<div class='mlist'>aaaa";$ns = $pinfo['namespace'];//当前页面所在的命名空间
foreach($file as $f){$f=str_replace(".txt"," ",$f);//替换掉后缀$url =  "doku.php?id=".$ns.":".$f;//生成urlecho "<a href='".$url."'>".urldecode($f)."</a>";
};
echo "</div>";
</php>

添加当前页链接突出显示效果

F12查看元素可知,dokuwiki自动给当前页链接外加了一个class="curid"的span标签,而mlist则定义了这一链接的CSS样式。

<php>
$pinfo = pageinfo();//获取pageinfo函数返回的当前页面信息数组
$mdir =  dirname($pinfo['filepath']);//获取当前页面所在的目录名
$mdir =  str_replace("/","\\",$mdir);//替换斜杠为反斜杠
$file = scandir($mdir);//获得目录下文件列表$str=implode('^',$file);
//以mlist列表方式显示
echo "<div class='mlist'>aaaa";$ns = $pinfo['namespace'];//当前页面所在的命名空间
foreach($file as $f){if($f !="." && $f != ".."){//过滤多余的.和..$f=str_replace(".txt"," ",$f);//替换掉后缀$url =  "doku.php?id=".$ns.":".$f;//生成urlif(trim(urldecode($f)) == trim(nPageTitle())){//判断是否为当前页,trim()去除多余的空格echo "<span class='curid'><a href='".$url."'>".urldecode($f)."</a></span>";}else{echo "<a href='".$url."'>".urldecode($f)."</a>";}}};
echo "</div>";function nPageTitle(){//当前页面的标题$pinfo = pageinfo();//获取pageinfo函数返回的当前页面信息数组return $pinfo['meta']['title'];
}
</php>

最终代码:(编写为函数)

<php>
function mlist(){$pinfo = pageinfo();//获取pageinfo函数返回的当前页面信息数组$mdir =  dirname($pinfo['filepath']);//获取当前页面所在的目录名$mdir =  str_replace("/","\\",$mdir);//替换斜杠为反斜杠$file = scandir($mdir);//获得目录下文件列表$str=implode('^',$file);//以mlist列表方式显示$ns = $pinfo['namespace'];//当前页面所在的命名空间echo "<div class='mlist'>".$ns.": ";foreach($file as $f){if($f !="." && $f != ".."){//过滤多余的.和..$f=str_replace(".txt"," ",$f);//替换掉后缀$url =  "doku.php?id=".$ns.":".$f;//生成urlif(trim(urldecode($f)) == trim(nPageTitle())){//判断是否为当前页,trim()去除多余的空格echo "<span class='curid'><a href='".$url."' class='wikilink1'>".urldecode($f)."</a></span>";}else{echo "<a href='".$url."' class='wikilink1'>".urldecode($f)."</a>";}}};echo "</div>";
}
function nPageTitle(){//当前页面的标题$pinfo = pageinfo();//获取pageinfo函数返回的当前页面信息数组return $pinfo['meta']['title'];
}
mlist();
</php>

为了让所有页面都支持这个列表,就要将其引入到dokuwiki系统。

由于使用了vector模板,所以修改wiki/lib/tpl/vector/main.php即可。

在页面中可以加入如下代码手动插入mlist

<php>
mlist();
</php>

创建子目录的mlist

<?php
function mlist(){$pinfo = pageinfo();//获取pageinfo函数返回的当前页面信息数组$mdir =  dirname($pinfo['filepath']);//获取当前页面所在的目录名$mdir =  str_replace("/","\\",$mdir);//替换斜杠为反斜杠$file = scandir($mdir);//获得目录下文件列表$str=implode('^',$file);//以mlist列表方式显示$ns = $pinfo['namespace'];//当前页面所在的命名空间echo "<div class='mlist'>".$ns.": ";//*************处理文件部分 */foreach($file as $f){if(is_file($mdir."\\".$f) && $f !="." && $f != ".."){//过滤多余的.和..$f=str_replace(".txt"," ",$f);//替换掉后缀$url =  "doku.php?id=".$ns.":".$f;//生成urlif(trim(urldecode($f)) == trim(nPageTitle())){//判断是否为当前页,trim()去除多余的空格echo "<span class='curid'><a href='".$url."' class='wikilink1'>".urldecode($f)."</a></span>";}else{echo "<a href='".$url."' class='wikilink1'>".urldecode($f)."</a>";}}};echo "</div>";//*************处理子文件夹部分 */foreach($file as $f){if(is_dir($mdir."\\".$f) && $f !="." && $f != ".."){//过滤多余的.和..sub_mlist($mdir."\\".$f,$f,$ns);//生成子目录的mlist}};
}function sub_mlist($mdir,$d,$ns){//生成单个子目录的mlist$file = scandir($mdir);//获得目录下文件列表$str=implode('^',$file);//以mlist列表方式显示echo "<div class='mlist'>".$ns.":".urldecode($d).": ";//*************处理文件部分 */foreach($file as $f){if(is_file($mdir."\\".$f) && $f !="." && $f != ".."){//过滤多余的.和..$f=str_replace(".txt"," ",$f);//替换掉后缀$url =  "doku.php?id=".$ns.":".urldecode($d).":".$f;//生成urlif(trim(urldecode($f)) == trim(nPageTitle())){//判断是否为当前页,trim()去除多余的空格echo "<span class='curid'><a href='".$url."' class='wikilink1'>".urldecode($f)."</a></span>";}else{echo "<a href='".$url."' class='wikilink1'>".urldecode($f)."</a>";}}};echo "</div>";
}
function nPageTitle(){//当前页面的标题$pinfo = pageinfo();//获取pageinfo函数返回的当前页面信息数组return $pinfo['meta']['title'];
}
?>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ALZrNjEM-1569623063238)(C:\Dokuwiki辅助功能开发.assets\1569614639833.png)]

顶部导航设计

<!-- 自定义顶部导航 2019年2月25日 -->
<style>
.topnav{position: fixed;top: 0;left: 0;right: 0;z-index: 999;
}</style><div class="topnav"><a href="doku.php">首页</a>
<a href="#" onclick="javascript:history.back(-1);">返回</a>
<a href="http://xun69.cn/wiki2/doku.php?id=网址簿:常用工具" class="tools">常用工具</a> |
<a href="http://xun69.cn/wiki2/doku.php?id=网址簿:自建工具" class="itools">自建工具</a> |
<a href="http://xun69.cn/wiki2/doku.php?id=网址簿:在线学习">在线学习</a> |
<a href="http://xun69.cn/wiki2/doku.php?id=网址簿:电影">电影</a> |
<a href="http://xun69.cn/wiki2/doku.php?id=网址簿:音乐">音乐</a> |
<a href="http://xun69.cn/wiki2/doku.php?id=网址簿:素材">素材</a> | <a href="https://blog.csdn.net/" target="_blank">CSDN博客</a> |
<a href="http://xun69.cn/wiki" target="_blank">麻醉维基</a> <a href="http://xun69.cn/wiki2/doku.php?id=wiki:navigation">侧导航</a> |
<a href="http://xun69.cn/wiki2/doku.php?id=about">About Me</a>
</div>

经过一系列调整后:

Dokuwiki辅助功能开发-命名空间下页面导航相关推荐

  1. 【Xamarin 开发 IOS --IOS 页面导航概念Segue】

    Storyboard里面的几种Segue区别及视图的切换:push,modal,popover,replace和custom 一.视图切换类型介绍 在storyboard中,segue有几种不同的类型 ...

  2. 微信小程序开发实战(页面导航)

    @作者 : SYFStrive @博客首页 : HomePage

  3. 【开发调试】谷歌浏览器中调试移动网页和测试网速下页面效果

    .    今天有幸给大家分享一下谷歌浏览器针对移动网页测试的技巧,主要是最近做个微信公共号网站.所以就要对页面测试拉.移动网页我们最长测得就是各种手机大小的页面效果和出现网络问题的效果展示. 今天就简 ...

  4. uniapp开发小程序,引入腾讯兔小巢插件,兔小巢页面导航头部样式错乱问题

    uniapp开发小程序,引入腾讯兔小巢插件,导航头部样式错乱问题 uniapp开发小程序,引入腾讯兔小巢插件,导航头部样式错乱问题 uniapp开发微信小程序,所有页面头部导航都是自定义的,引入腾讯兔 ...

  5. 漂亮大气的html导航页面,jquery+css打造位于网页顶部漂亮黄色下拉导航

    jquery+css打造位于网页顶部漂亮黄色下拉导航 - www.webdm.cn $(document).ready(function(){ $(".btn-slide").cl ...

  6. 使用AJAX做一个页面导航模糊匹配下拉框

    使用AJAX做一个页面导航模糊匹配下拉框 绪论:使用AJAX页面导航模糊匹配下拉框 使用软件: Vs2019 实现方式:三层架构 功能实现是下面的图片 类似就是这样,下面把主样式界面代码放出来 < ...

  7. 《微信小程序开发》 页面导航最强详解 | 如何对小程序页面进行跳转?

    <微信小程序开发> 页面导航最强详解 | 如何对小程序页面进行跳转? 文章目录 <微信小程序开发> 页面导航最强详解 | 如何对小程序页面进行跳转? 一.微信小程序导航 二.命 ...

  8. 【Android UI设计与开发】第11期:顶部标题栏(二)ActionBar实现Tab选项卡和下拉导航列表

    转载请注明出处:http://blog.csdn.net/yangyu20121224/article/details/9050573  在上一篇文章中,我们只是大概的了解了一下关于ActionBar ...

  9. 通过Blazor使用C#开发SPA单页面应用程序(4) - Ant Design

    通过Blazor使用C#开发SPA单页面应用程序(1) 通过Blazor使用C#开发SPA单页面应用程序(2) 通过Blazor使用C#开发SPA单页面应用程序(3) 前面学习了Blazor的特点.环 ...

最新文章

  1. 电子书格式怎么在线转换为PDF格式
  2. 读《程序员的SQL金典》[4]--SQL调优
  3. 用Python实现Gauss-Jordan求逆矩阵
  4. python实现货币转换
  5. SAP CRM One Order框架搜索条件里,posting date下拉菜单的渲染逻辑
  6. [Leedcode][JAVA][第983题][最低票价][动态规划]
  7. Python3 基础学习笔记 C06【用户输入和 while 循环】
  8. Stanford机器学习---第4讲. 神经网络的表示 Neural Networks representation
  9. 华三 h3c 单臂路由配置
  10. iOS setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key 问题
  11. (转)巧用路由限制你的带宽(转自S.N.T安全小组)
  12. 哲理故事三百篇[转]
  13. QWebEngineView崩溃及替代方案
  14. 计算机应用 一级学科,一级学科、二级学科,考研专业哪个包含了计算机考研方向...
  15. too few variables specified 怎么解决
  16. 小白的倔强-NPN和PNP三极管的使用区别以及简单检测
  17. drcom for linux,Ubuntu Linux 6.10下用Dr.COM(drcom-client)接入网络的问题
  18. 高通QCS603/QCS605物联网系统芯片介绍,QCS603/QCS605处理器参数比较
  19. STC用PCA测量脉宽_超快激光脉冲测量和诊断使用自相关仪
  20. 2020长三角区块链应用创新大赛复赛第三场于能链科技成功举办!

热门文章

  1. qt撤销与回退_Git版本控制教程 - Git查阅、撤销修改和版本回退
  2. RDV代码笔记-network.py部分(持续更新)
  3. 全名k歌解析php,全民K歌详情解析API接口
  4. JDK无限制的密码策略
  5. Unity与IOS交互,调用相机相册,兼容ipad
  6. WeifenLuo.WinFormsUI.Docking的使用 z
  7. MP4转文字,视频转文本的方法
  8. SpringMvc拦截器模板,对token优化
  9. 浅议企业6s管理推进的七大阻力
  10. 企业6S现场管理推行成功的关键