[Решено] Реализация "мне нравиться" как на "в контакте".

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

Аватар пользователя Sanco2 Sanco2 2 октября 2011 в 2:29

Ломаю голову над методом реализации вконтактовского "мне нравиться!". Пока что нашел только [module=plus1], но хотелось бы еще и добавление аватаров плюсующих пользователей. Может кто подскажет в каком направлении двигаться?

Комментарии

Аватар пользователя Sanco2 Sanco2 2 октября 2011 в 14:24

Спасибо за подсказку. Поставил flag, ссылки нравиться/не нравиться добавил через views, а вот с аватарами и счетчиком засел.

"ydv" wrote:

Можно использовать flag.
Аватары нужно будет добавлять уже своим кодом, например из шаблона.

можно код посмотреть?

Аватар пользователя ydv ydv 2 октября 2011 в 16:26

ну, логика такая:
1. Получить uid(уиды) того кто нажал кнопку.
2. Загрузить его аватарку.

все это можно получить одним запросом, что-то типа:
$result = db_query("SELECT fc.uid,u.picture FROM {flag_content} fc
INNER JOIN {users} u ON u.uid = fc.uid WHERE fc.content_id = '%d'",$node->nid);

Для получения кол-ва проголосовавших смотри flag_get_counts();

Аватар пользователя Sanco2 Sanco2 4 октября 2011 в 0:32

ни осилил я запросы мудреные мускульные.
через views своего ума тоже не хватает аватары окоянные вывести.
челом бью бояре! поделитесь опытом мужи великомудрые, надоумьте.

Аватар пользователя Sanco2 Sanco2 4 октября 2011 в 2:04

Счетчик с божьей помощью вывел в ноду


<?php $result db_query("SELECT count FROM {flag_counts} WHERE content_id = '%d'",$node->nid);
$out db_fetch_array($result);
 print(
$out['count']);
?>

idшники пользователей тоже


<?php $result db_query("SELECT uid FROM {flag_content} WHERE content_id = '%d'",$node->nid);
while (
$out db_fetch_array($result))
{
print(
$out['uid']);
}
?> 

аватары пока не поборол т.к. вывожу их полем профиля(требовалось для удобства пользователей).

Аватар пользователя ydv ydv 4 октября 2011 в 13:06

для счетчика есть же готовая функция из самого flag, выше я писал.

Если у тебя аватары в каком то другом поле то смысл тот же, только запрос правильно составь.

Аватар пользователя Sanco2 Sanco2 4 октября 2011 в 14:25

"ydv" wrote:
Для получения кол-ва проголосовавших смотри flag_get_counts();

подумал что это тоже столбец или таблица в БД, не нашел и сделал из того что нашел в БД)
нашел инфу тут по этой переменной буду копать.

аватары полем профиля выводятся.таблица profile_values столбцы: fid(id поля), uid (id пользовтаеля), value (путь до аватара)
логику вывода аватаров представляю примерно так:
-смотрим id проголосовавших пользователей flag_content -> uid
-выводим из profile_values для таких же uid, value при fid=3
может проще как то можно?

я вот никак не догоню как это во views засунуть.

Аватар пользователя ydv ydv 4 октября 2011 в 17:44

$result = db_query("SELECT fc.uid,pv.value FROM {flag_content} fc
INNER JOIN {profile_values} pv ON u.uid = pv.uid WHERE fc.content_id = '%d'",$node->nid);

для вывода во views можно использовать шаблон строки какой-нибудь
или views_customfield и создать поле с произвольным php кодом, только там будет не $node->nid a $data->nid

Аватар пользователя Sanco2 Sanco2 5 октября 2011 в 0:46

огромный человеческий респект за [module=views_customfield] это вещь!

но к сожалению код пока ошибки выдает. пока не разобрался.
вставляю:

<? php
$result = db_query("SELECT fc.uid,pv.value FROM {flag_content} fc
INNER JOIN {profile_values} pv ON u.uid = pv.uid WHERE fc.content_id = '%d'"
,$data->nid);
 ?>

выдает:
Parse error: syntax error, unexpected T_VARIABLE in ...all/modules/views_customfield/includes/views_customfield_handler_field_phpcode.inc(118) : eval()'d code on line 2

Аватар пользователя Sanco2 Sanco2 5 октября 2011 в 2:01

Буратино был тупой
можно все через views разрулить без хардкора с кодом. проглядел что при добавлении взаимосвязи "флаги:флаг ноды" появляется взаимосвязь "флаги: пользователь(Отметивший пользователь)". => добавляем поле "аватар" со связью "Отметивший пользователь". и вуаля)

Аватар пользователя ingumsky@drupal.org ingumsky@drupal.org 5 октября 2011 в 20:04

"Sanco2" wrote:
можно все через views разрулить без хардкора с кодом. проглядел что при добавлении взаимосвязи "флаги:флаг ноды" появляется взаимосвязь "флаги: пользователь(Отметивший пользователь)". => добавляем поле "аватар" со связью "Отметивший пользователь". и вуаля)

Мои поздравления Smile

Аватар пользователя Sanco2 Sanco2 7 октября 2011 в 2:09

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

Аватар пользователя ingumsky@drupal.org ingumsky@drupal.org 7 октября 2011 в 21:25

Посмотрите на д.о модуль Views Ajax (как-то так), который позволяет обновлять views по внешнему событию. После этого достаточно дописать пару строчек кода для того, чтобы при клике по ссылке флага обновлялся ваш views.

Аватар пользователя Sanco2 Sanco2 10 ноября 2015 в 11:47

не правильно обяснил, миль мардон)
сделал вьюху, вывожу в блоке полями. настройки pic_1. результат pic_2. при нажатии "иду" генериться еще одна вьюха pic_3. и так для каждого пользователя. по задумке ко вьюхе просто добовляются аватары плюсанувших.

Аватар пользователя Sanco2 Sanco2 10 октября 2011 в 23:17

где то с аргументами туплю. на странице материала аватары плюсанувших нормально отображаются, а на странице автора где выводиться вышеописанный блок(материалы пользователя в профиле автора) никак не поборю.