Joomla:jroute & 在菜单层次结构中向上导航
Posted
技术标签:
【中文标题】Joomla:jroute & 在菜单层次结构中向上导航【英文标题】:Joomla: jroute & navigating back up in menu hierarchy 【发布时间】:2011-04-02 08:00:55 【问题描述】:我在 Joomla 1.5 站点中有一个简单的菜单层次结构:
[Newsletters] -> [publisher A] -> [Newsletter A1]
-> [Newsletter A2]
-> [publisher B] -> [Newsletter B1]
-> [Newsletter B2]
使用菜单项或面包屑导航此层次结构时,SEF URL 符合预期;
/newsletters/pubA.html
/newsletters/pubA/letterA1.html
/newsletters/pubA/letterA2.html
/newsletters/pubB.html
/newsletters/pubB/letterAB.html
/newsletters/pubB/letterAB.html
但是,当使用页面内的链接导航层次结构时,网址会变得混乱。继续阅读以了解更多详细信息:)
页面由组件生成。我已经实现了一个 JRouter 来生成 SEF URL。启用 SEF 后,我可以使用菜单项和标准面包屑正确导航层次结构。
但是,我还想通过页面本身的链接进行导航(例如,通过链接到发布者页面上的所有发布者简报,或通过从简报页面链接回发布者页面)。从发布者到时事通讯时,这很好用。组件调用
JRoute::_('index.php?option=' . $option . '&view=newsletter&newsletterid=' . $newsletterId );
并且(正确地)生成如下 URL:
/newsletters/pubA/letterA1.html
但是,当用户在时事通讯页面上并想要返回发布商的页面时,就会出现问题。由于某种原因,发布者的别名被添加到 URL 中通讯别名之后,就好像它在层次结构中的通讯下方一样。组件调用
JRoute::_('index.php?option=' . $option . '&view=publisher&publisherid=' . $publisherId );
但是(错误地)生成的 URL 如下:
/newsletters/pubA/letterA1/pubA.html
如果我再次从上述 URL 导航到时事通讯,则 URL 变为
/newsletters/pubA/letterA1/letterA1.html
/newsletters/pubA/letterA1/pubA.html
/newsletters/pubA/letterA1/letterA1.html
/newsletters/pubA/letterA1/pubA.html
(即,它不会比一个或两个“错误”段更深。)
另外,请注意导航确实起作用(意思是打开了正确的页面)——只是看起来很奇怪的 URL。
我不知道如何生成预期的 URL,如顶部所示;似乎没有办法指定“第一”段应该是“相对于什么”。我应该以某种方式利用 JSite::getRouter() 吗?
路由器代码非常简单。这是我第一次编写路由器,所以我可能会搞砸一些事情。我确实觉得 ParseRoute 只被一个段调用过。
function ComponentBuildRoute(&$query)
$segments = array();
if (isset($query['view']))
if (isset($query['newsletterid']))
$alias = figure out newsletter alias from newsletter id
$segments[] = $alias;
unset($query['newsletterid']);
else if (isset($query['publisherid']))
$alias = figure out publisher alias from publisher id
$segments[] = $alias;
unset($query['publisherid']);
unset($query['view']);
return $segments;
function ComponentParseRoute($segments)
$vars = array();
$id = try to retrieve newsletter id matching alias in $segments[0]
if (!empty($id))
$vars['view'] = 'newsletter';
$vars['newsletterid'] = $id;
return $vars;
$id = try to retrieve publisher id matching alias in $segments[0]
if (!empty($id))
$vars['view'] = 'publisher';
$vars['publisherid'] = $id;
return $vars;
return $vars;
我不想使用绝对 URL,因为发布者的菜单项位于时事通讯菜单下...显然必须有一种方法可以做到这一点,因为菜单项和面包屑模块都想出来了...
谢谢
【问题讨论】:
您应该包括(部分)您的路由器代码。这是此错误的最可能来源。 【参考方案1】:您的 ComponentBuildRoute 有问题。在你处理publisherid的else if块中,你取消设置newsletterid。我不确定这是否是问题所在,但解决它是解决此问题的第一步。
【讨论】:
谢谢——这只是在这里编写代码时的一个错字(我现在已经修复了)。实际代码正确地取消了 publisherid以上是关于Joomla:jroute & 在菜单层次结构中向上导航的主要内容,如果未能解决你的问题,请参考以下文章