кнопка сердца (лайк) на главной странице tumblr

Глядя на различные сообщения здесь и в группах Google по этому вопросу, я пытаюсь использовать скрипт из темы ciceron воспроизвести сердечко (лайк), но пока не получается.

Ниже мой код. Я что-то пропустил? Удалось ли кому-нибудь разобраться?

В <head>:

<script type="text/javascript" src="http://static.tumblr.com/53unaru/y8wlgzkbt/jquery.ui.totop.js"></script>
<script type="text/javascript">

$('a.like-link').click(function() {
    var post = $(this).closest('.post');
    var id = post.attr('id');
    var oauth = post.attr('rel').slice(-8);
    var like = 'http://www.tumblr.com/like/'+oauth+'?id='+id;
    $('#likeit').attr('src', like);
    $(this).addClass('liked'); return 
false;}) 

</script>

В части CSS <head>:

#likeit {height: 0; width: 0; visibility: hidden;}

В <body>:

<iframe id="likeit"></iframe>
in {Block:post}:
<a href="#" class="like-link">Like</a>

person Ben    schedule 13.01.2012    source источник


Ответы (1)


Я обновил свой туториал на Tumblr, чтобы его можно было вырезать и вставлять: http://like-button.tumblr.com

Вам не хватает ключа oAuth. Каждое сообщение имеет уникальный идентификатор, который необходимо отправить, чтобы поставить лайк. Вы можете найти его в конце переменной {ReblogURL} (которая недокументирована). Это последние восемь символов. В вашем примере он берет его из атрибута rel в сообщении:

var oauth = post.attr('rel').slice(-8);

Вырежьте и вставьте следующий блок кода в свою тему непосредственно перед </head>. Это даст вам кнопку «Мне нравится» в каждом сообщении, которая выглядит как серое сердце Tumblr по умолчанию. Он станет красным, когда вы наведете на него курсор и щелкнете по нему. Если вы нажмете его еще раз, он снова станет серым и удалит лайк.

<style>
.my-like {
    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAARCAYAAAA/mJfHAAABH0lEQVQ4y62T30vCUBiGv/9YuhBLkCA08FdogRFFYFEUhhZNCCQoSESiIOii68pl5qV6s8Eb7+SMHXNs6S7ejZ3zvA+ccT4BICofvS88dJ7w8vqG8WQC754K17lPjrx3z3l8D4YoVaqIrWbcJNbzaHefNZjfXPdy5b0jsO/IRqMxUpmSBnhz2bx1QL79GPbpEePmzhdSyW8fBDL0SK68HwiGCT2S3NiKREaPzP7QRRNPZSHpwm4kMnqkYbQikdEjZv8HK2ubS4nY75mD6WU8qzeXkrHvToBlWSjuHC4kYo99V8bwBnM0/iMiz542myq2bSPskcmR/zPos7lvP8Lv/nGd+/N6c2Xq2KcXhiY6qV1rxwotU3n/NHF8fgW+g9hfsHJlJUYljcgAAAAASUVORK5CYII=) !important;
    height:17px;
    width:19px;
    cursor:pointer;
    display:inline-block;
    vertical-align:top;
}
.my-liked, .my-like:hover {
    background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAARCAYAAAA/mJfHAAABSklEQVQ4y2P4//8/Awy/O3fu/905c/4/2779/69Pn/4jy8Hwz/fv/z/buvX/vfnz/7+/eBFFDZj4cOXK/8O+Pv+36+rA8W4zs/8Ply1DUXx/4cL/u0yMUdQdCQ76/+nWLbA6hq+PH//fbW6OogAZ3+zvByu81t6OU80ea6v/P16//s9wqboKpyIYPhYeTlDN1abG/wz7HR0JKiQGH3Bz+8+ww0CfKobtMjb6z0ANg+CGgQKPKt50dfnPcL6wkCqGXaoo/8/w5tgxyg3T0wUnYHBiPJuZSZFhF8pK/8NzACjrgKKWHINAOef3168Iw0D429OnGFmKEAZlJVDKR8mbMAyy4XRqClEGnc3J+f/nxw/MjI6OQflxh6EBzvR0Z9o0rCUKVsNA+MuD+/9PJiSgGHQmPf0/KDhw6cFpGAy/OnAAbOibEyf+E1ILAFBjDrchm7KrAAAAAElFTkSuQmCC) !important;
    height:17px;
    width:19px;
    cursor:pointer;
    display:inline-block;
    vertical-align:top;
}
</style>
<script>
window.onload = function () {
document.body.insertAdjacentHTML( 'beforeEnd', '<iframe id="my-like-frame" style="display:none;"></iframe>' );
document.addEventListener( 'click', function ( event ) {
    var myLikeLink = event.target;
    if( myLikeLink.className.indexOf( 'my-like' ) > -1 ) {
        var myLikeFrame = document.getElementById( 'my-like-frame' ),
            liked = ( myLikeLink.className == 'my-liked' ),
            command = liked ? 'unlike' : 'like',
            reblog = myLikeLink.getAttribute( 'data-reblog' ),
            postId = myLikeLink.getAttribute( 'data-id' ),
            oauth = reblog.slice( -8 ),
            likeUrl = 'http://www.tumblr.com/' + command + '/' + oauth + '?id=' + postId;
        myLikeFrame.src = likeUrl;
        liked ? myLikeLink.className = 'my-like'
            : myLikeLink.className = 'my-liked';
    };
}, false );
};
</script>

Затем вырежьте и вставьте следующий код кнопки в вашу тему, где вы хотите, чтобы была кнопка «Нравится» (она должна быть внутри вашего блока {block:Posts}).

<div class="my-like" data-reblog="{ReblogURL}" data-id="{PostID}"></div>
person ThinkingStiff    schedule 28.01.2012
comment
Спасибо за ваш проницательный ответ, поэтому мне нужно что-то вроде этого для ее метода (урезанная версия для блочной фотографии): `{block:Posts} {block:Photo} ‹div id={PostID} rel={ReblogURL} class=post › ‹img src={PhotoURL-HighRes} width=600px/› ‹a href=# class=like-link›like‹/a› ‹/div› {/block:Photo} {/block:Posts} Но я Я не уверен, куда должна вести ссылка на кнопку «Нравится»? iframe #нравится? Я попытаюсь использовать ваш метод, который имеет классную функциональность toogle, как только этот заработает. Что такое ul и href в вашем методе? Ваша тема рулит. - person Ben; 30.01.2012
comment
@user1148640 user1148640 Ссылка идет внутри блока Posts, как и вы. URL-адрес, который вы можете просто установить на #, потому что скрипт возьмет на себя ссылку для вас. - person ThinkingStiff; 30.01.2012
comment
Спасибо, это работает! И ваш трюк с переключением между похожими и непохожими тоже работает! Большое приветствие из Франции! - person Ben; 30.01.2012
comment
Привет! Я не уверен, что это работает, даже в теме Цицерона. Я получаю эту ошибку: GET http://www.tumblr.com/like/vNQMTLwX?id=7703094650 403 (Forbidden) www.tumblr.com/like/vNQMTLwX?id=7703094650:1 Refused to display 'http://www.tumblr.com/like/vNQMTLwX?id=7703094650' in a frame because it set 'X-Frame-Options' to 'deny'. Те, кто утверждает, что это работает... Вы проверили это потом? - person Hector Lorenzo; 29.04.2013
comment
@HectorLorenzo Это перестало работать несколько недель назад, потому что Tumblr добавил кнопки «Нравится» в язык своей темы: tumblr .com/docs/en/custom_themes#like_and_reblog_buttons Мне нужно обновить этот пост. - person ThinkingStiff; 30.04.2013
comment
@ThinkingStiff есть прогресс в том, чтобы заставить это работать с новой схемой? - person atonyc; 02.07.2013
comment
@ThinkingStiff я получаю сообщение об ошибке в консоли. Загрузка запрещена X-Frame-Options: tumblr.com /like/iKvmNy9T?id=236 не разрешает кадрирование. - person Anil Gupta; 15.10.2013
comment
Просто чтобы уточнить, этот метод больше не будет работать с новыми кнопками Like / Reblog. - person mikedidthis; 22.10.2013