How to Allow Your Visitors to Switch to a Different Joomla Template from the Frontend

Heads up: To implement the solution in this post, you will need to install Jumi, which is a free Joomla extension that allows you to place PHP code anywhere on your Joomla website.

This past weekend, a client of ours called us and told us that he wanted to place a button on his website that people with disability issues can click on to switch from the main website template to another, much more accessible template. As usual, we immediately obliged!

It wasn’t a hard task as our client expected. All that we needed to add was to create a site-only system plugin with the following PHP code in the onAfterInitialise function:

$session = & JFactory::getSession();
$currentTemplate = $session->get('currentTemplate', '');
$application = JFactory::getApplication();
$jinput = $application->input;
$switchTemplate = $jinput->get('switchTemplate', 'false', 'filter');

if (empty($currentTemplate) && $switchTemplate == 'false'){
	//The user has not tried to change the default template and the default template is the one currently set
	//Do nothing

}
elseif (!empty($currentTemplate) && $switchTemplate == 'true'){
	//The user is trying to switch back to the default template
	$session->set( 'currentTemplate', '' );		
}
elseif ((!empty($currentTemplate) && $switchTemplate == 'false') || (empty($currentTemplate) && $switchTemplate == 'true' )){
	//The user has not tried to change the template but the accessible template is set OR the user
	//has tried to change to the accessible template.
	$db = JFactory::getDbo();
	$sql = "SELECT template, params FROM #__template_styles WHERE template='".$accessible_template."'";
	$template = $db->loadAssoc();
	if (!empty($template)){
		$application->setTemplate($template['template'], (new JRegistry($template['params'])));
		$session->set( 'currentTemplate', $accessible_template );		
	}
}

In short, the above code will check the $_SESSION and the $_GET variables to see if the user has switched (or not) to a different template. It’ll also save the current template used in the $_SESSION using Joomla’s JSession object.

After creating the plugin, all that we needed to do was to create a simple Jumi module to display the button to switch back and forth between the template.

Note: Our code assumes that you’ll only be switching to only one template (and back to the original template). If you want to allow your users to switch to an array of templates, then the code above will need to be substantially changed (you will also need to change the Jumi module). As usual, you can always contact us for help.

Another note: We might, at some point in time in the future, release an advanced plugin that does all the above (and much more). Stay tuned!

If you need help implementing the above, please contact us and we’ll do the implementation for you. Our prices are right, our work is exceptional, and we are the friendliest programmers on this galaxy (assuming, of course, that Earth is the only inhabited planet)!

No comments yet.

Leave a comment