• Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Модератор форума: likbezz  
Скрипты и коды для юкоз - Форум аццкого кодера » Как сделать? Информация для вновь прибывших » Как сделать... » Как реализовать рейтинг материалов в информере звёздами? (Звёздный рейтинг в информере. Условные операторы.)
Как реализовать рейтинг материалов в информере звёздами?
Дата: Суббота, 11.05.2013, 00:36 |
chila
Лейтенант
Группа: Проверенные
Сообщений: 70
Награды: 0
Репутация: 0
Статус: Offline


Доброго времени суток...
Цитата (likbezz, Ср, 10.04.2013, 20:03:03)
Стандартно (системно) нет.

Возвращаюсь к "рейтингу" - есть идея как это сделать))...
Опишу как выглядит рейтинг:
У всех материалов оценка остается стандартная, допустим 5 звезд. А в самом материале три отдельных поля для голосования. Пример приведу с участием девушек -

Внешний вид - ***
Грудь - голосовать *****
Попа - голосовать *
а ниже кнопка - проголосовать, активная после выставления всех оценок и сообщение "Ваш голос учтено, спасибо, бла, бла".

После клика на "голосовать" скрипт должен передавать в стандартную голосовалку среднее число всех трех оценок. Ну, например, сложить все результаты, поделить на три и записать это число как голос пользователя....

Возможно ли сотворить сие чудо? И сколько$)) Естественно, радости не было бы предела, если бы скрипт сохранял средний рейтинг трех пунктов, например, посредством пхп, записывая результаты в отдельный файлик. Спасибо..


 
Дата: Суббота, 11.05.2013, 02:09 |
likbezz
Аццкий кодер
Группа: Администраторы
Сообщений: 9093
Награды: 23
Репутация: 459
Статус: Unknown


chila,
Цитата (chila, Сб, 11.05.2013, 00:36:36)
После клика на "голосовать" скрипт должен передавать в стандартную голосовалку среднее число всех трех оценок. Ну, например, сложить все результаты, поделить на три и записать это число как голос пользователя....

Все бы хорошо, НО:

1. Число может быть не целым, а передать можно только целое. Следовательно округление == неточность.

2. Результат невозможно разложить на составляющие, после голосования.
Например:
За бюст: 30 баллов;
Очарование: 50 баллов:
Формы: 35 баллов:

3. Это всегда будет средняя оценка. И число не более 5.

Цитата (chila, Сб, 11.05.2013, 00:36:36)
После клика на "голосовать" скрипт должен передавать в стандартную голосовалку среднее число всех трех оценок.

Нет.
Не совсем так.
Среднее и не более 5 число.
То ест 9 передать не возможно.

Цитата (chila, Сб, 11.05.2013, 00:36:36)
Естественно, радости не было бы предела, если бы скрипт сохранял средний рейтинг трех пунктов, например, посредством пхп, записывая результаты в отдельный файлик

Вот как раз об этом я выше и писал )

Ну а если php .. то что уж мелочиться ))
Там можно и не только средний, но и кто, за что, как и когда .. ) и короткий коммент если нужно )
..


 
Дата: Суббота, 11.05.2013, 03:05 |
chila
Лейтенант
Группа: Проверенные
Сообщений: 70
Награды: 0
Репутация: 0
Статус: Offline


)) если число не целое - округлить можно.
Цитата (likbezz, Сб, 11.05.2013, 01:09:46)
Среднее и не более 5 число.
То ест 9 передать не возможно.
Более 5 не получится. Если за каждый пункт отдали 5* = 15, ну и делим на три пункта, получаем средне = 5, передаем юкозу. Или 5* + 3* + 2* / 3 = 3,33 - округляем, передаем юкозу оценку 3*.

Если идем путем пхп, то записываем значения трех пунктов в файлик и отображаем на странице. Если проголосовало несколько человек, то делим на кол-во голосовавших и получаем нужный нам результат. Тобесть по примеру стандартного голосования (рейтинга) - заходим в материал и видим его рейтинг, например 4, 5 звезда пустая.
Кто, когда, за что - это лишнее)
И.. сколько$.. За мной не заржавеет. Естественно в разумных пределах)


 
Дата: Суббота, 11.05.2013, 05:45 |
likbezz
Аццкий кодер
Группа: Администраторы
Сообщений: 9093
Награды: 23
Репутация: 459
Статус: Unknown


chila,
Цитата (chila, Сб, 11.05.2013, 03:05:37)
если число не целое - округлить можно.

Да, конечно, о чем и написал )

Цитата (chila, Сб, 11.05.2013, 03:05:37)
Более 5 не получится. Если за каждый пункт отдали 5* = 15, ну и делим на три пункта, получаем средне = 5, передаем юкозу. Или 5* + 3* + 2* / 3 = 3,33 - округляем, передаем юкозу оценку 3*.

Все хорошо, если пункты ограничены выпадающим списком, например с оценками, а если просто поля )
Ну это уже тех. моменты.. можно и проверит и выдать предупреждение и тп.

Цитата (chila, Сб, 11.05.2013, 03:05:37)
округляем, передаем юкозу оценку 3*

Если вас это устраивает, то и не надо лесть в php, это и так реально.

Цитата (chila, Сб, 11.05.2013, 03:05:37)
И.. сколько$..

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


 
Дата: Суббота, 11.05.2013, 12:04 |
chila
Лейтенант
Группа: Проверенные
Сообщений: 70
Награды: 0
Репутация: 0
Статус: Offline


Нет, никаких полей для ввода цифр не будет. Все стандартно, все те же звезды, как и всегда в юкозе используются. Принцип их действия тот же - при наведении меняют цвет, а при нажатии - фиксируют результат.
Набросал схему, прикрепил ниже. Без пхп, ну а как эти три пункта (пункты я имел ввиду 1пункт - бюст и т.д.) будут при загрузке страницы показывать их среднее значение...? Этот результат записывать куда-то нужно или я ошибаюсь?
По срокам - не горит. Буду очень признателен, в долгу не останусь. Спасибо!

Прикрепления: 8206221.jpg (63.3 Kb)

 
Дата: Суббота, 11.05.2013, 14:35 |
likbezz
Аццкий кодер
Группа: Администраторы
Сообщений: 9093
Награды: 23
Репутация: 459
Статус: Unknown


chila,
Цитата (chila, Сб, 11.05.2013, 12:04:53)
Нет, никаких полей для ввода цифр не будет. Все стандартно, все те же звезды, как и всегда в юкозе используются.

Да, что-то я не подумал об этом ))

Цитата
“Содержат средний результат нажатия по ним”

Результат невозможно разложить на составляющие, после голосования.

Цитата (chila, Сб, 11.05.2013, 12:04:53)
Без пхп, ну а как эти три пункта (пункты я имел ввиду 1пункт - бюст и т.д.) будут при загрузке страницы показывать их среднее значение...?

Без php никак.


 
Дата: Суббота, 11.05.2013, 15:07 |
chila
Лейтенант
Группа: Проверенные
Сообщений: 70
Награды: 0
Репутация: 0
Статус: Offline


Цитата (likbezz, Сб, 11.05.2013, 13:35:13)
Результат невозможно разложить на составляющие, после голосования.

Средний результат имеется ввиду, что на конкретной странице в этом пункте проголосовало N кол-во человек в среднем 3*, например можно в пхп сделать таблицей в файле, ну или как это называется (не знаю) наподобие такого:
ID материала | результат 1-го пункта (1человек + 2-й + 3-й) | результат второго пункта | результат 3-го пункта | кол-во голосов... и т.д.
результаты складываются и делятся на кол-во голосовавших. Допустим, что за материал проголосовало 3 человека, за первый пункт первый поставил 3*, второй 5*, а третий поставил 4* - в сумме = 12* / 4 = 3* В итоге, в первом пункте среднее будет 3*.. ну и так далее. Т.е. в таблице суммируются значения и делятся на кол-во голосовавших. Средние значения в голосовалке стандартной тоже получатся правильные. Без пхп можно сделать без запоминания средних результатов, но все же они нужны. Прикрепил картинку средних результатов нескольких голосовавших...

Прикрепления: 7984131.jpg (40.1 Kb)

 
Дата: Суббота, 11.05.2013, 16:46 |
likbezz
Аццкий кодер
Группа: Администраторы
Сообщений: 9093
Награды: 23
Репутация: 459
Статус: Unknown


chila,
Цитата (chila, Сб, 11.05.2013, 15:07:52)
Средний результат имеется ввиду

Вы имеете в виду php а я стандартное голосование которое выдает одну цифру а не три.
Про php и так все понятно.


 
Дата: Четверг, 06.06.2013, 22:36 |
chila
Лейтенант
Группа: Проверенные
Сообщений: 70
Награды: 0
Репутация: 0
Статус: Offline


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

Добавлено (06.06.2013, 22:36)
---------------------------------------------
Доброго времени суток...

Цитата (likbezz, Сб, 11.05.2013, 04:45:36)
Если не горит, то оформляете как это будет выглядеть, пишите как должно работать, примерно, будет время напишу.

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


 
Дата: Четверг, 06.06.2013, 22:43 |
likbezz
Аццкий кодер
Группа: Администраторы
Сообщений: 9093
Награды: 23
Репутация: 459
Статус: Unknown


chila,
Цитата (chila, Чт, 06.06.2013, 22:36:18)
но все же очень хочется лицезреть выше оговоренный скриптик

Да это не совсем скриптик..
Понадобится внешняя база и хост с php..
Реализовать на “юкоз php” тоже можно, но тестить негде, ...
И.. пока нет.


 
Дата: Пятница, 07.06.2013, 01:33 |
chila
Лейтенант
Группа: Проверенные
Сообщений: 70
Награды: 0
Репутация: 0
Статус: Offline


Цитата (likbezz, Чт, 06.06.2013, 21:43:39)
Понадобится внешняя база и хост с 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". Если дата текущая, ничего не меняем.
Заранее спасибо!


 
Дата: Пятница, 07.06.2013, 02:08 |
likbezz
Аццкий кодер
Группа: Администраторы
Сообщений: 9093
Награды: 23
Репутация: 459
Статус: Unknown


chila,
Цитата (chila, Пт, 07.06.2013, 01:33:06)
Если дата больше (будущее), то другой класс: ".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>

Не проверял, но должно работать.


 
Дата: Пятница, 07.06.2013, 02:39 |
chila
Лейтенант
Группа: Проверенные
Сообщений: 70
Награды: 0
Репутация: 0
Статус: Offline


Цитата (likbezz, Пт, 07.06.2013, 01:08:16)
Не проверял, но должно работать.

) заработало, но что-то не так....
1) если текущая дата ставит future_date, а нужно ничего не ставить
2) от 1 до 5 дней назад ставит old_date - правильно
3) если больше 5 дней назад, ставит future_date - почему?)
4) к будущим датам вроде нормально добавляет future_date
))загадка

.. спасибо за оперативный ответ

Добавлено (07.06.2013, 02:39)
---------------------------------------------
Выше написанный код (если не ошибаюсь) нельзя помещать в функцию. Он может запускаться только во время загрузки сайта т.е. как есть. Но, хотелось бы запускать его по нажатию на кнопку... Если помните, делали скрипт для подтягивания страниц. Если новые страницы подгружаются то этот скрипт должен снова заработать и переделать даты в новые даты...

 
Дата: Пятница, 07.06.2013, 08:29 |
likbezz
Аццкий кодер
Группа: Администраторы
Сообщений: 9093
Награды: 23
Репутация: 459
Статус: Unknown


chila,
Цитата (chila, Пт, 07.06.2013, 02:39:19)
1) если текущая дата ставит future_date, а нужно ничего не ставить

А у вас часом текущая дата не выводится как «сегодня»?

Цитата (chila, Пт, 07.06.2013, 02:39:19)
3) если больше 5 дней назад, ставит future_date - почему?)

Ну да, точно, развернуть дату надо, YYYY, MM, DD

Цитата (chila, Пт, 07.06.2013, 02:39:19)
Выше написанный код (если не ошибаюсь) нельзя помещать в функцию

Почему нельзя? можно.


 
Дата: Пятница, 07.06.2013, 15:16 |
chila
Лейтенант
Группа: Проверенные
Сообщений: 70
Награды: 0
Репутация: 0
Статус: Offline


Цитата (likbezz, Пт, 07.06.2013, 07:29:46)
развернуть дату надо, YYYY, MM, DD

Если развернуть дату, то остальной скрипт выводит день как год...
текущая дата действительно стоит "сегодня")))
Ну и как поместить в функцию, дабы потом вызвать ее в случае надобности
Спасибо)

Добавлено (07.06.2013, 11:51)
---------------------------------------------
Возможно, лучше развернуть дату не в настройках юкоза, а в скрипте, чтобы результат был с YYYY.MM.DD в YYYY.MM.DD?)

Добавлено (07.06.2013, 11:52)
---------------------------------------------

Цитата (chila, Пт, 07.06.2013, 10:51:17)
YYYY.MM.DD в YYYY.MM.DD

ошибся) 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?
Спасибо

 
Скрипты и коды для юкоз - Форум аццкого кодера » Как сделать? Информация для вновь прибывших » Как сделать... » Как реализовать рейтинг материалов в информере звёздами? (Звёздный рейтинг в информере. Условные операторы.)
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Поиск:


Мобильная версия