Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Joomla 2.5.6中,Itemid用于标记活动菜单项的位置?_Joomla_Joomla2.5 - Fatal编程技术网

在Joomla 2.5.6中,Itemid用于标记活动菜单项的位置?

在Joomla 2.5.6中,Itemid用于标记活动菜单项的位置?,joomla,joomla2.5,Joomla,Joomla2.5,有谁能帮助我了解JoomlaItemid参数最终成为突出显示菜单项的流程吗 我在Joomla中嵌入了一个第三方应用程序,并临时更改了应用程序中的php环境 我能够获得joomla html并通过替换令牌插入第三方html 简化代码: if ($_SERVER['REQUEST_METHOD'] == 'GET' ) { $_SERVER['REQUEST_METHOD'] = ''; } $_SERVER['REQUEST_URI'] = '/joomla/index.php?view=

有谁能帮助我了解Joomla
Itemid
参数最终成为突出显示菜单项的流程吗

我在Joomla中嵌入了一个第三方应用程序,并临时更改了应用程序中的php环境

我能够获得joomla html并通过替换令牌插入第三方html

简化代码:

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);
在v1.5.x中,ID为103的菜单项正确高亮显示,但在v2.5.6中,它没有正确高亮显示,
Home
项始终高亮显示。我认为它曾经在v1.6.x和2.5.x的早期版本中被正确地突出显示,但不确定

我想知道流程是如何流动的(在这里设置的),这样我就可以看到我需要做哪些调整


删除了错误信息

查看以下文件

检查

/modules/mod_menu/mod_menu.php

文件,您将看到两个函数被称为“getActive”和“getDefault” 可以在下面的文件中找到

/libraries/joomla/application/menu.php


我认为现在可以很容易地定制它了

我不完全理解面包屑部分,但我通过编辑我的组件的controller.php使其工作,如下所示:

// 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
{
}

谢谢大姚!你用这个拯救了我的一天:

// force highlight the external url menu item
$Itemid = JRequest::getVar('Itemid');
$menu = JSite::getMenu();
$menu->setActive($Itemid);

突出显示菜单项取决于模块的类型意味着它取决于在模块中编写的代码。例如,在默认的beez20模板中,使用名为“current”和“active”的CSS类突出显示菜单项代码是在modules/mod_menu/tmpl/default.php中编写的,这取决于项目=
$active_id
。我正在寻找设置$active_id的流程。谢谢。这将是有帮助的,但我希望能够通过如何将Itemid参数设置为活动菜单项来完成这个过程。函数是在设置活动项后如何检索活动项,而我想执行
设置过程,也就是说。setActive()methid在/libraries/joomla/application/menu.php中,您可以自定义它,随时调用它,但当前在模块中它没有被调用。这就是为什么菜单项即使打开也没有高亮显示的原因。在调用$menu->getActive()之前,您需要调用$menu->setActive($id)setActive方法中的$id可以使用$id=JRequest::getVar('itemid')获取;我懂了。我想接下来的问题是将代码放在哪里,以便在组件中以这种方式进行设置。这种方法的一个问题是,当我调用
http://host.com/joomla/index.php?view=mycom&option=com_mycom&Itemid=103
我直接正确突出显示菜单项。当我试图通过改变环境来欺骗它时,它就是不起作用。这就是为什么我要遵循请求的流程。如果一切都失败了,我可以使用你的旁路/黑客。谢谢你留下来。