【问题标题】:Joomla JRoute requiring Itemid, but providing it always is not friendlyJoomla JRoute 需要 Itemid,但始终提供它并不友好
【发布时间】:2014-04-15 04:16:27
【问题描述】:

我可以看到整个互联网上的人们都在谈论这个。 在使用JRoute::_($URL) 时,我们必须先计算Itemid,然后将其附加到输入 URL,如:

JRoute::_('index.php?option=com_abc&view=xyz&id=32'.'&Itemid='.$itemid);

但是,总是希望从给定 URL 的 Joomla 核心路由器中自动计算 Itemid

从今天的 Joomla 1.5 到 3.2,

JRouterSite::_buildSefRoute 或最新的JRouterSite::buildSefRoute

变化不大。

我可以在 /libraries/cms/router/site.php 文件的代码中看到,要构建所需格式的 sef URL,必须在传递的 URL 中包含 Itemid=XXX。否则

JRoute::_('index.php?option=com_abc&view=xyz&id=32');

会生成一个类似于

的URL
`/component/abc/?view=xyz&id=32` 

与预期不同

/our-component/?id=32

其中our-component 是指向菜单项的菜单别名

index.php?option=com_abc&view=xyz

我知道?view=xyz&id=32 的后半部分可以通过每个组件使用自定义 router.php 文件 来处理。但是组件基 URL /component/abc 超出了自定义 router.php 的范围

请有人告诉我这个想法是正确的还是我错过了一些重要的东西。还建议我如何克服这个问题。

【问题讨论】:

  • 没有理由不能让您的自定义 router.php 文件也查看不同的菜单项并确定用于路由该链接的最佳 Itemid。我已经在许多自定义组件中做到了这一点。 JFactory::getApplication()->getMenu() 返回完整的菜单树。
  • 我当然可以(而且我确实)在那里有我的自定义 router.php 文件。但是让 Joomla 知道哪个组件需要路由的组件标识符是由 Joomla 自己设置的,超出了我的 router.php 的范围。我担心/component/abc 部分。此外,我的组件有很多页面,每个页面都链接了不同的菜单项,因此 Itemid

标签: joomla joomla2.5 joomla3.0 joomla3.2 joomla-sef-urls


【解决方案1】:

/component/abc 是由 Joomla 路由生成的。您的组件 router.php 将处理组件处理的参数,因此您的 /our-component/?id=32 可能会转换为 /our-component/my-id32-alias。不希望任何组件都可以调整所有其他组件所基于的基本路由,这就是为什么您只能使用 router.php 构成 URL 的一部分

也许您可以研究如何使用系统插件来增强路由器,但我认为这不是您想要的。

http://docs.joomla.org/J2.5:Creating_a_System_Plugin_to_augment_JRouter

我读了很多遍,但我觉得很难理解。

【讨论】:

  • 唯一更适合的是 JRouter 应该首先尝试自动检测适当的菜单别名或Itemid,并且只有在没有找到时才使用/component/abc 格式。有框架,为什么还要一遍遍写同样的代码来计算Itemid
猜你喜欢
  • 2011-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-16
相关资源
最近更新 更多