2013-05-26 27 views
0

我有一个Web应用程序在同一个对象可以根据语言环境参数的多个URL的,就像这样:Facebook的Like按钮,一个对象,多个URL(区域)

http://domain.com/{_locale}/{id}/{slug} 

我有一个Like按钮这些页面工作得很好,但问题在于,由于URL不同,所以在每个语言环境中完成的喜欢计数为单独的OpenGraph对象。

显而易见的解决方案是使用对象id而不是Like按钮的href参数,但使用it seems like it may not be possible

基本上,我需要一个像计算两种方式:

http://domain.com/fr/1/some-slug 

http://domain.com/en/1/some-slug 

因为他们毕竟,无论是同一个对象。

任何想法?

回答

0

我猜我必须输入才能找出结果。这是我对Symfony2的解决方案。

我得到它的工作方式是调整我现有的localeAction。默认情况下,它是由要访问的网站的根目录引发的,但我改变了它,所以它接受路线和参数:

public function localeAction($route = 'home', $parameters = array()) 
{ 
    $this->getRequest()->setLocale($this->getRequest()->getPreferredLanguage(array('en', 'fr'))); 

    return $this->redirect($this->generateUrl($route, $parameters)); 
} 

然后,我创建了专门针对Facebook的路由配置:

facebook_profile: 
    resource: "@AppCoreBundle/Controller/FacebookController.php" 
    prefix: /fb 
    type: annotation 

在该控制器中,我通过id找到对象,从数据库中获取slug并转发到locale控制器,该控制器将负责检测用户的语言环境并相应地重定向。

/** 
* @Route("/profile/{id}", requirements={"id" = "\d+"}, name="fb-profile") 
*/ 
public function profileAction($id) 
{ 
    $dog = $this->getDogManager()->findById($id); 

    return $this->forward('AppCoreBundle:Core:locale', array(
     'route' => 'profile', 
     'parameters' => array(
      'id' => $id, 
      'slug' => $dog->getSlug(), 
     ), 
    )); 
} 

最后,视图可以使用新的路线等等按钮,如下所示:

<div class="fb-like" data-href="http://domain.com{{ path('fb-profile', {'id': dog.id}) }}" data-send="false" data-layout="button_count" data-width="450" data-show-faces="false"></div> 

导致以下href

我发现设置是非常重要的这样的URL:meta标记:

<meta property="og:url" content="http://domain.com{{ path('profile', {'id': dog.id, 'slug': dog.slug}) }}"> 

其中结果如下contenthttp://domain.com/fr/profile/1/some-slug

说明这是真实的URL,如果我在这里使用了Facebook的途径,debugger发牢骚圆形重定向。哦,按钮也没有工作。

我本来可以在Facebook路线中使用slu but,但是如果slu changes因为某种原因而改变,它会摧毁所有现有的喜欢这个对象,这显然不是一个理想的副作用。

就是这样!

http://domain.com/fr/1/some-slug 

http://domain.com/en/1/some-slug 

目前正处于Facebook的眼中同一个对象。