С Новым годом! Форум программистов, компьютерный форум, киберфорум
jQuery
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 1
Регистрация: 21.03.2015
Сообщений: 21
1

Не получается адаптировать код

17.03.2016, 06:56. Показов 1103. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Решил на днях ради развлекухи создать онлайн голосовалку, где под каждой фоткой 3 кнопки: "3 балла", "4 балла", "5 баллов"

Функционал написал на PHP, верстка на bootstrap, но появилась небольшая проблема не могу реализовать блокировку кнопок

Предположим у меня 3 участницы
Кнопки под первой: id="1", id="2", id="3"
Кнопки под второй: id="4", id="5", id="6"
Кнопки под третьей: id="7", id="8", id="9"

Что я пытаюсь сделать:
При нажатии на кнопку id=1 блокируются все элементы (на 24 часа) у участницы (id=1, id=2, id=3) и к тому же блокируются id="4" и id="7" //Голосовалка из разряда неадекватных :write: , но, чем сложнее задача, тем интереснее)

Хорошо знаю HTML5, PHP5, CSS3, SQL
Можно, конечно, эту задачу решить на ПХП, но код получается грамозким и тяжелым, в то время как js можно решить эту задачу через куки парой десятков строк кода.

Стыд мне и позор, но JS я не знаю, читаю книги сейчас, а голосовалку хочется закончить в ближайшие 2 дня.

Буду благодарен за любую помощь/код/совет

Что нашел в Google (не получается адоптировать):

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
Появилась задача - сделать конкурс с защитой от накрутки ip+cookies. Именно конкурс, а не опрос. Готовых решений не нашёл (есть реализация через webform'ы, но мне она показалась тёмным лесом).
За основу взял модуль Vote up/down (поскольку в стандартных функциях проверка по ip там уже есть, так зачем же изобретать велосипед, причём не факт что с круглыми колёсами :) ).
 
Скажу сразу - делал всё на js+jquery, т.к. с php некоторое время назад пытался сделать то же самое, получалось сложнее и более громоздко. Итак.
 
Этап первый.
Для голосования за фотографию (или какой либо другой элемент) нам нужна только кнопка vote-up, то есть "+".
Дело за малым - ищем, как к нему подобраться через любой удобный для вас просмотр кода элемента. Каждая такая кнопка имеет класс .up-inactive, который при нажатии меняется на .up-active. Для отслеживания голосов за несколько участников нам необходимо отслеживать id кнопки, но загвоздка в том, что ближайший элемент, который имеет уникальный идентификатор – блок с классом .vud-widget. Считаем уровень вложенности кнопки, относительно этого блока – получился 3. Порывшись в интернетах нашёл метод .parentNode, который позволяет перейти с «активного» элемента на уровень выше. Кнопку мы нашли. Теперь нужно привязать к ней действия.
 
Этап второй.
Определяем функции для установки и считывания cookies. (найдено на сайте, код не мой). 
[JS]
//Просмотреть куки
function getCookie(name) {
        var cookie = " " + document.cookie;
        var search = " " + name + "=";
        var setStr = null;
        var offset = 0;
        var end = 0;
        if (cookie.length > 0) {
                offset = cookie.indexOf(search);
                if (offset != -1) {
                        offset += search.length;
                        end = cookie.indexOf(";", offset)
                        if (end == -1) {
                                end = cookie.length;
                        }
                        setStr = unescape(cookie.substring(offset, end));
                }
        }
        return(setStr);
}
 
//установить куки
function setCookie (name, value, expires, path, domain, secure) {
      document.cookie = name + "=" + escape(value) +
        ((expires) ? "; expires=" + expires : "") +
        ((path) ? "; path=" + path : "") +
        ((domain) ? "; domain=" + domain : "") +
        ((secure) ? "; secure" : "");
}
[/JS]
Этап третий.
Формируем непосредственно cookies. Логика проста – при нажатии на соответствующую кнопку мы записываем в куки id её родителя (это нам пригодится на этапе запрещения голосования). 
[JS]$('.vud-widget .up-score .up-inactive').click(function(){
        b=getCookie("test");//смотрим, есть ли уже что-либо в cookie
        if (b===null) {a=this.parentNode.parentNode.parentNode.id} //проверяем, если пусто, то сохраняем одно значение id родителя
                else {a=this.parentNode.parentNode.parentNode.id+','+b}; //если не пусто, то при помощи конкатенации через запятую (или любой другой удобный для вас разделитель) формируем строку из id'шников кнопок.
        setCookie("test", a, "01-Jan-2013 00:00:00 GMT", "/"); //собственно записываем в cookies строку, которая полчилась
        });
        });[/JS]
Этап четвёртый.
Последний этап. Мы проверяем, записана ли в куки нужная нам строка, разбиваем строку на массив элементов и меняем класс кнопки с .up-inactive на .up-active, дабы запретить голосование.
[JS]if (getCookie("test")!==null) { //Если куки не пустые, то
                        var ids=getCookie("test"); //присваиваем локальной переменной строку кукисов,
                        var arr = ids.split(','); //разбиваем её на массив элементов, используя указанный разделитель
                        len=arr.length; //количество элементов массива
                        for (var i=0;i<len;i++) {
                                var elem='#'+arr[i]+'.vud-widget .up-score .vud-link-up div'; //в этом блоке и меняем класс .up-inactive .up-active
                                if ($(elem).hasClass('up-inactive')) {
                                        $(elem).removeClass('up-inactive');
                                        $(elem).addClass('up-active');
                                        }
                        }
                };[/JS]
Важно, чтобы скрипты были в $(document).ready(function() {.
Вот собственно и всё.
Спасибо)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.03.2016, 06:56
Ответы с готовыми решениями:

Не получается адаптировать сайт
Ребят посмотрите где косяк вот сайт http://grodno.parikmaherskie.by Когда через мобилу заходишь в...

Как адаптировать код WMI под код Visual Studio 2010?
Доброе время суток всем. Подскажите пожалуйста для новичка, что бы можно было разобраться, как...

Не получается адаптировать сайт html под мобильную версию
не получается адаптировать сайт html под мобильную версию, ребят, кто может помочь, прошу, очень...

Адаптировать код
Парни помогите и объясните, не могу найти ошибку... программа писалась в Pascal ABC, а предоставить...

3
84 / 84 / 41
Регистрация: 14.02.2015
Сообщений: 320
17.03.2016, 21:15 2
Лучший ответ Сообщение было отмечено ПКС как решение

Решение

А в чем проблема-то?
Кнопкам можно дописать еще классы, например, first (первая кнопка ряда), second and third.
А потом (раз спрашиваешь в подфоруме jQuery) делается на jQuery:
Javascript
1
2
3
4
5
$('button').click(function() {
     $(this).siblings().attr('disabled', 'disabled');
     var class = "." + $(this).attr('class');
     $(class).attr('disabled', 'disabled');
});
1
0 / 0 / 1
Регистрация: 21.03.2015
Сообщений: 21
18.03.2016, 02:22  [ТС] 3
За помощь спасибо, но немного не понимаю, где в этом коде скрипт определяет что элемент class=first?

Добавлено через 4 минуты
Если я правильно почитал по JS, мне как-то нужно сначала проверить элемент на наличие у него класса. Что-то вроде этого if ( $('button').hasClass('first')
0
84 / 84 / 41
Регистрация: 14.02.2015
Сообщений: 320
18.03.2016, 15:58 4
ПКС,
Цитата Сообщение от ПКС Посмотреть сообщение
За помощь спасибо, но немного не понимаю, где в этом коде скрипт определяет что элемент class=first?
Вот здесь:
Javascript
1
var class = "." + $(this).attr('class');
1
18.03.2016, 15:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.03.2016, 15:58
Помогаю со студенческими работами здесь

Адаптировать код под opendialog
Здравствуйте могли бы вы помочь адаптировать код под opendialog вот сам код Var SL: TStringList;...

Адаптировать код под Dev C++
using System; //программа перевода градусов Фаренгейта в градусы Цельсия namespace p1 { ...

Адаптировать код из Turbo Pascal
Помогите пожалуйста, код написанный на Turbo Pascal не работает в pascal abc: PROGRAM...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru