нашел готовый скрипт голосования по система плюса (+) и минуса (-) не могу понять как заставить его определять в какой именно пост было произведено голосование, а также отличать голования в пост от голосований в комментарии. адрес дэмки http://demos.99points.info/digg_style_rating/ код скрипта http://vtrigazety.ru/ajax.rar ну или возможно вам известен какой нить готовый скриптик отвечающий этим требованиям в принципе я хочу написать так чтобы скрипт отправлял данные в комментарии и в профиль юзера или в пост и в профиль юзера а также вел историю голосований дабы один и тодже пользователь не мог дважды проголосовать за один пост или комментарий не подскажите как это сделать? или быть может вам известен готовый скрипт соответствующий этим параметрам? то что в идеале хочу получить можно посмотреть здесь http://jquery.vtrigazety.ru/ Оживить пытаюсь вот это Код (Text): <div class="blogpostsminus"><a href="#">-</a></div> <div class="blogpostsplus"><a href="#">+</a></div> <div class="blogpostsball"><a href="#"></a></div>
[js] $(document).ready(function(){ $('.vwidget').children('a').click(function(){ var a = $(this).attr("id"); if(a == 1) var container = 'upcount'; else var container = 'downcount'; $.post("rating.php?value="+a, { }, function(response){ //$('.upcount').fadeOut(); $('.'+container).html(unescape(response)); $('.'+container).fadeIn(); }); }); $('#diggs0').click(function(){ $.post("rating.php?v=1", { }, function(response){ $('#diggs-strong').html(unescape(response)); $('#diggs-strong').fadeIn(); }); }); }); [/js] в 4 строке он интересуется атрибутом "id" в теге "a" которые лежат в ком-то класса "vwidget". Если этот "id" равен единице, то считается что это "upcount", иначе - "downcount". А что это?.. Смотрим пример. HTML: <div id="vwidget-419919" class="vwidget"> <a class="upcount" href="#" id="1"><?php echo $row['up_rated']?></a> <a class="downcount" href="#" id="2"><?php echo $row2['down_rated']?></a> </div> О том, за кого голосуется - он мог бы узнать из id="vwidget-419919", но видимо такими мелочами данный код вобще не заморачивается. Мягко скажем код мне не нравится =)
это вывод инфы на сайте в варианте кода который в демке, но я хочу сделать так чтобы цеплялось Код (Text): <div class="blogpostsminus"><a href="#">-</a></div> <div class="blogpostsplus"><a href="#">+</a></div> <div class="blogpostsball"><a href="#"></a></div> сделать нечто вроди Код (Text): пост1 <div class="blogpostsminus"><a class="upcount" href="javascript: void(0)" id="1">-</a></div> <div class="blogpostsplus"><a class="upcount" href="javascript: void(1)" id="1">+</a></div> <div class="blogpostsball"><a href="#"></a></div> пост2 <div class="blogpostsminus"><a class="upcount" href="javascript: void(0)" id="2">-</a></div> <div class="blogpostsplus"><a class="upcount" href="javascript: void(1)" id="2">+</a></div> <div class="blogpostsball"><a href="#"></a></div> и тд коммент1 <div class="blogcommentsminus"><a class="upcount" href="javascript: void(0)" id="1">-</a></div> <div class="blogcommentsplus"><a class="upcount" href="javascript: void(1)" id="1">+</a></div> <div class="blogcommentsball"><a href="#"></a></div> коммент2 <div class="blogcommentsminus"><a class="upcount" href="javascript: void(0)" id="2">-</a></div> <div class="blogcommentsplus"><a class="upcount" href="javascript: void(1)" id="2">+</a></div> <div class="blogcommentsball"><a href="#"></a></div> ну или както по другому, в общем чтобы работало
<a onclick="vote(1123421,'u')"></a> <a onclick="vote(1123421,'d')"></a> <a onclick="vote(1123421,'1')"></a><a onclick="vote(1123421,'2')"></a><a onclick="vote(1123421,'3')"></a>... В функции уже обрабатывать номер поста и оценки или че там... И делать выводы, действия и т.п. Ломиться аяксом на пхп скрипт, получать результаты голосования, выписывать их... А в чем беда-то так сделать?
можно так Код (Text): <a onclick="vote(1123421,'u')"></a> + балл к посту id 1123421 <a onclick="vote(1123421,'d')"></a> - балл к посту id 1123421 здесь тогда что будет? [js]<script type="text/javascript"> // <![CDATA[ $(document).ready(function(){ $('.vwidget').children('a').click(function(){ var a = $(this).attr("id"); if(a == 1) var container = 'upcount'; else var container = 'downcount'; $.post("rating.php?value="+a, { }, function(response){ //$('.upcount').fadeOut(); $('.'+container).html(unescape(response)); $('.'+container).fadeIn(); }); }); $('#diggs0').click(function(){ $.post("rating.php?v=1", { }, function(response){ $('#diggs-strong').html(unescape(response)); $('#diggs-strong').fadeIn(); }); }); }); // ]]> </script>[/js]
Vantedur здесь тогда что будет? Ничего там не будет. на эту каку вобще смотреть не надо. http://api.jquery.com/jQuery.ajax/ надо делать типа примерно так [js] function vote (id, action) { reply = jQuery.ajax({ type: "POST", url: "vote.php", data: "id="+id+"&action="+action }).responseText; }[/js] и в пхп уже плясать как нравится. Эта... Можно json запрос мутить. он jquery хорошо поддерживается и обрабатывается удобно.
не пойму что не так? [js]<script type='text/javascript'> function vote (id, action) { reply = jQuery.ajax({ type: "POST", url: "post.php", data: "id="+id+"&action="+action }).responseText; } </script>[/js] Код (Text): <a onclick="vote(<?php echo $line[0];?>,'u')">-</a> PHP: <?php $id = $_POST['id']; $blogpostsminus = $_POST['action']; $sql="SELECT id, ball FROM blogposts WHERE id='".$id."'"; $cur_votes = $line[1]; $post_minus = $cur_votes[0]-1; $sSQL="UPDATE blogposts SET ball='".$post_minus."' WHERE id='".$id."'"; ?>
нарыл отличную голосовалку однако она столь огромная что не понятно как её с php завязать. http://vtrigazety.ru/lepra.png принт скрин линк на код http://leprosorium.ru/js/voting.js?rev=121 [js]function initVoting(type, parentElementId){ var voteBlocks = getElementsByClassName($(parentElementId), 'div', 'vote'); if(voteBlocks.length == 0) return; switch (type){ case "posts": VoteBlock.type = VoteBlock.typePost; VoteBlock.theChoiceElement = $('vote_choice'); VoteBlock.initChoiceElements(); for (var i=0; i<voteBlocks.length; i++){ new VoteBlock(voteBlocks); } break; case "comments": VoteBlock.type = VoteBlock.typeComment; for (var i=0; i<voteBlocks.length; i++){ new VoteBlockComments(voteBlocks); //initShrink(voteBlocks.parentNode); } break; case "lepraposts": VoteBlock.type = VoteBlock.typePost; for (var i=0; i<voteBlocks.length; i++){ new VoteBlockComments(voteBlocks); } break; default: break; } } function initShrink(parent){ if(getElementsByClassName(parent, 'a', 'show_link').length == 0) return; var showLink = getElementsByClassName(parent, 'a', 'show_link')[0]; showLink.onclick = function (){ removeClass(this.parentNode.parentNode.parentNode, 'shrinked'); return false; } } /* Класс VoteBlock (для голосования с плюсом и лопатой) ***************************************************************/ function VoteBlock(htmlObj){ this.htmlObj = htmlObj; // контейнер, содержащий все элементы голосования if (getElementsByClassName(this.htmlObj, 'a', 'plus').length == 0){ return; } this.htmlObjChildren = this.htmlObj.getElementsByTagName('*'); this.htmlGlobalParent = htmlObj.parentNode.parentNode; // родительский контейнер всего поста //this.htmlGlobalParent = htmlObj.parentNode; // родительский контейнер this.plusBtn = getElementsByClassName(this.htmlObj, 'a', 'plus')[0]; // контейнер с кнопкой + this.minusBtn = getElementsByClassName(this.htmlObj, 'a', 'minus')[0]; // контейнер с кнопкой - this.rating = getElementsByClassName(this.htmlObj, 'span', 'rating')[0].firstChild; // контейнер с рейтингом this.htmlObj.obj = this; this.plusBtn.obj = this; this.minusBtn.obj = this; this.rating.obj = this; this.voteType = VoteBlock.type; this.initChoiceEvents(); } // Статическое свойство VoteBlock.theChoiceElement VoteBlock.theChoiceElement = {}; // html контейнер с элементами выбора, перемещаемый по дереву документа (всегда имеет родителем this.htmlGlobalParent) VoteBlock.theChoiceElement.elements = []; // массив всех элементов списка VoteBlock.theChoiceElement VoteBlock.theChoiceElement.currentObj = {}; // ссылка на объект класса VoteBlock, внутри которого сейчас находится VoteBlock.theChoiceElement VoteBlock.urlVoting = "/rate/?"; // url при голосовании + - VoteBlock.type = ""; VoteBlock.typeComment = 0; // для указания, что голосуем по комментам VoteBlock.typePost = 1; // для указания, что голосуем по постам VoteBlock.wtf = ""; // // Статический метод, инициализирующий объект VoteBlock.theChoiceElement и все его элементы VoteBlock.initChoiceElements = function(){ VoteBlock.theChoiceElement.elements = VoteBlock.theChoiceElement.getElementsByTagName('a'); for (var i=0; i<VoteBlock.theChoiceElement.elements.length; i++){ VoteBlock.theChoiceElement.elements.onclick = function(){ if(matchClass(this, 'voted')){ return false; } else { var currentObj = VoteBlock.theChoiceElement.currentObj; var postId = currentObj.htmlGlobalParent.getAttribute('id').substring(1); var choiceValue = this.getAttribute('choiceValue'); var url = VoteBlock.urlVoting + "wtf=" + VoteBlock.wtf + "&type=" + this.obj.voteType + "&id=" + postId + "&value=" + choiceValue; currentObj.setChoiceVoted(choiceValue); // отрисовываем выбранный элемент addClass(currentObj.htmlGlobalParent, 'loading'); // ставим прелоадер ajaxLoad(url, currentObj.onLoad, currentObj); // отправляем/получаем данные return false; } } } } VoteBlock.prototype.initChoiceEvents = function (){ this.htmlObj.onmouseout = function(e){ if(!e) e = window.event; this.obj.hideChoice(e); } // Кнопка + this.plusBtn.onmouseover = function(e){ if(!e) e = window.event; this.obj.hideChoice(e, this); } this.plusBtn.onclick = function(){ this.blur(); if(matchClass(this, 'voted')){ return false; } else { var postId = this.obj.htmlGlobalParent.getAttribute('id').substring(1); var choiceValue = 1; var url = VoteBlock.urlVoting + "wtf=" + VoteBlock.wtf + "&type=" + this.obj.voteType + "&id=" + postId + "&value=" + choiceValue; this.obj.setChoiceVoted(null); addClass(this, 'voted'); // отмечаем сделанный выбор addClass(this.obj.htmlGlobalParent, 'loading'); // ставим прелоадер ajaxLoad(url, this.obj.onLoad, this.obj); // отправляем/получаем данные return false; } } // Кнопка - this.minusBtn.onmouseover = function(){ this.obj.showChoice(); // отвратительный хак против IE6- (заставляет не скакать правую колонку) if(typeof document.body.style.maxWidth == 'undefined' && $('content_right_inner')){ $('content_right_inner').style.display = "none"; $('content_right_inner').style.display = "block"; } } this.minusBtn.onclick = function(){ this.blur(); return false; } } // Отрисовка блока VoteBlock.theChoiceElement VoteBlock.prototype.showChoice = function(){ if (typeof VoteBlock.theChoiceElement == 'undefined') return; VoteBlock.theChoiceElement.currentObj = this; // создаем ссылку на новый родительский объект у VoteBlock.theChoiceElement addClass(VoteBlock.theChoiceElement.currentObj.htmlGlobalParent, 'inuse'); // располагаем htmlGlobalParent поверх отсальных this.showChoiceVoted(); // отрисовываем текущий голосованный элемент this.htmlObj.appendChild(VoteBlock.theChoiceElement); VoteBlock.theChoiceElement.style.display = 'block'; } VoteBlock.prototype.hideChoice = function(e, obj){ if (typeof VoteBlock.theChoiceElement == 'undefined') return; // если mouseover на кнопке "плюс", скрываем чойс бокс if(obj && matchClass(obj, "plus")){ addClass(this.htmlGlobalParent, 'inuse'); // располагаем htmlGlobalParent поверх отсальных VoteBlock.theChoiceElement.style.display = 'none'; return; } // если элемент, на который передвигаем мышь, лежит внутри чойс блока, выходим if (e.relatedTarget) { var where = e.relatedTarget; if (where == this.htmlObj) return; if (where.nodeType == 3) where = where.parentNode; for(var i=0; i<this.htmlObjChildren.length; i++){ if (where == this.htmlObjChildren) { return; } } } else if (e.toElement && this.htmlObj.contains(e.toElement)) { return; } removeClass(this.htmlGlobalParent, 'inuse'); // снимаем свойство с htmlGlobalParent лежать поверх отсальных VoteBlock.theChoiceElement.style.display = 'none'; } // Отрисовка пункта, за который проголосовали, в списке элементов VoteBlock.theChoiceElement VoteBlock.prototype.showChoiceVoted = function (){ var currentChoiceValue = this.minusBtn.getAttribute('choiceValue'); for (var i=0; i<VoteBlock.theChoiceElement.elements.length; i++){ var currentElement = VoteBlock.theChoiceElement.elements; if (currentElement.getAttribute('choiceValue') == currentChoiceValue){ addClass(currentElement, 'voted'); } else { removeClass(currentElement, 'voted'); } } } // Установка нового выбранного значения в списке элементов VoteBlock.theChoiceElement VoteBlock.prototype.setChoiceVoted = function(choiceMinusValue){ this.minusBtn.setAttribute('choiceValue', choiceMinusValue); if(matchClass(this.plusBtn, 'voted')) { removeClass(this.plusBtn, 'voted'); } this.showChoiceVoted(); } VoteBlock.prototype.onLoad = function (ajaxObj){ var newRating = ajaxObj.responseText; this.rating.innerHTML = newRating; removeClass(this.htmlGlobalParent, 'loading'); // убираем прелоадер } /* Подкласс VoteBlockComments (для голосования с плюсом и минусом) *************************************************************************/ function VoteBlockComments (htmlObj){ VoteBlockComments.baseConstructor.call(this, htmlObj); } VoteBlockComments.inheritFrom(VoteBlock); VoteBlockComments.prototype.initChoiceEvents = function (){ this.htmlObj.onmouseout = function(e){ if(!e) e = window.event; this.obj.hideChoice(e); } // Кнопка + this.plusBtn.onmouseover = function(e){ return false; } this.plusBtn.onclick = function(){ this.blur(); if(matchClass(this, 'voted')){ return false; } else { var postId = this.obj.htmlGlobalParent.getAttribute('id'); var choiceValue = 1; var url = VoteBlock.urlVoting + "wtf=" + VoteBlock.wtf + "&type=" + this.obj.voteType + "&id=" + postId + "&value=" + choiceValue; addClass(this, 'voted'); // отмечаем сделанный выбор removeClass(this.obj.minusBtn, 'voted') // снимаем отметку о противоположном голосовании addClass(this.obj.htmlGlobalParent, 'loading'); // ставим прелоадер ajaxLoad(url, this.obj.onLoad, this.obj); // отправляем/получаем данные return false; } } // Кнопка - this.minusBtn.onmouseover = function(){ return false; } this.minusBtn.onclick = function(){ this.blur(); if(matchClass(this, 'voted')){ return false; } else { var postId = this.obj.htmlGlobalParent.getAttribute('id'); var choiceValue = -1; var url = VoteBlock.urlVoting + "wtf=" + VoteBlock.wtf + "&type=" + this.obj.voteType + "&id=" + postId + "&value=" + choiceValue; addClass(this, 'voted'); // отмечаем сделанный выбор removeClass(this.obj.plusBtn, 'voted') // снимаем отметку о противоположном голосовании addClass(this.obj.htmlGlobalParent, 'loading'); // ставим прелоадер addClass(this.obj.htmlGlobalParent, 'shrinked'); ajaxLoad(url, this.obj.onLoad, this.obj); // отправляем/получаем данные return false; } return false; } this.rating.onmouseover = function(){ this.obj.showChoice(); } } VoteBlockComments.prototype.showChoice = function(){ addClass(this.htmlGlobalParent, 'inuse'); } VoteBlockComments.prototype.hideChoice = function(e, obj){ // если элемент, на который передвигаем мышь, лежит внутри чойс блока, выходим if (e.relatedTarget) { var where = e.relatedTarget; if (where == this.htmlObj) return; if (where.nodeType == 3) where = where.parentNode; for(var i=0; i<this.htmlObjChildren.length; i++){ if (where == this.htmlObjChildren) { return; } } //e.relatedTarget.style.border = "none"; // странно, но это побороло баг в Opere :/ } else if (e.toElement && this.htmlObj.contains(e.toElement)) { return; } removeClass(this.htmlGlobalParent, 'inuse'); } /* Класс VoteBlockUser (для голосования с 2 плюсами и 2 минусами по юзеру) *************************************************************************/ function initVotingUser (parentObjId){ var parentObj = $(parentObjId); var voteBlocks = parentObj.getElementsByTagName('strong'); if(voteBlocks.length == 0) return; var ratingBlock = getElementsByClassName(parentObj, 'span', 'rating')[0].firstChild; // контейнер с рейтингом for (var i=0; i<voteBlocks.length; i++){ new VoteBlockUser(voteBlocks, ratingBlock); } } function VoteBlockUser(htmlObj, ratingBlock){ this.htmlObj = htmlObj; this.htmlGlobalParent = htmlObj.parentNode.parentNode; // родительский контейнер всего поста this.plusBtn = getElementsByClassName(this.htmlObj, 'a', 'plus')[0]; // контейнер с кнопкой + this.minusBtn = getElementsByClassName(this.htmlObj, 'a', 'minus')[0]; // контейнер с кнопкой - this.rating = ratingBlock; this.htmlObj.obj = this; this.plusBtn.obj = this; this.minusBtn.obj = this; this.rating.obj = this; this.initChoiceEvents(); } VoteBlockUser.urlVoting = "/karma/"; // url при голосовании + - VoteBlockUser.wtf = ""; // VoteBlockUser.prototype.initChoiceEvents = function (){ this.plusBtn.onclick = function(){ this.blur(); if(matchClass(this, 'voted')){ return false; } else { var userId = this.obj.htmlGlobalParent.getAttribute('uid'); var choiceValue = this.getAttribute('choiceValue'); var url = VoteBlockUser.urlVoting; var data = "wtf=" + VoteBlockUser.wtf + "&u_id=" + userId + "&value=" + choiceValue; addClass(this, 'voted'); // отмечаем сделанный выбор removeClass(this.obj.minusBtn, 'voted') // снимаем отметку о противоположном голосовании addClass(this.obj.htmlGlobalParent, 'loading'); // ставим прелоадер ajaxLoadPost(url, data, this.obj.onLoad, this.obj); // отправляем/получаем данные return false; } } this.minusBtn.onclick = function(){ this.blur(); if(matchClass(this, 'voted')){ return false; } else { var userId = this.obj.htmlGlobalParent.getAttribute('uid'); var choiceValue = this.getAttribute('choiceValue'); var url = VoteBlockUser.urlVoting; var data = "wtf=" + VoteBlockUser.wtf + "&u_id=" + userId + "&value=" + choiceValue; addClass(this, 'voted'); // отмечаем сделанный выбор removeClass(this.obj.plusBtn, 'voted') // снимаем отметку о противоположном голосовании addClass(this.obj.htmlGlobalParent, 'loading'); // ставим прелоадер ajaxLoadPost(url, data, this.obj.onLoad, this.obj); // отправляем/получаем данные return false; } return false; } } VoteBlockUser.prototype.onLoad = function (ajaxObj){ var newRating = ajaxObj.responseText; this.rating.innerHTML = newRating; removeClass(this.htmlGlobalParent, 'loading'); // убираем прелоадер } /* Альтернативные функции */ var wtf_vote = null; function vote (linkBtn, post_id){ linkBtn.blur(); if(matchClass(linkBtn, 'voted')) return false; var linkGlobalParent = linkBtn.parentNode.parentNode.parentNode.parentNode; var id = linkGlobalParent.id; var linkParent = linkBtn.parentNode; var rating = getElementsByClassName(linkParent, 'span', 'rating')[0].firstChild; // контейнер с рейтингом var value; var oppositeBtn; var showLink = getElementsByClassName(linkGlobalParent, 'a', 'show_link')[0]; if (matchClass(linkBtn, 'plus')){ value = 1; oppositeBtn = getElementsByClassName(linkParent, 'a', 'minus')[0]; } else { value = -1; oppositeBtn = getElementsByClassName(linkParent, 'a', 'plus')[0]; if(typeof noShrink != 'undefined'){ noShrink(showLink); } //addClass(linkGlobalParent, 'shrinked'); } addClass(linkBtn, 'voted'); // отмечаем сделанный выбор removeClass(oppositeBtn, 'voted') // снимаем отметку о противоположном голосовании addClass(linkGlobalParent, 'loading'); // ставим прелоадер var url = "/rate/"; var data = "type=0&wtf=" + wtf_vote + "&id=" + id + "&value=" + value + "&post_id=" + post_id; var params = {r:rating, gp:linkGlobalParent}; ajaxLoadPost(url, data, voteonLoad, window, params, votePostonError); // отправляем/получаем данные return false; } function voteonLoad(ajaxObj, params){ var rating = params.r; var linkGlobalParent = params.gp; var newRating = ajaxObj.responseText; rating.innerHTML = newRating; removeClass(linkGlobalParent, 'loading'); // убираем прелоадер } function showChoice(link){ var linkGlobalParent = link.parentNode.parentNode.parentNode.parentNode; addClass(linkGlobalParent, 'inuse'); } function hideChoice(e, obj){ var objChildren = obj.getElementsByTagName('*'); var objGlobalParent = obj.parentNode.parentNode; // если элемент, на который передвигаем мышь, лежит внутри чойс блока, выходим if (e.relatedTarget) { var where = e.relatedTarget; if (where == obj) return; if (where.nodeType == 3) where = where.parentNode; for(var i=0; i<objChildren.length; i++){ if (where == objChildren) { return; } } //e.relatedTarget.style.border = "none"; // странно, но это побороло баг в Opere :/ } else if (e.toElement && obj.contains(e.toElement)) { return; } removeClass(objGlobalParent, 'inuse'); } function votePost(linkBtn){ linkBtn.blur(); if(matchClass(linkBtn, 'voted')) return false; var linkGlobalParent = linkBtn.parentNode.parentNode.parentNode.parentNode; var id = linkGlobalParent.id; var linkParent = linkBtn.parentNode; var rating = getElementsByClassName(linkParent, 'span', 'rating')[0].firstChild; // контейнер с рейтингом if (matchClass(linkBtn, 'plus')){ value = 1; oppositeBtn = getElementsByClassName(linkParent, 'a', 'minus')[0]; } else { value = -1; oppositeBtn = getElementsByClassName(linkParent, 'a', 'plus')[0]; } addClass(linkBtn, 'voted'); // отмечаем сделанный выбор removeClass(oppositeBtn, 'voted'); addClass(linkGlobalParent, 'loading'); // ставим прелоадер var url = "/rate/"; var data = "type=1&wtf=" + wtf_vote + "&id=" + id + "&value=" + value; var params = {r:rating, gp:linkGlobalParent}; ajaxLoadPost(url, data, votePostonLoad, window, params, votePostonError); // отправляем/получаем данные return false; } function votePostonLoad(ajaxObj, params) { var rating = params.r; var linkGlobalParent = params.gp; var newRating = ajaxObj.responseText; rating.innerHTML = newRating; removeClass(linkGlobalParent, 'loading'); // убираем прелоадер removeClass(rating.parentNode, 'js-loading_error'); } function votePostonError(ajaxObj, params) { alert(ajaxObj.statusText); if (ajaxObj.statusText) { var errorText = (ajaxObj.statusText) ? ' ' + ajaxObj.statusText : ''; } else { var errorText = ''; } addClass(params.r.parentNode, 'js-loading_error'); params.r.title = 'Ошибка в получении данных.' + errorText; removeClass(params.gp, 'loading'); }[/js]
пипец за четыре дня можно было две своих написать =) ЗЫ: мое мнение такое. голосовалке классы не нужны и вобще это не сложный код строк на двести.
ну хз. мне просто всегда казалось, что бывает сложный код строчек на двести. И несложный код строчек на двести. Вот это как раз такой случай =)
этот код несложный, он нудный - манипуляции с дом деревом, если его переписать на jquery, то будет куда эстетичнее )
тут jQuery - то что доктор прописал. и работы на пол дня с отладкой. Зато у нас тут через четыре дня появился хз какой невротебенный код который только что ни делает: и мусор выноси и картошку бреет. Только хз как к нему подступиться Голосовалка это по сути всего-навсего UPDATE votes=votes+1 только просто надо обезопаситься от даблвотов и все. но это тоже не великое дело.
не поверишь но я уже не первый день только и делую что пытаюсь понять, как же её сделать. скрипт в принципе есть но как только не пытался реализовать, ну не работает нифига, в райнем случае перекидывает на саму страницу скрипта. в общем пхп исправно обрабатывает запросы http://vtrigazety.ru/post.php?id=2&action=minuspost http://vtrigazety.ru/post.php?id=2&action=pluspost http://vtrigazety.ru/post.php?id=2&action=minucomment http://vtrigazety.ru/post.php?id=2&action=pluscomment но вот остальное просто отвратительно [js]<script src="http://vtrigazety.ru/golosovanie/jquery-1.3.2.min.js" type="text/javascript"></script> <script type="text/javascript"> function getData(URL) { что сюда писать чтобы все заработало не понятно } </script>[/js] и к тому же я так и не понял как лучше обращаться к скрипту. Код (Text): <div class="blogpostsminus"><a href="http://vtrigazety.ru/post.php?id=1&action=minuspost" onclick="getData(this.href); ">-</a> <div class="blogpostsplus" ><a href="http://vtrigazety.ru/post.php?id=1&action=pluspost" onclick="getData(this.href); ">+</a>
Vantedur да ну ладно тебе. я ж вроде давал пример с аякс запросом к пхп файлу и передачей номера поста и количества желаемых к начислению баллов через гет. за чем же дело встало?
да мне нужен то скриптик который позволяет плюсануть или минусануть чела который это написал, звезды отвратительная вещь, совершенно не ясно, сколько ставить, а вот плюс или минус можно всегда поставить. да все верно но такую историю я пока еще не виду. пока просто + и - и а сверялку на повторы я напишу в post.php
блин, ну тогда мучайтесь. готовое решение не найдете, а взять напильник и чуток переделать это - дело 20 минут - 2 часов в зависимости от навыков