How to Modify Joomla’s Head Data Through PHP

We are currently developing a small plugin to modify head data prior to serving the page. Although we have done something similar quite a few times before (changing the code inside the head tag), it is the first time that we describe how to do this from an extremely technical perspective.

In short, we use the function setHeadData to do that. The function setHeadData is a method belonging to the JDocument class (it actually belongs to the JDocumentHTML class which extends the JDocument class).

The function setHeadData takes an array as a parameter, and that array consists of one or more of the following items (note that there are other items of lesser importance/usage that we haven’t mentioned below):

  • title: The (browser) title of the current page. title must be a string.
  • description: The meta description of the current page. description must be a string. Make sure that you keep it around 250 characters.

  • stylesheets: The CSS stylesheets to be assigned to the current page. stylesheets can be a string (if there is only one stylesheet to be assigned) or an array (if there are multiple stylesheets to be assigned).

  • scripts: The JavaScript script files to be assigned to the current page. Similarly to stylesheets, scripts can be a string or can be an array.

Here’s a quick example:

$currentDocument = JFactory::getDocument();
$data = array(
	'title' => 'Title of the page',
	'description' => 'Description of the page',
	'stylesheets' => array(
		JURI::root.'plugins/your-plugin-name/css/style1.css',
		JURI::root.'plugins/your-plugin-name/css/style2.css'
	),
	'scripts' => JURI::root.'plugins/your-plugin-name/javascript/script.js');
$currentDocument->setHeadData($data);

The above code must be added in the event onContentBeforeDisplay in your content plugin to have the proper effect.

But, how does one get the head data?

Well, by using the function getHeadData of course. getHeadData is also a method belonging to the JDocument class. The method returns an array mainly containing the browser title, the meta description, and the CSS and JS files included in the head tag. You can use it the following way:

$currentDocument = JFactory::getDocument();
$arrHeadInformation = $currentDocument->getHeadData();

There you have it. Now you know how to set and get head data!

If you need help implementing/customizing the above, then all you need to is to contact us. We can do it for you in very little time and for a very reasonable cost. What are you waiting for? Give us a call or shoot us an email!

No comments yet.

Leave a comment