Как изменить кнопку входа в facebook с моим собственным изображением

В моем скрипте есть такой код

echo '<p class="wdfb_login_button"><fb:login-button scope="' .
     Wdfb_Permissions::get_permissions() . '" redirect-url="' .
     wdfb_get_login_redirect() . '">' .
     __("Login with Facebook", 'wdfb') . '</fb:login-button></p>';

Он использует плагин кнопки входа в facebook по умолчанию. Но я хотел бы использовать свое собственное изображение для подключения к Facebook. Может кто-нибудь помочь мне?


person Giri    schedule 21.03.2012    source источник
comment
Возможный дубликат! facebook.stackoverflow.com/questions/9952611/   -  person Philip    schedule 13.06.2012


Ответы (4)


Используемый вами метод - это отображение кнопки входа в систему из кода Facebook Javascript. Однако вы можете написать свою собственную функцию кода Javascript, чтобы имитировать функциональность. Вот как это сделать -

  1. Создайте простую ссылку тега привязки с изображением, которое вы хотите показать. Имейте onclick метод для тега привязки, который действительно выполнял бы реальную работу.
<a href="#" onclick="fb_login();"><img src="images/fb_login_awesome.jpg" border="0" alt=""></a>
  1. Затем мы создаем функцию Javascript, которая будет показывать фактическое всплывающее окно и получать полную информацию о пользователе, если пользователь позволяет. Мы также обрабатываем сценарий, если пользователь запрещает наше приложение facebook.
window.fbAsyncInit = function() {
    FB.init({
        appId   : 'YOUR_APP_ID',
        oauth   : true,
        status  : true, // check login status
        cookie  : true, // enable cookies to allow the server to access the session
        xfbml   : true // parse XFBML
    });

  };

function fb_login(){
    FB.login(function(response) {

        if (response.authResponse) {
            console.log('Welcome!  Fetching your information.... ');
            //console.log(response); // dump complete info
            access_token = response.authResponse.accessToken; //get access token
            user_id = response.authResponse.userID; //get FB UID

            FB.api('/me', function(response) {
                user_email = response.email; //get user email
          // you can store this data into your database             
            });

        } else {
            //user hit cancel button
            console.log('User cancelled login or did not fully authorize.');

        }
    }, {
        scope: 'public_profile,email'
    });
}
(function() {
    var e = document.createElement('script');
    e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
    e.async = true;
    document.getElementById('fb-root').appendChild(e);
}());
  1. Мы сделали.

Обратите внимание, что указанная выше функция полностью протестирована и работает. Вам просто нужно указать свой идентификатор приложения facebook, и он будет работать.

person Sachin Khosla    schedule 21.03.2012
comment
Я заметил, что на шаге 1 есть href="#". Что, если я захочу перейти по другой ссылке? Я пробовал href="www.google.com", но не работает. - person user811416; 12.01.2014
comment
Здравствуйте, вы можете сделать это с помощью window.location после того, как получите электронную почту пользователя. Замена атрибута '#' на 'href' не поможет, пока вы не планируете динамически получать значение href из разных типов тегов привязки на странице. Но это вообще отдельный вариант использования. - person Sachin Khosla; 24.01.2014
comment
Я получил ошибку fb-root is null, а FB не определен. ответьте, пожалуйста - person harsh4u; 24.09.2014
comment
Можете ли вы вставить свой код, чтобы мы помогли вам отладить его? - person Sachin Khosla; 14.01.2015
comment
Я сделал именно то, что вы опубликовали, заменив свой APP_ID, и ваш скрипт не работает. - person Tim Marshall; 02.02.2015
comment
Привет, Тим, можешь показать образец кода? Также убедитесь, что фреймворк FB загружен до кода JS или у вас есть все внутри $ (document) .ready () {} - person Sachin Khosla; 02.02.2015
comment
Вы спасли мою жизнь .................... спасибо за четкое описание ....... - person Paramesh Reddy; 20.10.2015
comment
Приведенный выше код у меня тоже не сработал. Я сделал, наконец, заставил это работать после некоторых копаний. Вот что мне нужно было сделать. При вызове графа нужно явно вызывать нужные поля: FB.api('/me?locale=en_US&fields=id,name,email,first_name,last_name', function(response) { } - person Jason; 14.06.2016
comment
измените publish_stream на public_profile, чтобы он работал - person Omar Wagih; 20.06.2016

У меня он работал с вызовом чего-то столь же простого, как

function fb_login() {
  FB.login( function() {}, { scope: 'email,public_profile' } );
}

Я не знаю, сможет ли facebook когда-нибудь заблокировать этот обход, но сейчас я могу использовать любой HTML или изображение, которое я хочу вызвать fb_login, и он отлично работает.

Ссылка: Facebook API Docs

person Christian Dechery    schedule 07.09.2014

На самом деле это возможно только с использованием CSS, однако изображение, которое вы используете для замены, должно быть того же размера, что и исходная кнопка входа в facebook. К счастью, Facebook предлагает кнопки разных размеров.

Из фейсбука:

размер - кнопки разного размера: small, medium, large, xlarge - по умолчанию средний. https://developers.facebook.com/docs/reference/plugins/login/

Установите непрозрачность iframe для входа в систему на 0 и покажите фоновое изображение в родительском div

.fb_iframe_widget iframe {
    opacity: 0;
}

.fb_iframe_widget {
  background-image: url(another-button.png);
  background-repeat: no-repeat; 
}

Если вы используете изображение, которое больше, чем исходная кнопка facebook, часть изображения, выходящая за пределы ширины и высоты исходной кнопки, не будет доступна для нажатия.

person Würden    schedule 27.09.2013
comment
это здорово, работает как шарм, по крайней мере, в хроме .. есть ли проблемы с некоторыми браузерами?, я должен это проверить. Отличный ответ - person Moncho Chavez; 19.11.2013

Нашел сайт в google, объясняющий некоторые изменения, по словам автора страницы fb не позволяет настраивать кнопки. Вот веб-сайт.

К сожалению, это противоречит политике Facebook для разработчиков, которая гласит:

Вы не должны обходить наши намеченные ограничения на основные функции Facebook.

Кнопка Facebook Connect предназначена для отображения в FBML, а это значит, что она предназначена только для того, чтобы выглядеть так, как это позволяет Facebook.

person justanotherhobbyist    schedule 21.03.2012
comment
Но как получилось, что mashable с использованием эту кнопку? - person Giri; 21.03.2012
comment
Если вы посмотрите на веб-сайт, на который я указал, вы увидите, что разрешены некоторые изменения, размер шрифта и т. Д., Но изменение изображения или около того не разрешено. Прочтите сайт, вы поймете лучше и даже научитесь его менять. - person justanotherhobbyist; 21.03.2012
comment
Очевидно, я прочитал ту статью, на которую вы указали ссылку, перед тем, как опубликовать свой предыдущий комментарий. Вот снимок пользовательского изображения для подключения к facebook, созданного mashable. Я уверен, что они используют нестандартное изображение, а не код fbml. Это их пользовательское изображение facebook - person Giri; 21.03.2012
comment
Их кнопка очень похожа на обычную кнопку fb, поэтому она может быть разрешена, я не знаю. Но то, как они это делают, - это просто изображение, ссылающееся на логин в facebook, как если бы вы делали любую ссылку на кнопку. Они ничего не меняют в API. - person justanotherhobbyist; 21.03.2012
comment
Хорошая тема. Так можно ли использовать пользовательские кнопки или нет? Не похожи, но разные? - person aleXela; 13.03.2013