seo - Joomla:在菜单层次结构中jroute和导航备份

标签 seo menu joomla components hierarchy

我在 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

但是,当使用页面内的链接在层次结构中导航时,url 会变得困惑。继续阅读以获取更多详细信息:)

页面由组件生成。我已经实现了一个 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,因为发布者的菜单项位于时事通讯菜单下......显然必须有一种方法可以做到这一点,因为菜单项和面包屑模块​​都能解决这个问题......

谢谢

最佳答案

您的 ComponentBuildRoute 有问题。在您处理 publisherid 的 else if block 中,您取消了 newsletterid。我不确定这是否是问题所在,但修复它是解决此问题的第一步。

关于seo - Joomla:在菜单层次结构中jroute和导航备份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3542519/

相关文章:

ajax - 如何使 SPA SEO 可抓取?

ajax - SEO:在 HREF 中使用#hash 链接还是为 AJAX 链接使用普通链接?

php - 如何制作由 Google 索引为静态页面的 PHP/Cakephp 数据库驱动页面

php - 内容背后的wordpress网站菜单

joomla - 向 Joomla 1.7 com_content 添加新的图像字段

php - Xcode 4.1 iOS 引用Joomla generated Database via PHP

Yii - 从数据库生成页面元信息

linux - Linux 上的菜单和子菜单脚本

css - CSS 菜单上的额外间距

php - Joomla密码被破解