Как реализовать рейтинг материалов в информере звёздами?
|
|
|
2013-05-11Дата: Суббота, 11.05.2013, 00:36 | Сообщение # 16 |
Лейтенант
Группа: Проверенные
Статус: Offline
|
Доброго времени суток... Стандартно (системно) нет. Возвращаюсь к "рейтингу" - есть идея как это сделать))... Опишу как выглядит рейтинг: У всех материалов оценка остается стандартная, допустим 5 звезд. А в самом материале три отдельных поля для голосования. Пример приведу с участием девушек -
Внешний вид - *** Грудь - голосовать ***** Попа - голосовать * а ниже кнопка - проголосовать, активная после выставления всех оценок и сообщение "Ваш голос учтено, спасибо, бла, бла".
После клика на "голосовать" скрипт должен передавать в стандартную голосовалку среднее число всех трех оценок. Ну, например, сложить все результаты, поделить на три и записать это число как голос пользователя....
Возможно ли сотворить сие чудо? И сколько$)) Естественно, радости не было бы предела, если бы скрипт сохранял средний рейтинг трех пунктов, например, посредством пхп, записывая результаты в отдельный файлик. Спасибо..
| | |
|
|
2013-05-11Дата: Суббота, 11.05.2013, 02:09 | Сообщение # 17 |
Аццкий кодер
Группа: Администраторы
Статус: Unknown
|
chila, После клика на "голосовать" скрипт должен передавать в стандартную голосовалку среднее число всех трех оценок. Ну, например, сложить все результаты, поделить на три и записать это число как голос пользователя.... Все бы хорошо, НО:
1. Число может быть не целым, а передать можно только целое. Следовательно округление == неточность.
2. Результат невозможно разложить на составляющие, после голосования. Например: За бюст: 30 баллов; Очарование: 50 баллов: Формы: 35 баллов:
3. Это всегда будет средняя оценка. И число не более 5.
После клика на "голосовать" скрипт должен передавать в стандартную голосовалку среднее число всех трех оценок. Нет. Не совсем так. Среднее и не более 5 число. То ест 9 передать не возможно.
Естественно, радости не было бы предела, если бы скрипт сохранял средний рейтинг трех пунктов, например, посредством пхп, записывая результаты в отдельный файлик Вот как раз об этом я выше и писал )
Ну а если php .. то что уж мелочиться )) Там можно и не только средний, но и кто, за что, как и когда .. ) и короткий коммент если нужно ) ..
| | |
|
|
2013-05-11Дата: Суббота, 11.05.2013, 03:05 | Сообщение # 18 |
Лейтенант
Группа: Проверенные
Статус: Offline
|
)) если число не целое - округлить можно. Среднее и не более 5 число. То ест 9 передать не возможно. Более 5 не получится. Если за каждый пункт отдали 5* = 15, ну и делим на три пункта, получаем средне = 5, передаем юкозу. Или 5* + 3* + 2* / 3 = 3,33 - округляем, передаем юкозу оценку 3*.
Если идем путем пхп, то записываем значения трех пунктов в файлик и отображаем на странице. Если проголосовало несколько человек, то делим на кол-во голосовавших и получаем нужный нам результат. Тобесть по примеру стандартного голосования (рейтинга) - заходим в материал и видим его рейтинг, например 4, 5 звезда пустая. Кто, когда, за что - это лишнее) И.. сколько$.. За мной не заржавеет. Естественно в разумных пределах)
| | |
|
|
2013-05-11Дата: Суббота, 11.05.2013, 05:45 | Сообщение # 19 |
Аццкий кодер
Группа: Администраторы
Статус: Unknown
|
chila, если число не целое - округлить можно. Да, конечно, о чем и написал )
Более 5 не получится. Если за каждый пункт отдали 5* = 15, ну и делим на три пункта, получаем средне = 5, передаем юкозу. Или 5* + 3* + 2* / 3 = 3,33 - округляем, передаем юкозу оценку 3*. Все хорошо, если пункты ограничены выпадающим списком, например с оценками, а если просто поля ) Ну это уже тех. моменты.. можно и проверит и выдать предупреждение и тп.
округляем, передаем юкозу оценку 3* Если вас это устраивает, то и не надо лесть в php, это и так реально.
Точно не скажу. Если не горит, то оформляете как это будет выглядеть, пишите как должно работать, примерно, будет время напишу.
| | |
|
|
2013-05-11Дата: Суббота, 11.05.2013, 12:04 | Сообщение # 20 |
Лейтенант
Группа: Проверенные
Статус: Offline
|
Нет, никаких полей для ввода цифр не будет. Все стандартно, все те же звезды, как и всегда в юкозе используются. Принцип их действия тот же - при наведении меняют цвет, а при нажатии - фиксируют результат. Набросал схему, прикрепил ниже. Без пхп, ну а как эти три пункта (пункты я имел ввиду 1пункт - бюст и т.д.) будут при загрузке страницы показывать их среднее значение...? Этот результат записывать куда-то нужно или я ошибаюсь? По срокам - не горит. Буду очень признателен, в долгу не останусь. Спасибо!
| | |
|
|
2013-05-11Дата: Суббота, 11.05.2013, 14:35 | Сообщение # 21 |
Аццкий кодер
Группа: Администраторы
Статус: Unknown
|
chila, Нет, никаких полей для ввода цифр не будет. Все стандартно, все те же звезды, как и всегда в юкозе используются. Да, что-то я не подумал об этом ))
Цитата “Содержат средний результат нажатия по ним” Результат невозможно разложить на составляющие, после голосования.
Без пхп, ну а как эти три пункта (пункты я имел ввиду 1пункт - бюст и т.д.) будут при загрузке страницы показывать их среднее значение...? Без php никак.
| | |
|
|
2013-05-11Дата: Суббота, 11.05.2013, 15:07 | Сообщение # 22 |
Лейтенант
Группа: Проверенные
Статус: Offline
|
Результат невозможно разложить на составляющие, после голосования. Средний результат имеется ввиду, что на конкретной странице в этом пункте проголосовало N кол-во человек в среднем 3*, например можно в пхп сделать таблицей в файле, ну или как это называется (не знаю) наподобие такого: ID материала | результат 1-го пункта (1человек + 2-й + 3-й) | результат второго пункта | результат 3-го пункта | кол-во голосов... и т.д. результаты складываются и делятся на кол-во голосовавших. Допустим, что за материал проголосовало 3 человека, за первый пункт первый поставил 3*, второй 5*, а третий поставил 4* - в сумме = 12* / 4 = 3* В итоге, в первом пункте среднее будет 3*.. ну и так далее. Т.е. в таблице суммируются значения и делятся на кол-во голосовавших. Средние значения в голосовалке стандартной тоже получатся правильные. Без пхп можно сделать без запоминания средних результатов, но все же они нужны. Прикрепил картинку средних результатов нескольких голосовавших...
| | |
|
|
2013-05-11Дата: Суббота, 11.05.2013, 16:46 | Сообщение # 23 |
Аццкий кодер
Группа: Администраторы
Статус: Unknown
|
chila, Средний результат имеется ввиду Вы имеете в виду php а я стандартное голосование которое выдает одну цифру а не три. Про php и так все понятно.
| | |
|
|
2013-06-06Дата: Четверг, 06.06.2013, 22:36 | Сообщение # 24 |
Лейтенант
Группа: Проверенные
Статус: Offline
|
)) да, да... стандартным голосованием разделить не получится... Спасибо, буду ждать результатов... Если цену не выставляете, значит переведу на свое усмотрение) Добавлено (06.06.2013, 22:36) --------------------------------------------- Доброго времени суток... Если не горит, то оформляете как это будет выглядеть, пишите как должно работать, примерно, будет время напишу. Не хотелось бы надоедать, но все же очень хочется лицезреть выше оговоренный скриптик, поэтому решил напомнить)
| | |
|
|
2013-06-06Дата: Четверг, 06.06.2013, 22:43 | Сообщение # 25 |
Аццкий кодер
Группа: Администраторы
Статус: Unknown
|
chila, но все же очень хочется лицезреть выше оговоренный скриптик Да это не совсем скриптик.. Понадобится внешняя база и хост с php.. Реализовать на “юкоз php” тоже можно, но тестить негде, ... И.. пока нет.
| | |
|
|
2013-06-07Дата: Пятница, 07.06.2013, 01:33 | Сообщение # 26 |
Лейтенант
Группа: Проверенные
Статус: Offline
|
Понадобится внешняя база и хост с php.. Возможно, финансовая поддержка поможет.. например оплатить пхп на юкозе.)
Раз пишу здесь, прошу помочь еще с одной маленькой деталью. Есть готовый и даже рабочий js, который меняет стандартную юкозовскую дату:
Код <script> $('.news-d').each(function(){ date = String($(this).attr('title')).split('.'); temp_date = new Date(); day = temp_date.getDate(); month = temp_date.getMonth() + 1; if(month < 10) { month = '0'+month;} if(date[0] == 'Вчера'){ date[0] = day-1; if(date[0] == 0){ if(month < 10) { temp_date = new Date(); day = temp_date.getDate()-1; month = temp_date.getMonth(); date[0] = day ; date[1] = '0'+month;}} else {date[1] = month;} } if(date[0] == 'Сегодня') { date[1] = month; date[0] = day; } mes = ''; switch(date[1]){ case '01': mes = 'января'; break; case '02': mes = 'февраля'; break; case '03': mes = 'марта'; break; case '04': mes = 'апреля'; break; case '05': mes = 'мая'; break; case '06': mes = 'июня'; break; case '07': mes = 'июля'; break; case '08': mes = 'августа'; break; case '09': mes = 'сентября'; break; case '10': mes = 'октября'; break; case '11': mes = 'ноября'; break; case '12': mes = 'декабря'; break; } $(this).html('<b>'+date[0]+'</b><br><span>'+mes+'</span>'); }) </script>
Ищет в <div class="news-d" title="$DATE$"></div> и меняет "07.06.2013" на "07 июня"... Вопрос: хотелось бы, чтобы добавлялся класс, если дата больше текущей или меньше. Например, сегодня 07.06.2013, а материал добавлен 06.06.2013 то к диву добавляется класс ".old_date", т.к. добавленный материал устарел и дата меньше. Если дата больше (будущее), то другой класс: ".future_date". Если дата текущая, ничего не меняем. Заранее спасибо!
| | |
|
|
2013-06-07Дата: Пятница, 07.06.2013, 02:08 | Сообщение # 27 |
Аццкий кодер
Группа: Администраторы
Статус: Unknown
|
chila, Если дата больше (будущее), то другой класс: ".future_date" А это как это? .. материал добавлен завтра?) Ну вот так: Где нибудь в глобальном блоке, помещаем блок с датой, если есть в шаблоне то заменяем, смысл - что бы была на странице: Код <span id="curDate">$DATE$</span> Ну и в скрипте добавляем: Код var thisDate=Math.round($(this).attr('title').replace(/\./g,'')), curDate=Math.round($('#curDate').html().replace(/\./g,''))||false; if(curDate&&curDate!=thisDate){ if(thisDate<curDate){ $(this).addClass('old_date'); }else{ $(this).addClass('future_date'); } }; Все вместе вот так: Код <script type="text/javascript"> $('.news-d').each(function(){ var thisDate=Math.round($(this).attr('title').replace(/\./g,'')),curDate=Math.round($('#curDate').html().replace(/\./g,''))||false; if(curDate&&curDate!=thisDate){ if(thisDate<curDate){ $(this).addClass('old_date'); }else{ $(this).addClass('future_date'); } }; var date = String($(this).attr('title')).split('.'); temp_date = new Date(); day = temp_date.getDate(); month = temp_date.getMonth() + 1; if(month < 10) { month = '0'+month;} if(date[0] == 'Вчера'){ date[0] = day-1; if(date[0] == 0){ if(month < 10) { temp_date = new Date(); day = temp_date.getDate()-1; month = temp_date.getMonth(); date[0] = day ; date[1] = '0'+month;}} else {date[1] = month;} } if(date[0] == 'Сегодня') { date[1] = month; date[0] = day; } mes = ''; switch(date[1]){ case '01': mes = 'января'; break; case '02': mes = 'февраля'; break; case '03': mes = 'марта'; break; case '04': mes = 'апреля'; break; case '05': mes = 'мая'; break; case '06': mes = 'июня'; break; case '07': mes = 'июля'; break; case '08': mes = 'августа'; break; case '09': mes = 'сентября'; break; case '10': mes = 'октября'; break; case '11': mes = 'ноября'; break; case '12': mes = 'декабря'; break; } $(this).html('<b>'+date[0]+'</b><br><span>'+mes+'</span>'); }) </script> Не проверял, но должно работать.
| | |
|
|
2013-06-07Дата: Пятница, 07.06.2013, 02:39 | Сообщение # 28 |
Лейтенант
Группа: Проверенные
Статус: Offline
|
Не проверял, но должно работать. ) заработало, но что-то не так.... 1) если текущая дата ставит future_date, а нужно ничего не ставить 2) от 1 до 5 дней назад ставит old_date - правильно 3) если больше 5 дней назад, ставит future_date - почему?) 4) к будущим датам вроде нормально добавляет future_date ))загадка
.. спасибо за оперативный ответДобавлено (07.06.2013, 02:39) --------------------------------------------- Выше написанный код (если не ошибаюсь) нельзя помещать в функцию. Он может запускаться только во время загрузки сайта т.е. как есть. Но, хотелось бы запускать его по нажатию на кнопку... Если помните, делали скрипт для подтягивания страниц. Если новые страницы подгружаются то этот скрипт должен снова заработать и переделать даты в новые даты...
| | |
|
|
2013-06-07Дата: Пятница, 07.06.2013, 08:29 | Сообщение # 29 |
Аццкий кодер
Группа: Администраторы
Статус: Unknown
|
chila, 1) если текущая дата ставит future_date, а нужно ничего не ставить А у вас часом текущая дата не выводится как «сегодня»?
3) если больше 5 дней назад, ставит future_date - почему?) Ну да, точно, развернуть дату надо, YYYY, MM, DD
Выше написанный код (если не ошибаюсь) нельзя помещать в функцию Почему нельзя? можно.
| | |
|
|
2013-06-07Дата: Пятница, 07.06.2013, 15:16 | Сообщение # 30 |
Лейтенант
Группа: Проверенные
Статус: Offline
|
развернуть дату надо, YYYY, MM, DD Если развернуть дату, то остальной скрипт выводит день как год... текущая дата действительно стоит "сегодня"))) Ну и как поместить в функцию, дабы потом вызвать ее в случае надобности Спасибо)Добавлено (07.06.2013, 11:51) --------------------------------------------- Возможно, лучше развернуть дату не в настройках юкоза, а в скрипте, чтобы результат был с YYYY.MM.DD в YYYY.MM.DD?) Добавлено (07.06.2013, 11:52) ---------------------------------------------
ошибся) dd.mm.yyyy в yyyy.mm.ddДобавлено (07.06.2013, 15:16) --------------------------------------------- Методом "тыка" сделал так: var date = String($(this).attr('title')).split('.').reverse(); даты отображаются правильно и остальное все работает правильно. Но, все же, если функцией reverse() менять не "var date", а var thisDate=Math.round($(this).attr('title').replace(/\./g,'')),curDate=Math.round($('#curDate').html().replace(/\./g,''))||false; то куда ее прописать здесь или что изменить, чтобы перед удалением точек срабатывал реверс для thisDate и curDate? Спасибо
| | |
|