There are several ways to store variables either just for the running execution of the script, or persistently.
In the case where you want to make a variable in a component available to a module, you will use the ''set'' and ''get'' methods of the Application object. You might use the following example to write a shop component and require a module to show related products based on the selected product:
In the component:
$mainframe->set( 'shop.currentProduct', $product );
Then in the module, to retrieve that varible:
$product = $mainframe->get( 'shop.currentProduct' );
if (is_object( $product ))
{
// do something
}
Another example you can use is for a tracking plugin that is triggered late in the execution of the Joomla! script.
In the component:
$mainframe->set( 'tracking.title', $row->title );
In the plugin:
$title = $mainframe->get( 'tracking.title' );
$url = $_SERVER['QUERY_STRING'];
$ip = $_SERVER['REMOTE_ADDR'];
$query = 'INSERT INTO #__tracker' .
' SET ip = ' . $db->Quote( $ip ) .
' url = ' . $db->Quote( url_encode( $url ) .
' title = ' . $db->Quote( $title );
$db = &JFactory::getDBO();
$db->setQuery( $query );
if (!$db->query())
{
JError::raiseWarning( '500', 'A problem occurred' );
return false;
}
To persist the variable in the session, that is, have it available between different pages, you use the ''setUserState'' and ''getUserState'' methods in the Application object, for example:
$cart = &$mainframe->getUserState( 'shop.cart' );
$cart->addProduct( $product );
$mainframe->setUserState( 'shop.cart', $cart );
A final example is where you want to persist a filter on a list screen, for example when you select a category on a list of articles. In this case you would use the ''getUserStateFromRequest'' method in the Application object.
$catid = $mainframe->getUserStateFromRequest( 'com_content.list.catid', 'catid', 0 );
Where:
* The first argument is the label for the variable (anything you like, but a system like ''component_option.view.variable_name'' is useful)
* The second argument is the name of the form field that you used
* The third argument is the default value to set if the variable is not set
This method is a short hand for using a combination of ''getUserState'' and ''setUserState''. Many Administrator components use this technique so there are plenty of real examples to follow.