[решено] Vk like в тизерах.

Главные вкладки

Аватар пользователя RayB RayB 2 января 2011 в 20:40

Подскажите как можно вывести виджет "мне нравится" от вконтакта в тизерах? То есть есть список нод (тизерами) сформированный через виевс и хочется чтобы в этом списке (то есть на одной странице) в каждом тизере была кнопка "мне нравится". Естественно, чтобы эти кнопки относилась к каждой конкретной ноде.

Использую модуль vk_openapi

Здесь есть документация

Вставляю вот такой код в node.tpl.php:

<?php if (!$page): ?>
<div id="vk_like"></div>
<script type="text/javascript">
window.onload = function () {
 VK.init({apiId: 1862865, onlyWidgets: true});
 VK.Widgets.Like('vk_like', {type: 'mini'}, <?php print $node->nid ?>);
}
</script>
<?php endif; ?>

видимо совсем не правильный, так как отображает кнопку только в первом тизере и не на саму ноду, а похоже на страницу списка

Комментарии

Аватар пользователя bsyomov bsyomov 6 января 2011 в 22:31

Во первых лучше выводить не тизеры во view, а поля, это быстрее.
Значение поля можно переписать нужным кодом(div c соответствующим id).
Далее, для вставки js есть api функция drupal_add_js(), в частности можно вставлять inline js.
Также ваш код из примера как раз и рассчитан на вставку одной кнопки... Вам надо перечислить все страницы в инициализации VK.Widgets.Like(), их url и.т.д.

Аватар пользователя Dalay Dalay 6 января 2011 в 23:07

Тогда уж так (без drupal_add_js() нагляднее)

<div id="vk_like_<?php print $nid ?>"></div>
<script type="text/javascript">
window.onload = function () {
 VK.init({apiId: 1862865, onlyWidgets: true});
 VK.Widgets.Like('vk_like_<?php print $nid ?>', {type: 'mini'}, <?php print $nid ?>);
}
</script>

И в header:

<script src="http://vkontakte.ru/js/api/openapi.js" type="text/javascript" charset="windows-1251"></script>

Аватар пользователя RayB RayB 7 января 2011 в 9:06

то есть задача не имеет решения? я видел как в списке нод выводили кнопки "сохранить в контакте".

Аватар пользователя Обухов Никита Обухов Никита 7 января 2011 в 12:41

1. В page.tpl.php

<script src="http://vkontakte.ru/js/api/openapi.js" type="text/javascript" charset="windows-1251"></script>
<script type="text/javascript">
  VK.init({
    apiId: Твой АйДи,
    onlyWidgets: true
  });
</script>  

2. В ноде-тпл-пхп:

<?php if ($node->teaser) : ?>
<div id="teaser-like-<?php print $node->nid;?>"></div>
<script type="text/javascript">
 VK.Widgets.Like('teaser-like-<?php print $node->nid;?>', 
         {
      pageTitle: '<?php print $node->title;?>',
      pageUrl: '<?php print url('node/'$node->nid, array('absolute' => TRUE));?>'

        }, <?php print $node->nid;?>);
</script>
<?php endif; ?>

Можно добавить pageDescription, но я хз скока там макс длина и какие тэги разрешены.

наверное так:

<?php         {
      
pageTitle'<?php print $node->title;?>',
      
pageUrl'<?php print url('node/'. $node->nid, array('absolute' => TRUE));?>',
          
pageDescription'<?php print drupal_substr(filter_xss($node->teaser, array()), 0, 255);?>'

        

}?>
Аватар пользователя bsyomov bsyomov 7 января 2011 в 15:34

И как, заработало по вышеперведённому примеру?
Вообще говоря, насколько я понял, надо только 1 раз вызвать VK.Widgets.Like передав ей сформированный массив id, url и.т.п., тогда будет работать корректно, а так будет только в одном тизере кнопка...

Аватар пользователя RayB RayB 7 января 2011 в 17:44

"bsyomov" wrote:
2. В ноде-тпл-пхп:

вот вроде бы и работает, но значения с нуля идут и не совпадают с тем что внутри ноды.
То есть в тизере одно значение, в полной ноде другое.

вот этот код и в тизере и в полной ноде:

<div id="vk_like-<?php print $node->nid;?>"></div>
<script type="text/javascript">
VK.Widgets.Like('vk_like-<?php print $node->nid;?>', {type: "button"});
</script>
Аватар пользователя RayB RayB 7 января 2011 в 18:56

у меня есть готовые ноды уже в которых люди голосовали (нажимали "мне нравится"). Вот для примера http://sushifan.ru/foto/foto-8080. Там уже 9 голосов. И хотелось чтобы в тизере этой ноды счет не шел с нуля и голоса не пропали. В полной ноде код:

<div id="teaser-like-<?php print $node->nid;?>"></div>
<script type="text/javascript">
VK.Widgets.Like('teaser-like-<?php print $node->nid;?>', {type: "button"});
</script>

а вот список нод с вашим кодом http://sushifan.ru/test

Аватар пользователя Обухов Никита Обухов Никита 8 января 2011 в 5:21

Попробуйте убрать то что выделено жирным

VK.Widgets.Like('teaser-like-<?php print $node->nid;?>',
{
pageTitle: '<?php print $node->title;?>',
pageUrl: '<?php print url('node/'. $node->nid, array('absolute' => TRUE));?>'

}, <?php print $node->nid;?>);

Короче в ноде-тпл должно быть так:

<?php if ($teaser) : ?>
<div id="teaser-like-<?php print $node->nid;?>"></div>
<script type="text/javascript">
 VK.Widgets.Like('teaser-like-<?php print $node->nid;?>',
         {
      pageTitle: '<?php print $node->title;?>',
      pageUrl: '<?php print url('node/'. $node->nid, array('absolute' => TRUE));?>'

        });
</script>
<?php else: ?>
<div id="teaser-like-<?php print $node->nid;?>"></div>
<script type="text/javascript">
VK.Widgets.Like('teaser-like-<?php print $node->nid;?>', {type: "button"});
</script>

<?php endif; ?>

Аватар пользователя RayB RayB 8 января 2011 в 13:29

"Обухов Никита" wrote:
Короче в ноде-тпл должно быть так:

Ура-ура-ура! Скажите кошелек, немного вебмани на кефир перечислю в знак благодарности Smile

Не подскажите еще как в тизере вывести мини формат кнопки? добавляю в код {type: "mini"} и уже не работает так как надо.

Аватар пользователя Обухов Никита Обухов Никита 8 января 2011 в 13:39
 VK.Widgets.Like('teaser-like-<?php print $node->nid;?>',
         {
      pageTitle: '<?php print $node->title;?>',
      pageUrl: '<?php print url('node/'. $node->nid, array('absolute' => TRUE));?>',
      type: 'mini'
 
        });

PS> Кефир мне завтра пригодится ^_^
R629421240395

Аватар пользователя hostwall hostwall 30 октября 2011 в 0:59

Доброго времени суток!
Уважаемые гуру, прошу помощи. Сделал всё так как написано, но кнопка у меня появляется только тогда, когда я перехожу сюда /comment/reply/175#comment-form До этого я её в статье не вижу.
Что я делаю не правильно?
В чём моя ошибка?

Аватар пользователя WebFamily WebFamily 27 января 2013 в 21:22

При использовании модуля Views Infinite Scroll (подгрузка материала) не выводиться кнопка, работает только для первых трех тизеров, которые загружаются со страницей. В чем может быть проблема? Кто может подскажите, вот сайт http://esaro.ru

Аватар пользователя WebFamily WebFamily 28 января 2013 в 17:20

"WebFamily" wrote:
И кто-то может быть знает как вывести таким же способом комментарии в тизер?

Вывел так:

<?php if ($teaser) : ?>

nid;?>">

VK.Widgets.Comments('teaser-comments-<?php print $node->nid;?>',
{
pageTitle: '<?php print $node->title;?>',
pageUrl: '<?php print url('node/'. $node->nid, array('absolute' => TRUE));?>',

});

<?php else: ?>

nid;?>">

VK.Widgets.Comments('teaser-comments-<?php print $node->nid;?>', {width: "646", attach: "*"});

<?php endif; ?>

Но как быть с Views Infinite Scroll так и не решил.