To use this website fully, you first need to accept the use of cookies. By agreeing to the use of cookies you consent to the use of functional cookies. For more information read this page.

Dash Content ManagerThe all-in-one content management system

Setup difficulty: moderate

Dash CM is the content management system designed from the ground up without all the chrome.

It is with great sadness that I have to say that Dash is no longer maintained. Whilst the current version works and is still in active use, it is no longer updated with new features or bug fixes.


You can read more about Dash and why you would want it.


Welcome to the page on Dash. You can find my Dash based blog on my blog, but also with my articles and reviews as well.

There is now a deployed and open use version of Dash here.

Dash is an open-source blogging system that I have developed. Its purpose is to encourage the users to integrate a blog into their own website and keep their own styles. This is something that other blogging systems like WordPress struggle with.

A 280 post Dash blog only weighs in at 0.43MB of MySQL storage whereas a single page WordPress website comes in at a whopping 2.43MB. This is just a small point to make since no real strategies for analysing the difference here have been used, they have simply been compared at the point of installation and inserting 1 post into WordPress and 280 posts into Dash.

The Dash project prides itself on simplicity and compactness by developing a lightweight content management mechanism that has been designed from the ground up with simple concepts in a framework that makes it efficient and well-designed.

To get started with Dash, all that is needed is a website and a style. The stylesheet for Dash is then downloaded and it's up to you how you style it.

Built-in features

Dash provides a very flexible content management system that has many different modes. For the majority, the most used is the default mode known as Blog Mode.

Introduction Mode

As of May 2016, Introduction Mode is included in all installations of Dash. This is perhaps the most confusing part of the blogging system, but it has been implemented well enough that all you need to do is provide a styling for posts that match the criteria of .blog_post.introduction.

Introduction Mode is a clever way of transforming the Dash blogging system into an allround content management system. By setting the data file DASH_MODE constant to 2, posts will display an introduction instead of the full post unless they are clicked on. When they are clicked on, the full post will appear and users can view these posts as if they were just articles on the website. Take a look at how my articles/reviews and blog posts differ.

Adding features

With the sole aim of Dash being to integrate well within any website, this section describes what you can set to make it fit in with your website.

Responsibilities of the developer using Dash

If you are deploying a Dash blog on to your webpage, you should note that Dash does not provide:

  • A search box

These features must be added directly to the webpage, but they are actually really easy to do.


The whole blog system is unstyled. This is intentional. You may do what you like with it. You can however change the HTML or CSS to style it. If you change the HTML to fit your website do it through the templates. If you change your CSS just look at how it created using the HTML templates.

DIY Extra features

The following features are not included by default, but I use them on my own blog so I thought I might as well share them here.

Highlight searches

New versions of Dash from 2.1.10 will include highlighting searches by default.

This very specific little feature is very useful. This feature will highlight each word in the text when you search for it.

This works on the concept of the search query existing, then exporting a JavaScript array ([]) and then inserting into a highlight function.

Let's look at how this is done:

	$queries = $Dash->GenerateSearchArray($_GET['qry']);
	$qry = "[";
	$pos = 0;
	foreach($queries as $query){
		if($pos != 0){
			$out .= ', ';
		$out .= "'".$query."'";
	$out .= "]";

	echo '<script> jQuery(window).ready(function(){multi_highlight(".blog_post .content *, .blog_post .tags *", '.$out.', "highlighted");});</script>';

Most crucially is giving the GenerateSearchArray function the correct parameters. It will transform a single string, separated by spaces and joined by words in quotation marks, and return them as an array.

No actual multi_highlight function has been provided, but you could consider something like this for that exact purpose. If you are not competent with jQuery, or like me you do not want to have another jQuery plugin on your website, here is a small wrapper:

function multi_highlight(container, arr, className){
		$(container).highlight(this, className);

Using this little wrapper function will also add the multi_highlight function to your script and will enable the previous PHP function to work right out of the box.

The search box

The search box was originally included as part of version 1.0. However, as the search box was fairly specific to my website, I chose to leave this whole feature up to you. If you download something such as the Start Bootstrap Blog Post theme as I use on the ClickIt™ website, it's very easy to setup a search form from the right hand side sidebar.

To add a search box, simply add an input element as below:

<form method="get">
	<input name="qry"/>

Ajax page loading

All new versions of Dash support Ajax by simply wrapping the posts in an Ajax loader:

<div class='ajax_loader'>
  echo DashContentManager::GenerateContent($results);

Sample blog PHP code

The following is code from my own blog index.php file. This will generate everything needed since Dash does all of the rest:

//Required dash.php file.
require_once 'dash/dash.php';

//Generate all the posts but only as an object, not HTML yet. Generate page meta data.
$results = DashContentManager::GetContent();
$meta = DashContentManager::GetBlogMetaData($results);

//If the user has been searching for something
$qry = "";
	$qry = $_GET['qry'];

//An example that uses variables before including the head.php file which will use these variables to generate the page
$title = $meta->GetTitle();
$desc = $meta->GetDescription());
$keywords = $meta->GetKeywords();;
if($meta->GetBannerImage(); != null){
	$banner_image = $meta->GetBannerImage();

//Added to the end of the page after the main page has loaded
$ending = '<script>WhenLoaded(function(){'.$meta->GetScripts().'});</script>';
$ending .= '<script src="'.DashData::GetData('BLOG_ROOT_PATH').'/dash/dash.js"></script>';

include $_SERVER['DOCUMENT_ROOT'].'/assets/head.php';

echo '<input type="text" value="'<?php echo $qry;?>'" name="qry" />'

echo DashContentManager::GenerateContent($results);

include $_SERVER['DOCUMENT_ROOT'].'/assets/foot.php';


Known bugs

Just as with ZPE, I have chosen to record all known bugs here:

The following list is a list of known bugs in the latest version. Fixes are currently being looked at. The bugs with an exclamation mark (!) after the number are priority bugs. I will leave all bugs from version 2.3 in this list and update them as I or someone else manages to fix them.

Bug number Description Fixed
#1! Installer does not configure all settings with defaults 2017-05-17

Dash 2.0

Part of my commitment to Dash is the constant updating of features to ensure both stability and security. As part of this, I need to ensure that Dash is developed very coherently.

As of the first versions of Dash, my code is very coherently written but unfortunately is not written well enough to be designed for upgrades and updates.

Dash 2.0 aims to turn Dash from its current static singleton design to a more object-oriented, inheritance-based content manager. It also aims to allow multiple blogs or contents with one installation as the current one does but with more ease.

Further to this, Dash 2.0 intends to make installation even easier.

I currently do not know when I will be able to work on it but hopefully soon.