【发布时间】: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