A quick way to do a Php wiki with Markdown and Git
I received many email, comments and feedbacks about the need of a central Wiki for the universe of Pepper&Carrot named Hereva. That's why I decided to add a collaborative Wiki to the website. You can find it on the top categorie. That's the start of a new adventure, and I hope I'll use it to add more details, and illustrate it step by step. Corrections and proof-reading needed :)
Technical details:
The wiki is manually sync with the Github wiki . Github wiki is a git repository with markdown files. Here is a screenshot of the folder with the markdown files. It's easy to clone or to edit online with a Github account.
git clone https://github.com/Deevad/peppercarrot.wiki.git
To translate the markdown files to Html, I used an open library named parsedown.php. I used the static pages of Pluxml ( the CMS I use for running Pepper&Carrot ) to display the markdown pages. I also generated a menu with PHP to wrap-up everything. A Wiki is born!
PHP code for Pluxml
Here is my PHP code to include a markdown page inside a Pluxml static page ( static8/wiki in my case ), I share it because I didn't found anything like this on internet, and I had to do it from scratch. I guess a lot of project would like to have this type of sync between website and a markdown wiki and this code should be pretty standard and easy to tweak because I fully commented it : Loading the Markdown pages :
<?php
// get variable 'page' from URL
$wikipage = htmlspecialchars($_GET["page"]);
// Security, remove all special characters except A-Z, a-z, 0-9, dots, hyphens, underscore before interpreting something.
$wikipage = preg_replace('/[^A-Za-z0-9\._-]/', '', $wikipage);
if(isset($_GET['page']))
{
// page found
}else{
// no page found, we propose fallback homepage Home.md
$wikipage = "Home";
}
// add library to parse markdown Github files
include(parsedown.php');
// display content main page
$contents = file_get_contents('path/to/your/folder/'. $wikipage .'.md');
$Parsedown = new Parsedown();
echo $Parsedown->text($contents);
?>
Generating the Menu buttons :
<?php
// dynamic menu generation from a folder
# we scan all markdown in folder
$search = glob("path/to/your/folder/*.md");
# we loop on found files
if (!empty($search)){
foreach ($search as $wikifile) {
// clean path to filename only
$wikifile = basename($wikifile);
// _Footer and _Sidebar are special page, they start with '_' exclude them
if (substr($wikifile, 0, 1) === '_') {
// page starting with '_' found, do nothing.
} else {
// Check if the page is Home, we don't display it here to keep it hardcoded on the top
if ($wikifile === 'Home.md') {
// Home.md found, do nothing
} else {
// Finally! we have a valid markdown page
// Clean filename to get only name without extension :
$wikifile = preg_replace('/\\.[^.\\s]{2,4}$/', '', $wikifile);
// Is there a chance we display the page of this button now? time to set status actif!
if ($wikifile === $wikipage) {
}
// Ok, we have all, diplay this button now :
echo '<a class="button" href="https://www.davidrevoy.com/';
$plxShow->urlRewrite('?static8/wiki&page='.$wikifile);
echo '" title="">'.$wikifile.'</a>';
}
}
}
}
?>
I hope it will be useful and you'll enjoy the Wiki !