“How do I get MetaMod to detect when I am on a certain Joomla page?”
... this is one of the most frequently asked questions about MetaMod.
MetaMod 2.0 introduces a new debug mode called Advanced, to help you to design rules that target just about any page on your site.
With Advanced Debug mode turned on in MetaMod, and the MetaMod set to display on ALL pages, navigate to any page on the front end of your site. You will see a new block of information in your MetaMod, as shown.
PHP code is automatically generated. The code in the block can help you to identify an exact page on your site, as it creates a rule that utilises any $_GET and $_POST variables that were sent from the browser and/or added by Joomla after the request was received.
Using the Page Identification Information
If you want modules to appear on every page except the one you have just identified, do the following:
Here’s a finished example. In this example, module 123 will be displayed on all pages except the WebLinks “categories” page:
if ( ! (
There are many more ways you might want to manipulate this — for example you might wish to display one module on the WebLinks categories page but a different one on the individual category pages. By viewing the Page Identification information when on a category page, we see the following structure:
if ( $option == 'com_weblinks' and $view == 'category' and $id == '2:om-websites' and $Itemid == '155' ) return XXX;
From that we can see that $view changes to “category” when we’re on that page.
Our finished rule for including a module on the WebLinks “Categories” page, but a different one on the individual “category” pages would be as follows:
Due to the complexity of Joomla’s request system, the rules shown may contain extra variables or information that are unnecessary or incorrect, but MetaMod does its best to identify and warn you of these.
For example, $Itemid identifies the exact menu item that was clicked on to get to the page you are on. You may want to leave this out, so that the rule will be triggered no matter which menu item was clicked on.
Also, the frontpage component sometimes adds a parameter called “limit” which identifies the maximum total number of items to be displayed on the frontpage. There’s no need to include this in the rule, as the front page can be detected using the “option”, “view”, and optionally “Itemid” alone (although you don’t even need the Itemid, just the option and view).
For the frontpage shown on the right, you could simply use this rule:
if ($option == 'com_content' and $view == 'frontpage') return 101;
When MetaMod can identify which parameters may be optional, it displays /*!*/ at the end of a line, as shown:
if ( $option == 'com_content' and $view == 'frontpage' and $Itemid == '1' and JRequest::getVar('limit') == '9' /*!*/ ) return XXX; /* replace XXX with the module ID or position to display */
The detection isn’t perfect, particular if the page was reached as a result of a POST request (e.g. from a form). However for many other types of pages it is quite accurate, and you should feel free to remove those lines after pasting the rule into the PHP box in MetaMod. Experiment.
|Last Updated on Monday, 12 October 2009 04:21|