2013-05-26 57 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的眼中同一個對象。