2015-10-16 25 views
1

上下文:我在Symfony2中构建网站的博客部分。Php - 链接特定评论的网址结构

问题: 哪个链接新闻中的特定评论的最佳方式是?我应该如何定义路线结构?

例子:

单新闻网址:

example.com/news/{news_id} 

单新闻+评论URL:

example.com/news/{news_id}/comment/{comment_id} 
or 
example.com/news/{news_id}#comment-{comment_id} 
or 
example.com/news/{news_id}?comment={comment_id} 

这些都只是一些建议...

非常重要:
我需要同时使用news_id和com控制器内的ment_id。他们需要可检索/可用。

回答

2

建议链接的结构将有不同的结果,并且在所有情况下,您的comment_id变量都不会用于您的脚本。

对新闻页面有重要影响的是他们会对SEO产生不同的影响。

url的前两个变体。

示例。COM /新闻/ {} news_id /评论/ {} COMMENT_ID

example.com/news/{news_id}?comment={comment_id}

  • commment_idWILL在提供您的脚本。 symfony会传递给控制器​​或者,你将能够从Request对象得到它(或从$ _GET变量 - 但不这样做)
  • 浏览器将不会
  • 不放心不会重复内容如果您不为同一页面创建两个路由。
  • 从SEO的角度来看,您正在为每条评论创建一个单独的页面(我知道您不是),这就是谷歌除了从该网址结构中除外的方式。为了避免重复的内容只是添加规范链接元素头指向根URL <link rel="canonical" href="example.com/news/{news_id}" />

包括hashtag网址差异

example.com/news/{news_id}#comment-{comment_id}

  • comment_id将不在脚本中使用。 #之后的所有内容都是由浏览器直接处理的,它根本不会将其发送到服务器。该COMMENT_ID价值WILL仍然可以由JavaScript(这是计算器是怎么做的)
  • 浏览器WILL尝试移动(滚动)到HTML的一部分,其中#后的密钥被用作ID ..例如。 <div id="comment_id-123">。如果您的标记中没有包含ID的元素,它将保持在最前面。

解决方案

根据您不想单独的页面为每个评论的假设,而你只需要评论的分页的COMMENT_ID。

正确的解决方案是使用URL的#变体。

  • 负载只是news_id
  • 后,页面加载的页面,做一个Ajax调用与COMMENT_ID参数征求意见,或第1页,如果没有参数。
  • 用返回的关于页面的信息等来更改注释部分。
  • 添加装载器映像,因此用户将知道发生了什么,因为这会增加UX。

更多SEO合适的替代

如果你想更好的搜索引擎优化,更适合的网址是不是IDS,但蛞蝓,也没有多余的话。我个人建议是:

example.com/n/{news_slug}#{comment_title_slug}-{comment_id} 
// would become something like1 
example.com/n/answer-to-life-is-awesome#yeah-it-was-a-great-book-5435335435 

如果你能处理解析和DB查询,也可能是还没有/ n的前缀。

+0

很好的回答!我得出了相同的结论。看看我昨天写给A.L回答的评论。我也看着SEO和slu。。这个答案可以帮助其他用户(避免在黑暗中进行广泛的研究)。感谢您的时间 –

-1

我相信更好的方法是使用#comment- {comment_id},因为其他2个URL可能导致的duplicate URLs问题。

+0

在这里它们也使用井号标签#。现在我需要发现如何在控制器中检索/解析与hashtag一起提供的信息。任何建议? –

+0

@IgorCarmagna标签?这些是[主播](http://www.w3.org/TR/html401/struct/links.html#h-12.2.1)。 –

+1

不知道#comment- {comment_id}如何解决重复问题?或者其他两个如何导致这个问题的“重复问题” – wonde

1

你混合两个不同的概念:

链接

两个以下链接进行相同的参数,新闻和评论的ID:

example.com/news/{news_id}/comment/{comment_id} 
or 
example.com/news/{news_id}?comment={comment_id} 

浏览器中打开这些网址不会滚动页面

链接锚

此以下链接只有一个参数,消息ID,它使用一个anchor

example.com/news/{news_id}#comment-{comment_id} 

浏览器中打开该网址将滚动到锚

因此,它取决于您的需要,如果您希望访问者的浏览器滚动到评论,请使用锚点(也可以使用Javascript)。

以下是有效的锚:

<div id="comment-42">...</div> 
or 
<p><a href="#" name="comment-42">...</a></p> 

这里是通往这个答案的链接:https://stackoverflow.com/questions/33176341/php-url-structure-to-link-specific-comment/33179630#33179630

#! URLs见。

+0

谢谢,但我的问题是,在“单一新闻”页面的评论是分页(与AJAX),所以评论 - 网址需要传递评论ID到控制器,将做一些数学和显示新闻与评论分页在正确的页码。我该怎么做(避免重复的URL)?我是否应该在第一次使用ajax调用来加载评论时(当单个新闻页面呈现时)? –

+0

澄清:可能的解决方案是使用/ news/{news_id}路线获取新闻内容。然后内部的TWIG模板我将检查该网址是否有锚参数。如果是这样,我从JavaScript的锚点检索comment_id并进行ajax调用以获取正确的评论页码。从这一刻起,它就像往常一样...获取评论页面内容并显示它。这可以工作吗? –

+0

有了上述解决方案,我甚至可以避免重复的链接?此解决方案是否被认为是“最佳实践”? –