Search code examples
phpjoomlajoomla2.5

Where is Itemid used to flag active menu item in Joomla 2.5.6?


Can anyone please help me with the process flow through which the Joomla Itemid parameter ends up being the highlighted menu item?

I have embedded a 3rd party application in Joomla and by temporarily changing the php environment within the application.

I am able to get joomla html and insert the 3rd party html by replacing a token.

Simplified Code:

if ($_SERVER['REQUEST_METHOD'] == 'GET' ) {
    $_SERVER['REQUEST_METHOD'] = '';
}
$_SERVER['REQUEST_URI'] = '/joomla/index.php?view=mycom&option=com_mycom&Itemid=103';
$_SERVER['SCRIPT_NAME'] = $_SERVER['PHP_SELF'] = '/joomla/index.php';
$_SERVER['QUERY_STRING'] = 'view=mycom&option=com_mycom&Itemid=103';

ob_start();
require_once '/joomla/index.php';
$joomlaHTML = ob_get_clean();
echo str_replace($replacementToken, $thirdPartyHTML, $joomlaHTML);

In v1.5.x, the menu item with ID 103 is properly highlighted but in v2.5.6, it isn't and the Home item is always highlighted. I think it used to be highlighted correctly in v1.6.x and earlier versions of 2.5.x as well but not sure.

I wanted to find how the process flows (where this is set) so I can see what tweaks I need to make.

DELETED WRONG INFO


Solution

  • I don't fully understand the breadcrumb part, but I managed to get it working by editing my component's controller.php to read:

    // No direct access to this file
    defined('_JEXEC') or die('Restricted access');
    
    // force highlight the external url menu item
    $Itemid = JRequest::getVar('Itemid');
    $menu = JSite::getMenu();
    $menu->setActive($Itemid);
    
    // force fix the breadcrumb
    $app = JFactory::getApplication('site');    
    $pathway =& $app->getPathway();
    $bcrumbs = &JPathway::getInstance('site');
    
    // import Joomla controller library
    jimport('joomla.application.component.controller');
    
    /**
     * MyCom Component Controller
     */
    class MyComController extends JController
    {
    }