Несколько объектов opengraph Facebook на одной странице - PullRequest
7 голосов
/ 05 октября 2011

У меня есть страница, на которой пользователи должны инициировать действия над несколькими объектами, но дизайн Facebook ограничивает вас одним объектом на страницу, используя необходимые мета-теги свойств.

Кто-нибудь нашел решение этой проблемы?

Ответы [ 3 ]

13 голосов
/ 05 октября 2011

Open Graph использует URL в качестве идентификатора объекта, поэтому невозможно иметь несколько объектов на одной странице, страница является объектом.

Вместо этого вам потребуется URL для каждого объекта, и HTML-код этого URL должен содержать правильную разметку OG.

Вы можете разместить несколько одинаковых кнопок на одной странице и сделать так, чтобы они указывали на каждый из ваших объектов, указав параметр «href» для каждой кнопки «Нравится».

Однако, если вы хотите, чтобы пользователь снова оказался на той же странице, когда он нажимал на ссылку на каждый из этих объектов, вы можете сделать это, но это немного сложно ...

На страницах ваших объектов, на вашем сервере, посмотрите на useragent входящего запроса. Если useragent содержит строку «facebookexternalhit», то визуализируйте HTML и разметку OG - это то, как скребок Facebook видит вашу страницу. Если useragent не содержит эту строку, выполните перенаправление 302 на страницу, которую должен видеть пользователь.

Результат? Много объектов, но только одна видимая пользователю страница. Win.

А вот как бы вы это сделали:

<?php

if ($_SERVER["HTTP_USER_AGENT"] != "facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)") {
    redirect('http://www.somesite.com', 302);
}
function redirect($url, $type=302) {
    if ($type == 301) header("HTTP/1.1 301 Moved Permanently");
    header("Location: $url");
    die();
}

?>

<html...
2 голосов
/ 25 апреля 2012

https://stackoverflow.com/a/7659770/1354666 Это отличный ответ, но кое-что из этого не очень хорошо для меня, поэтому я попробовал альтернативу.

Вместо использования href's in buttonтеги, которые я использую Iframes.

  1. Создайте серию html-страниц для каждого из объектов OG.
  2. На каждой из этих страниц добавьте необходимые сценарии заголовка facebook и корневые элементы facebook ввызовите API Facebook.
  3. Создайте элементы ввода формы, которые будут вызывать действия для каждого из этих объектов OG.Присвойте каждому из этих элементов идентификатор.
  4. Включите небольшой скрипт, который определит, являетесь ли вы и Iframe или страницей, чтобы вы могли перенаправить пользователей обратно на свою домашнюю страницу, если они нажмут на фид Facebook.
  5. Наконец, поместите и свой размерный фрейм со стилем, установленным без рамки на странице, и установите для него отсутствие прокрутки.Используйте идентификаторы элементов формы, чтобы указать, какое действие должно быть в представлении iframe.

Я все еще работаю над уточнением этого для выходных данных моих мобильных телефонов, но оно работает так, как должно для большинствабраузеры.

0 голосов
/ 05 октября 2011

FB использует URL, который вы присваиваете объекту, чтобы очистить его для информации. Единственный способ обойти это - показать объекты с помощью iframe или подобного подхода. Если на объект ссылались напрямую, вам понадобится способ перенаправить обратно на соответствующую страницу оболочки для комбинированного представления объекта. Пока все находится в одной области, вы можете разработать метод связи между дочерними фреймами через родительский.

...