Table of Contents

I use Dokuwiki for this blog (yes, technically it's a blog, not a wiki), as it is easy to setup, requires no SQL database, and LOOKS AWESOME! I wish to thank Andreas Gohr and the DokuWiki Community for their great job!

Installing and configuring DokuWiki

This assumes you have already a running website on apache2 with php5 (www.example.org) and you want a new wiki page at http://www.example.org/my_new_wiki

Your linux distribution may have easy-installable package available, however I'll be installing the most recent version from source. Check http://www.splitbrain.org/projects/dokuwiki to make sure you're downloading the most recent version.

wget http://www.splitbrain.org/_media/projects/dokuwiki/dokuwiki-2010-11-07.tgz
tar -zxvf dokuwiki-2010-11-07.tgz
mv dokuwiki-2010-11-07 <BEGIN GeSHi>my_new_wiki_name<END GeSHi>
cd <BEGIN GeSHi>my_new_wiki_name<END GeSHi>
chown -R <BEGIN GeSHi>www-data<END GeSHi>: .

/* OPTIONAL: # mkdir files ← so you'll have a place to store linked files */ (my apache is running as www-data, check which username your apache is running with the command 'ps auxww|grep apache')

add the folder to your web folder /var/www/www.example.org/my_new_wiki FIXME

Visit the site: http://www.example.org/my_new_wiki click on 'or do you want to run the installer instead' and you will get redirected to the installer. If you the 'chown' command went wrong, you'll see some errors about '… is not writable by DokuWiki. You need to fix the permission settings of this directory!'.

Enter the required details. I made mine a 'Public Wiki' which means only I am allowed to make changes to it, others are free to read. I selected the 'CC Attribution-Noncommercial-Share Alike 3.0 Unported' license.

You'll see the message about the installation being successful, and can continue to your 'start' page.

Remove the install.php file now to prevent unauthorized access (optional):

rm install.php 

Enabling userewrite .htaccess

To get better google coverage, I enabled 'userewrite' (“.htaccess”), to do this click the 'Admin' buttom ⇒ 'Configuration Settings', don't forget to click 'Save'. This results in nicer urls.

cd /var/www/<BEGIN GeSHi>www.example.org<END GeSHi>/<BEGIN GeSHi>my_new_wiki<END GeSHi>/
cp .htaccess.dist .htaccess
nano .htaccess

Uncomment the following lines:

RewriteEngine on
RewriteRule ^_media/(.*)              lib/exe/fetch.php?media=$1  [QSA,L]
RewriteRule ^_detail/(.*)             lib/exe/detail.php?media=$1  [QSA,L]
RewriteRule ^_export/([^/]+)/(.*)     doku.php?do=export_$1&id=$2  [QSA,L]
RewriteRule ^$                        doku.php  [L]
RewriteCond %{REQUEST_FILENAME}       !-f
RewriteCond %{REQUEST_FILENAME}       !-d
RewriteRule (.*)                      doku.php?id=$1  [QSA,L]
RewriteRule ^index.php$               doku.php

Save and exit.

Dokuwiki configuration changes

You can make changes to how DokuWiki works in the configuration manager (Admin → Configuration). I made the following changes:

Future:

Dokuwiki table of contents TOC

On some pages I didn't see the Table of Contents (keywords TOC table of contents tpl_toc), but a quich search told me: “If you have more than three headlines, a table of contents is generated automatically” So I just had to create more headlines.

Clearing the cache of DokuWiki

After changing some templates, .php and .css files, I noticed changes were not activated immediately. Solution: clear the cached pages: “To force recaching of all pages, including page instructions, touch the local configuration file, conf/local.php.”

touch conf/local.php

Installed plugins

http://www.dokuwiki.org/plugins

Popularity Feedback

This is installed by default. Click on 'Popularity Feedback' in the 'Admin' section of DokuWiki, to let the DokuWiki people know how DokuWiki is used.

Commentsrc

To hide some text on my wiki (editorial notes, specific ip addresses, names, etc) I use the dokuwiki commentsrc plugin ( I patched it (by hand) with Kohei MATSUSHITA's notes (didn't get plugin:comment working.)

I have disabled 'view page source'/'export' option in DokuWiki, haven't tested if this plugin is compatible with this option enabled.

  * This is an <BEGIN GeSHi>/*<END GeSHi> entertaining <BEGIN GeSHi>*/<END GeSHi> example

Will show as:

plugin:discussion - allow people to comment on my wiki

http://www.dokuwiki.org/plugin:discussion Installation: Click the 'Admin' button, 'Plugins', paste this URL: http://cloud.github.com/downloads/dokufreaks/plugin-discussion/plugin-discussion.tgz Disabled: allow wiki syntax in comments and enable/disable subscribe to comments

Edit the page where you want to show the 'discussion' box, and add the following to the end of the page (you may change the text):

~~DISCUSSION|<BEGIN GeSHi>Please enter your comments<END GeSHi>~~

Anti spam

15 December 2010: I've noticed spam in the comments on my pages, so I implement a very small 'Turing test' (protection against spam bots), with a 'simple' unix question: “To prove you are human, enter the linux command to list the contents of directories”, I did it this way:

Enable 'addressfield' in the configuration ($conf['plugin']['discussion']['addressfield'] = 1;), then:

nano <BEGIN GeSHi>path_to_DokuWiki<END GeSHi>/lib/plugins/discussion/action.php

Find the line:

if ($address) $head .= ', <span class="adr">'.$address.'</span>';

Change it to:

<BEGIN GeSHi>//<END GeSHi>if ($address) $head .= ', <span class="adr">'.$address.'</span>';

Find the line:

<span><BEGIN GeSHi><?php echo $this->getLang('address') ?><END GeSHi>:</span>

Change it to:

<span><BEGIN GeSHi>To make sure you are human and not a spammer, enter the unix command to list the contents of a directory<END GeSHi>:</span>

Find the line:

if(empty($_REQUEST['name']) or empty($_REQUEST['mail'])) return; // don't add anonymous comments

Change it to:

if(<BEGIN GeSHi>($_REQUEST['address'] != "ls") or <END GeSHi>empty($_REQUEST['name']) or empty($_REQUEST['mail'])) return; // don't add anonymous comments

plugin:metaheaders - putting meta keywords and description in your DokuWiki for SEO

To help search engines (like Google) index your page properly, it is required to make some changes to the html headers. By default(?), DokuWiki disallows search engines indexing your site, by placing a 'noindex,nofollow' tag in the headers.

To edit the headers, we need a plugin that can do this. I've looked at plugin:keywords, but it did only keywords, no description. I'm not fluent in YAML, so plugin:meta_yaml wasn't an option either. Luckily I found plugin:metaheaders which I'm using right now. Install it using the plugin manager link, then:

nano <dokuwiki>/conf/metaheaders.conf.php
<?php
$clear[] = array ( 'name' => 'keywords' );
$headers['meta'][] = array( 'keywords' => '<BEGIN GeSHi>lxc,linux containers,virtualization,virtual machine,vm,guide,manual<END GeSHi>');
 
$clear[] = array ( 'name' => 'description' );
$headers['meta'][] = array( 'description' => '<BEGIN GeSHi>A complete step-by-step guide to setup virtualization on Linux using LXC<END GeSHi>');
 
$clear[] = array ( 'name' => 'robots' );
$headers['meta'][] = array( 'robots' => 'index,follow');
?>

See the DokuWiki SEO article for more hints. Remember to enable 'sitemap' in the configuration manager to further improve your sites visibility to search engines.

/* TODO: add keywords per section/heading, assemble them all to create a keywords header? */

plugin:googleanalytics

Google Analytics helps me gather statistics on my page's visitors, to see how popular my page is, where my visitors come from and which pages attract the most visitors, using which search terms. DokuWiki has a plugin for it, plugin:googleanalytics. After intallation, go to configuration manager and put the google-analytics-ID you got from Google into the right box.

Template modifications

DokuWiki title display

I wasn't content with the way the page title was displayed on my DokuWiki pages, so I searched for a way to change it. Previously, it was like Topic [Wiki Title] I wanted something like Wiki Title [Topic] Except for the first page with the 'Introduction', there the '[Topic]' should be left out the title completely.

In the configuration manager, set 'useheading' to 'Navigation only', this will use the first heading (= first text between ====== and ======) in a page as its name/topic.

In '/lib/tpl/default/main.php', originally there was:

  <title>
    <?php tpl_pagetitle()?>
    [<?php echo strip_tags($conf['title'])?>]
  </title>

The title of my first page is set to the first caption on the page (the stuff between '===== =====, in my case 'Introduction' becauase of the configuration setting 'useheading'='Navigation only'. So I changed the section to:

  <title>
    <?php
  echo strip_tags($conf['title']);
  if (strpos(tpl_pagetitle($id,true),"<BEGIN GeSHi>Introduction<END GeSHi>") === false) {
  echo " [";
  tpl_pagetitle($id,false);
  echo "]";
}
?>
  </title>

And now it works how I want it (… for the moment :) )

Syntax highlighting in <code> sections

Syntax highlighting in <code> </code> sections. Colorize some output in code blocks to make the reader extra aware that the text needs to be edited before use, using a (deprecated…) function of the GeSHi plugin, the default syntax highlighter in DokuWiki); e.g instead of:

nfs server=<NFS_SERVER_IP>

By putting <BEGIN GeSHi> <END GeSHi> around it, I now can do:

nfs server=<BEGIN GeSHi><NFS_SERVER_IP><END GeSHi>

Instad of just using <code>, you MUST use <code conf> ('text', which is the default won't work). TODO: check why <code php> doesn't work just as well. Download conf.php here (rename .phps to .php) and place it in inc/geshi/

The default 'tags' in GeSHi for highlighting something are '<BEGIN GeSHi>' and '<END GeSHi>'. I changed them to something easier: <BEGIN GeSHi> and <END GeSHi> (easy to remember: 'IMPortant'). Change it in inc/geshi.php or download it here, rename & place in /inc:

nano inc/geshi.php
/* The starter for important parts of the source */
define('GESHI_START_IMPORTANT', '<BEGIN GeSHi>');
/* The ender for important parts of the source */
define('GESHI_END_IMPORTANT', '<END GeSHi>');

Enable 'enable_important_blocks':

    var $enable_important_blocks = <BEGIN GeSHi>true<END GeSHi>;

Add a new style to the style.css file or download it:

nano lib/styles/style.css
.code .imp  { color: #FF0000; font-weight: bold; }

You might have to clean the DokuWiki page cache (perhaps even your browsers cache), to make sure .css and .html file are freshly created.

Floating ad/banner in DokuWiki

You can see it in action on this page, it's the 'Do you need help?' banner in the right hand corner.

Currently I have little knowledge of CSS, so excuse my lack of css/html coding skills. The 'floating div'-part was taken from Example 5a at Wickham's XHTML & CSS tutorial on div boxes position and a bit from BrainJar The round corners inspiration came from HTML, JavaScript's and picture tricks, which I by accident stumbled upon.

To make this work, I need something to automatically include my extra html/php/css code in all DokuWiki pages using 'Include Hooks'. I used meta.html and topheader.html (right click to download):

nano lib/tpl/default/meta.html
<style type="text/css">
#fixedtop1 { position: fixed; bottom: 5px; right: 10px; border: 2px solid #005cb9;-moz-border-radius:10px;
-webkit-border-radius:10px; background:#ebebeb; margin-top:5px;margin-bottom:5px;z-index: 50; }
#center250a { width: 230px; margin: 5px; }
</style>
nano lib/tpl/default/topheader.html
<div id="fixedtop1">
<div align=center id="center250a">
<p align="left">
<span style="float:left;width:50px;margin-left: 15px">
<img height=45 width=45 src="<?php echo DOKU_TPL; ?>images/needhelp.png">
</span>
<b>Do you need help?</b><br><br>
We provide affordable commercial support on this topic!<br>
Languages spoken: <img height=12 width=20 src="<?php echo DOKU_TPL; ?>images/nl.png">
<img height=12 width=20 src="<?php echo DOKU_TPL; ?>images/en.png">
<img height=12 width=20 src="<?php echo DOKU_TPL; ?>images/de.png">
<br><center>
Save time and <a href="support">contact us now!</a></center>
</p>
</div>
</div>

I got the language/flag icons (.png) from the Drupal 'language icons' project site, and put them into the right folder:

mv *.png <BEGIN GeSHi>path_to_DokuWiki<END GeSHi>/lib/tpl/default/images/

Notice how I used

<?php echo DOKU_TPL; ?>

in 'topheader.html' to fix the image path.

TODO

/* DokuWiki auteur bedanken: Logitech Harmony One Universal-Fernb?edienung → dokuwiki auteur? http://www.xing.com/profile/Andreas_Gohr

TODO: dokuwiki images If the inserted images don't display in the editor until after the page is displayed you may have a permissions problem with the media files. Add a .htaccess file into (webroot)/data/media/ with the lines order allow,deny allow from all

<dokuwiki>/_media/image.png
mkdir -p <dokuwiki>/_media/

CHECK: < code php >'div' linkt naar http://december.com/html/4/element/div.html

Dokuwiki: folding– → -, “ → `` (fancy) uitzetten -include files for download: fstab, config, vm-template/rootfs/etc/network/interfaces etc ?

*/

/*

mkdir <BEGIN GeSHi>path_to_DokuWiki<END GeSHi>/images</conf>
Copy some image files (.jpg, .gif, .png) there, and now you can use:
<code conf>{{images/<BEGIN GeSHi>imagefilename.extension<END GeSHi>}}

to display the image without having to use the media manager. */ Place image files (.jpg, .gif, .png) in the folder /data/media/ and you can use:

{{<BEGIN GeSHi>imagefilename.extension<END GeSHi>}}

to display the image without having to use the media manager.