dokuwiki 裡使用 wikipage 作佈景

:清酒: 其實沒有如標題所說得那麼聳動啦,並不是完全依靠 wikiPage 做佈景,而是透過嵌入 wikiPage 在佈景檔內達到動態修改佈景內容的功能。

雖然 dokuwiki 提供了 p_render 函式可在佈景內執行wiki語法:

php · [高亮] · [原始]

  1. echo p_render(‘xhtml’,p_get_instructions(‘{{NEWPAGE}}’),$info);
echo p_render(\'xhtml\',p_get_instructions(\'{{NEWPAGE}}\'),$info);

{{NEWPAGE}} 是 AddNewPage 提供的 wiki 語法。
{{NEWPAGE}} 會產生一份 NameSpace 列表的下拉選單,旁邊附上一個輸入欄位;選擇新頁面所屬的 NameSpace 並輸入頁面名稱即可開始編輯新頁面。

只是單單利用 p_render 的方式並不能滿足善變的使用者
恩…我承認自己就是那個使用者
幸好還有秘密武器 → p_wiki_xhtml

php · [高亮] · [原始]

  1. print p_wiki_xhtml("sidebar", , false);
print p_wiki_xhtml("sidebar", \'\', false);

p_wiki_xhtml 的功用是在 php 裡嵌入 WikiPage。
以這個範例而言,嵌入的頁面就是網站最上層的 sidebar。

當然也可以依 NameSpace 的不同分別嵌入它們自己的 sidebar …

php · [高亮] · [原始]

  1. function tpl_sidebar() {
  2.     global $ID# ( 1 )
  3.     $sub = substr($ID, 0, strpos($ID, ":"));    # ( 2 )
  4.  
  5.     if (file_exists(wikiFN($ID."/sidebar"))) {  # ( 3 )
  6.         print p_wiki_xhtml($ID."/sidebar", , false);
  7.     } elseif (file_exists(wikiFN($sub."/sidebar"))) {   # (4)
  8.         print p_wiki_xhtml($sub."/sidebar", , false);
  9.     }
  10. }
function tpl_sidebar() {
	global $ID;	# ( 1 )
	$sub = substr($ID, 0, strpos($ID, ":"));	# ( 2 )

	if (file_exists(wikiFN($ID."/sidebar"))) {	# ( 3 )
		print p_wiki_xhtml($ID."/sidebar", \'\', false);
	} elseif (file_exists(wikiFN($sub."/sidebar"))) {	# (4)
		print p_wiki_xhtml($sub."/sidebar", \'\', false);
	}
}
  1. 獲取目前的 NameSpace 路徑。
  2. 找出 NameSpace 的上一層 NameSpace 路徑,為什麼這麼做請見 #4。
  3. 檢查目前的 NameSpace 之下是否有 sidebar 頁面。
  4. 如果根據上面的條件,找不到 sidebar,那就採用其上層 NameSpace 的 sidebar。

註:上面的代碼來自於佈景 mmClean,不過函式有經過濃縮,只留下基本原理。如果懶得動手做佈景的話,mmClean 有提供自訂 topbar 跟 sidebar 的功能。

Leave a Comment