您的问题是关于如何将 DokuWiki 的特定页面设置为 landing page,并控制导航元素的显示。
是的,您可以在页面中设置特殊变量,然后在模板的 main.php
中检测这些变量来控制导航的显示。DokuWiki 提供了几种方法来实现这一点:
方法一:使用页面元数据
您可以在页面中添加特殊的元数据标记,然后在模板中检测这些元数据:
- 在您想要作为 landing page 的页面中添加元数据:
~~META:hide_navigation=true~~
- 在模板的
main.php
中,您可以检测这个元数据并据此控制导航的显示:<?php global $ID, $INFO; $meta = p_get_metadata($ID, '', METADATA_RENDER_USING_CACHE); $hide_navigation = $meta['hide_navigation'] ?? false;
if (!$hide_navigation) {
// 显示导航
tpl_include_page('sidebar', true, true);
// 或者其他导航元素
tpl_youarehere();
tpl_breadcrumbs();
}
?>
### 方法二:使用命名空间或页面 ID 判断
您也可以根据页面的 ID 或命名空间来决定是否显示导航:
<?php
global $ID;
// 检查是否是特定页面
if ($ID == 'landing' || $ID == 'start:landing') {
// 这是 landing page,不显示导航
} else {
// 显示导航
tpl_youarehere();
tpl_breadcrumbs();
}
?>
### 方法三:使用自定义模板变量
DokuWiki 的模板系统允许您在页面中设置变量,然后在模板中使用这些变量:
1. 在页面中添加一个特殊的语法标记(需要插件支持):
TEMPLATE_VAR:hide_navigation=true
2. 然后在模板中检测这个变量:
<?php
global $ID;
// 假设您有一个函数来获取模板变量
$template_vars = get_template_vars($ID);
if (!isset($template_vars['hide_navigation']) || $template_vars['hide_navigation'] !== 'true') {
// 显示导航
tpl_youarehere();
}
?>
### 实际实现示例
基于 DokuWiki 的代码,以下是一个更具体的实现方式:
1. 在您的 landing page 页面中添加:
NOTOC
META:hide_navigation=true
2. 在您的模板的 main.php
中修改导航部分:
<?php
global $ID, $INFO;
$meta = p_get_metadata($ID, '', METADATA_RENDER_USING_CACHE);
$hide_navigation = $meta['hide_navigation'] ?? false;
if (!$hide_navigation) {
// 显示面包屑导航
if ($conf['breadcrumbs']) {
echo '<div class="breadcrumbs">';
tpl_breadcrumbs();
echo '</div>';
}
// 显示"您在这里"导航
if ($conf['youarehere']) {
echo '<div class="youarehere">';
tpl_youarehere();
echo '</div>';
}
// 显示侧边栏
echo '<div class="sidebar">';
tpl_include_page('sidebar', true, true);
echo '</div>';
}
?>
这样,当您访问设置了 hide_navigation=true
元数据的页面时,导航元素将不会显示,从而创建一个干净的 landing page。
## Notes
- DokuWiki 的模板系统非常灵活,您可以根据需要修改 main.php
和其他模板文件。
- 使用元数据是最直接的方法,因为 DokuWiki 已经内置了元数据处理功能。
- 如果您需要更复杂的控制,可能需要开发一个简单的插件。
- 请注意,隐藏导航可能会影响用户体验,确保您的 landing page 提供了足够的导航选项或返回主站的链接。
- 您也可以考虑为 landing page 创建一个完全独立的模板,这样可以有更大的自由度。