Событие onClick делает +1
Доброго времени суток, сделал вот такие соц. кнопки, но столкнулся с проблемой подсчета количества нажатий, долго мучал получение оригинальных данных с серверов соц. сетей!
Подумываю, как бы сделать простую запись в файл на 3 счетчика? |
Цитата:
|
В каком плане не надежно?
|
Ну клик по соцкнопке не всегда приводит к посту в соцсети. Юзер может бросить дело на полпути, или тупо инет обрубиться именно в этот момент или еще что-нибудь.
В общем можно сделать счетчик именно "кликов" по кнопкам, но не числа "лайков/шарингов" в соцсетях. |
Цитата:
|
<script> Share = { vkontakte: function(purl, ptitle, pimg, text) { url = 'http://vkontakte.ru/share.php?'; url += 'url=' + encodeURIComponent(purl); url += '&title=' + encodeURIComponent(ptitle); url += '&description=' + encodeURIComponent(text); url += '&image=' + encodeURIComponent(pimg); url += '&noparse=true'; Share.popup(url); }, odnoklassniki: function(purl, text) { url = 'http://www.odnoklassniki.ru/dk?st.cmd=addShare&st.s=1'; url += '&st.comments=' + encodeURIComponent(text); url += '&st._surl=' + encodeURIComponent(purl); Share.popup(url); }, gplus: function(purl, text) { url = 'https://plus.google.com/share?'; url += 'url=' + encodeURIComponent(purl); Share.popup(url); }, popup: function(url) { window.open(url,'','toolbar=0,status=0,width=626,height=436'); } }; </script> <a class="social" id="vk" onclick="Share.vkontakte('http://electrick.dp.ua/','Вызов электрика в Днепропетровске.','http://electrick.dp.ua/images/me.jpg','Опытный электрик выполнит все виды электромонтажных работ')" title=""> |
Тебе нужно:
1) Скрипт на сервере, который будет принимать аякс-запросы на инкремент счетчика, а также отдавать все счетчики либо аяксом либо сразу же, при генерации страницы. Хранить счетчики лучше в бд, но хочешь - храни в файле, в json-формате. 2) Скрипт на js, который будет слать на сервер запрос на инкремент счетчика в момент клика по кнопке. Добавь например функцию increment() в свой Share, в нем XMLHttpRequest() объект, который будет слать запрос на сервер, с указанием названия соцсети по которой кликнули. Вызывай эту функцию из каждой соцсети. 3) Сделать вывод состояния счетчиков. В момент загрузки скраницы делаешь аякс запрос на получение состояния, по ответу проходишь по своим кнопочкам и выводишь в них циферки. Вместа якса можешь сразу выводить сервером либо сразу в html либо в js и из js уже в html. Модифицируешь скрипты чтобы при инкременте счетчика сервер возвращал состояние счетчика и js его тут же выводил в кнопку. |
Цитата:
Не могли бы вы сделать простенький примерчик сего чуда!? Пожалуйста! |
файл: {"gplus":0, "vk": 0}
php: $network = $_POST['network']; $data = json_decode(file_get_contents('social-counters.json'), true); $data[$network]++; file_put_contents('social-counters.json', json_encode($data)); header('Content-Type: text/plain'): // отдаем текущее значение счетчика. echo $data[$network]; Или вместо json можно .ini заюзать. Шлешь post запрос /increment.php с телом network={тутимясоцсети}. По XMLHttpRequest гугли. Остальное сам. |
Цитата:
у функций file_get_contents, file_put_contents есть параметр $context, который позволяет передавать post, get и ... $result = json_decode(file_get_contents( $url, false, // use_include_path stream_context_create(array( 'http' => array( 'method' => 'GET', 'header' => "Content-Type: type=application/json\r\nX-Requested-With: XMLHttpRequest" ) )) )); printf("<pre>%s</pre>", print_r($result, true)); |
Часовой пояс GMT +3, время: 11:40. |