DokuWiki 在模版中包含页面渲染输出

核心问题:在模板中包含页面渲染输出

用户最初询问如何在 DokuWiki 模板代码中引用包含一个页面的渲染输出 HTML。答案是使用 tpl_include_page() 函数 ,该函数内部调用 p_wiki_xhtml() 来获取页面的 HTML 渲染输出。

页面隐藏机制

用户希望被包含的页面对用户隐藏但仍可被包含。DokuWiki 通过 isHiddenPage() 函数实现页面隐藏 。隐藏页面在搜索、页面列表、命名空间浏览等地方会被过滤掉,但 tpl_include_page() 函数不检查隐藏状态,只检查 ACL 权限。

设置页面隐藏的方法

页面隐藏通过配置文件中的 $conf['hidepages'] 设置实现 。这是一个正则表达式,用于匹配需要隐藏的页面 ID。例如:

$conf['hidepages'] = '(hidden|private|template):.*';

p_wiki_xhtml 函数的使用场景

p_wiki_xhtml 是 DokuWiki 将 wiki 语法转换为 XHTML 的核心函数 parserutils.php:79-112 ,主要使用场景包括:

  1. 模板系统:在 tpl_include_page() 中使用
  2. 远程 API:在 getPageHTML() 方法中使用 ApiCore.php:435
  3. 页面导出:在导出功能中使用 Export.php:79
  4. RSS/Atom 订阅源:在 Feed 系统中使用 FeedPageProcessor.php:67-69

在语法插件中的使用

p_wiki_xhtml 可以在语法插件中使用。插件还可以使用 render_text() 方法 来渲染文本片段。

文本渲染 vs cdata 方式的区别

渲染文本片段

使用 p_render() + p_get_instructions() 会完整解析 wiki 语法并转换为 HTML。

cdata 方式

cdata() 方法只是简单地转义 HTML 实体 xhtml.php:293-296 ,不进行任何 wiki 语法解析。

解析和渲染的工作机制

加粗语法的处理发生在解析阶段,而不是在 cdata() 调用时。当解析器遇到 **粗体** 语法时,会生成指令序列:strong_opencdata(文本内容)→ strong_close

nestingTag 的使用

nestingTag 是处理嵌套格式化标签的辅助方法 handler.php:251-264 ,用于处理所有支持嵌套的文本格式化语法,包括:

  • 粗体(strong) handler.php:411-415
  • 斜体(emphasis) handler.php:423-427
  • 下划线(underline) handler.php:435-439
  • 等宽字体(monospace) handler.php:447-451
  • 上标(superscript) handler.php:471-475
  • 下标(subscript) handler.php:459-463
  • 删除线(deleted) handler.php:483-487

这个方法统一了嵌套格式化标签的处理模式,避免了重复代码,确保渲染器能够正确处理嵌套的格式化效果。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇