Table of Contents
Sticky "do=export_html"
Concept
You can append “do=export_html” or “do=export_xhtml” to a DokuWiki URL to view just the HTML for the page, without the DokuWiki buttons and whatnot. The problem is that if you click a link in the HTML page, it doesn't include the “do=export_html”, so the linked page isn't plain HTML.
With these changes, once you've specified “do=export_html” to any page, clicking the links on that page will keep the “export_html” action.
My original inspiration was to allow extraction of DokuWiki contents as HTML for conversion to PDF, CHM or whatever.
Instructions
In Version 2006-03-09b
Change #1
In inc/parser/xhtml.php, internallink function, around line 530, insert this code before the “output formatted” comment near the end of the function:
global $ACT; if ($ACT == 'export_xhtml') { if (strpos($link['url'],'?')) $link['action']='&do='.$ACT; else $link['action']='?do='.$ACT; } else { $link['action']=''; }
That change adds the “export_xhtml” action to the link “action” field if that was the action by which the current page was loaded. You don't need to handle “export_html” separately, because it gets translated to “export_xhtml” somewhere else.
And this runs for different actions:
if ($ACT == 'export_html' || $ACT == 'export_xhtml' || $ACT == 'export_xhtmlbody') {
Change #2
Further down in xhtml.php, function _formatLink, around line 870, insert the following code just before the “remove double encodings in titles” comment:
$link['url'] = $link['url'].$link['action'];
That change appends the action to every internal link, making it “sticky”.
Change #3
In inc/parserutils.php, p_cached_xhtml function, around line 130, change:
$cache = getCacheName($file.$_SERVER['HTTP_HOST'].$_SERVER['SERVER_PORT'],'.xhtml');
to:
global $ACT; $cache = getCacheName($file.$ACT.$_SERVER['HTTP_HOST'].$_SERVER['SERVER_PORT'],'.xhtml');
or in inc/cache.php change to:
if ($mode == 'html' || $mode == 'xhtml' || $mode == 'xhtmlbody') { parent::cache($file.$mode.$_SERVER['HTTP_HOST'].$_SERVER['SERVER_PORT'],'.'.$mode); } else { parent::cache($file.$_SERVER['HTTP_HOST'].$_SERVER['SERVER_PORT'],'.'.$mode); }
The idea is to use a different cache file for “export_html” vs. not. Without this change I found that once you'd loaded a page with “export_html”, subsequent attempts to load the page normally would result in the HTML-only version.