Powered by CodeIgniter
firestar

firestar

4
4 голоса
  ПрофильБлог (5)Комментарии (58)ЗакладкиПродукты 
Я реализовал так:
function vk_like_node_show_($Node,$node,$type,$return){ if($type == 'full'){ $CI =& get_instance(); $CI->_template(array(' <div id="vk_like"></div> [removed] VK.Widgets.Like("vk_like", {type: "full"}); [removed] '),104); } } Проблема заключается в том, на главной странице кнопка отображается криво. Поэтому я и ввел
if($type == 'full'). т.е. она появляется на странице топика.
А теперь вопрос. Как добиться того, чтобы эта кнопка нормально появлялась на главной странице?
12:52 ← 31 декабря 2010 Отправить в Твиттер firestarfirestar  RSS comments 23

Комментарии (23) ↓

Freem Freem time 03:39 ← 01 января 2011 #
Код like не видел, но примерно могу сказать что надо хукать node_show, посмотрите как сделанно в шестеренке tags.

$node->extra = $node->extra. "code like blabla"
inetlover inetlover time 16:06 ← 01 января 2011 #
А что такое «кнопочки like», откуда они?
Автор
firestar firestar time 16:59 ← 01 января 2011 #
inetlover inetlover time 17:06 ← 01 января 2011 #
А есть еще же подобная кнопка для Fasebook, ее тоже наверное нужно за одно сделать. Не знаете где той код находиться?
Автор
firestar firestar time 19:38 ← 01 января 2011 #
inetlover inetlover time 17:29 ← 05 января 2011 #
Я не пойму, а где ссылку на пост можно посмотреть Вконтакте, после того, как нажал на кнопку?
inetlover inetlover time 21:23 ← 01 января 2011 #
Если вставлять так же, как вставлены теги, то надо создать функцию:
function like_node_show_($Node,$node,$type){ $node->like = 'Код кнопки'; }
И прописать переменную {$node->like}. Открыть файл nodes/templates/node.tpl
в нем найти {$node->extra} и после вставить {$node->like}.
Freem Freem time 22:13 ← 01 января 2011 #
Помоему можно и не прописывать переменную в ноду. (хотя это правильно — логически)
А если аляписто — можно просто хуком пристроится к коду тэгов.
function like_node_show_($Node,$node,$type){ $node->extra .= 'Код кнопки'; }
inetlover inetlover time 23:26 ← 01 января 2011 #
Через переменную extra выводятся теги. Если так сделать, мы тогда не увидим тегов. Точнее, у кого меньше будет position тот и будет, или теги, или кнопка — но, что-то одно.
Freem Freem time 12:37 ← 02 января 2011 #
Делаем position у like больше чем у tag
в хуке пристраиваемся к коду tag

$node->extra .= 'Код кнопки';

что эквивалентно

$node->extra = $node->extra + 'Код кнопки';
inetlover inetlover time 15:06 ← 02 января 2011 #
Попробую, сделать так.
inetlover inetlover time 15:19 ← 02 января 2011 #
Если с кодом Вконтакте все предельно просто, то с Ficebook есть маленькая загвоздка:

<iframe src=«http: //www.facebook.com/plugins/like.php?href=

Сюда надо записать код который будет показывать ссылку на пост в котором находиться кнопка

&layout=standard&show;_faces
=false&width=450&action=like&colorscheme=light&height=35» scrolling=«no» frameborder=«0» style=«border:none; overflow:hidden; width:450px; height:35px;» allowTransparency=«true»></iframe>

Вот, пробую разные варианты, но пока результат отрицательный.
Freem Freem time 19:30 ← 02 января 2011 #
А так?
$like_code = '<iframe src=«http://www.facebook.com/plugins/like.php?href="' .$node->link. '"&layout=standard&show;_faces =false&width=450&action=like&colorscheme=light&height=35» scrolling=«no» frameborder=«0» style=«border:none; overflow:hidden; width:450px; height:35px;» allowTransparency=«true»></iframe>';
inetlover inetlover time 21:15 ← 02 января 2011 #
$node->link — пробовал, он после выполнения показывает пустое место, вместо ссылки.
Freem Freem time 21:52 ← 02 января 2011 #
хмм… действительно. Вот так попробуйте:
$link = 'http://'.$Node->gears->global->url.'/'.$node->url_name.'-'.$node->id.'.html'; $node->extra .= $link;
только обязательно сделайте position у вашей шестеренки больше (например 101), а шестеренки tags пропишите (по умолчанию у тэга нет этого параметра), например 100.

После этого сможете пристраиваться к extra еще и еще раз =)
inetlover inetlover time 23:17 ← 02 января 2011 #
Ок, спасибо! Попробую!
Freem Freem time 22:03 ← 02 января 2011 #
Код будет примерно такой:
function fblike_node_show_($Node,$node,$type){ $link = 'http://'.$Node->gears->global->url.'/'.$node->url_name.'-'.$node->id.'.html'; $like_code = '<iframe src=«http://www.facebook.com/plugins/like.php?href="'.$link.'"&layout=standard&show;_faces =false&width=450&action=like&colorscheme=light&height=35» scrolling=«no» frameborder=«0» style=«border:none; overflow:hidden; width:450px; height:35px;» allowTransparency=«true»></iframe>'; $node->extra .= $like_code; }
inetlover inetlover time 21:53 ← 04 января 2011 #
Даже без выставления position все работает хорошо, кнопки появляются под тегами.

С кнопками Facebook, проблем нет — все замечательно, а вот с Вконтакте, они липнут друг к другу.

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

Freem Freem time 22:22 ← 04 января 2011 #
Это наверно с css там намудренности, наверняка какаянибудь фишка с позиционированием. Надо бы firebug'ом посмотреть примененные стили.
inetlover inetlover time 00:48 ← 05 января 2011 #
Спасибо! Буду думать.

Посмотреть проблему можно здесь big-ok.ru.

Файлы шестеренки Like.

like.info title = "like" description = "Index topics with like" core = 1.x version = 1.0 author = "Belyaev Dmitriy <admin@cogear.ru>" enabled = TRUE group = plugins
_hooks.php function like_node_show_($Node,$node,$type){ $link = 'http://'.$Node->gears->global->url.'/'.$node->url_name.'-'.$node->id.'.html'; $node->extra .= ' [removed][removed] [removed] VK.init({apiId: 1956031, onlyWidgets: true}); [removed] <div id="vk_like"></div> [removed] VK.Widgets.Like("vk_like", {type: "10"}); [removed] <iframe src="http://www.facebook.com/plugins/like.php?href='.$link.'&layout=standard&show;_faces =false&width=450&action=like&colorscheme=light&height=35" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:35px;" allowTransparency="true"></iframe>'; }
inetlover inetlover time 01:05 ← 05 января 2011 #
Как я понимаю, причина здесь в том, что getElementById находит первый <div id="vk_like"></div> и туда пихает кнопочку, потом вторая кнопочка находит на странице опят первый <div id="vk_like"></div> и пихает туда вторую кнопочку и так далее.
Freem Freem time 13:58 ← 05 января 2011 #
а все понял.
Тогда сделаем так:
Код:
<div id="vk_like"></div><code> <code> <div id="vk_like_<?=$node->id?>"></div>
и код:

V K . W i d g e t s . L i k e ( " v k _ l i k e ". $node->id, { t y p e : " 1 0 " } ) ;
Заменить на:

V K . W i d g e t s . L i k e ( " v k _ l i k e ", { t y p e : " 1 0 " } ) ;
Пишу со смарта, так что пробуйте:)
inetlover inetlover time 17:25 ← 05 января 2011 #
Супер!!! Спасибо за идею, все получилось!

Сделал:
function like_node_show_($Node,$node,$type){ $link = 'http://'.$Node->gears->global->url.'/'.$node->url_name.'-'.$node->id.'.html'; $title = $node->name; $description = $node->description; $node->extra .= ' < script type="text/javascript" src="http://userapi.com/js/api/openapi.js?20" >< /script > <div id="vk_like_'.$node->id.'"></div> < script type="text/javascript" > VK.init({apiId: 1955995, onlyWidgets: true}); VK.Widgets.Like("vk_like_'.$node->id.'", {type: "10", pageUrl: "'.$link.'", pageTitle: "'.$title.'", pageDescription: "'.$description.'"}); < /script > <iframe src="http://www.facebook.com/plugins/like.php?href='.$link.'&layout=standard&show;_faces =false&width=450&action=like&colorscheme=light&height=35" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:35px;" allowTransparency="true"></iframe>'; }
Осталось только понять, куда ссылка с Вконтакте выводиться. Чуть-чуть причесать и можно выкладывать в виде шестеренки.