оценка фотки:)

Cleric-Lviv

Lotus team
03.01.2008
600
0
#1
Всем привет вобщем вопрос таков.

Как сделать в базе фотографий оценивание фоток, ну типу как на однокласниках.
За фотку мона проголосовать только 1 раз
все оценки сумируются

как я ето вижу

думаю надобно радио батон ну и оенка фотки 1,2,3,4,5
далее кликаем на кнопку предварительно вибрав оценку и записиваем все ето в какое нибудь поле. Запоминаем значение етого поля ну и потом просто плюсуєм вибраную оценку к суме поля......так?или лутше сделать чтоб било несколько полей и каждое отвечало за какаю нибудь оценку.........

Может ктото уже с таким баловался? помогитеплз.....

P.s базку будут откривать через веб интерфейс
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#2
думаю, что самый сложный вопрос, который у тебя возникнет при реализации, будет как сделать так, чтобы один человек мог голосовать единожды, если будет возможность анонимного голосования...
 

azat20

Well-known member
22.07.2008
244
0
#4
Просто делаешь кнопку, по нажатию вываливается листбох с оценками. Юзер выбирает, нажимает ОК. Этот юзер записывается в мультивалуе поле. Оценку записываем в поле суммы, которое формируется как сумма всех баллов деленное на количество проголосовавших. Всего у меня используется 4 поля. Вот код кнопки:

@If(@IsMember(@UserName; whovote); @Return(@Prompt([Ok];"Отказано"; "Вы уже голосовали за этот фильм!")); "");
ask := @Prompt([OkCancelCombo]; "Выберите оценку"; "Установите оценку для фильма" + @NewLine + "от 1(хрень полная) до 5(супер)";"3";"1":"2":"3":"4":"5");
@If(@IsDocBeingEdited;true;@Command([EditDocument];1));
@SetField("summrang";@TextToNumber(ask) + summrang);
@SetField("count";count + 1);
@SetField("whovote"; @Trim(@Unique(whovote : @UserName)));
@SetField("rating";@If(count!=0; summrang/count; 0));
@Prompt([Ok]; "Оценка принята"; "Спасибо за участие!" + @NewLine + "Текущий рейтинг: " + @Text(rating; "F2") + @NewLine + " Проголосовали " + @Text(count) + " человек");
@Command([FileSave]);
FIELD Saveoptions:=0;
@Command([EditDocument];0)
 

TIA

:-)
Lotus team
15.05.2009
790
3
#5
Прежде чем предлагать решение, необходимо определиться с техническими параметрами проектируемой системы. Поэтому сначала ответьте себе и нам на следующие вопросы:

1. Каково общее число пользователей?
2. Сколько пользователей одновременно могут работать с системой?
3. Какова вероятность, что за одну фотографию голосуют сразу несколько человек?
4. Каково максимальное число оценок одной фотографии?
5. Сколько серверов можно задействовать?
6. Другие важные эксплуатационные характеристики (кто добавит? :))

От ответов зависят решения таких проблем:
Число конфликтных документов и способы борьбы с ними.
Способы обхода оганичений Нотес. Например, если, хранить имена проголосовавших в одном многозначном поле. И даже если это поле сделать НЕ SUMMARY, то его максимальный размер 64кб. Допустим, в среднем размер Notes-имени в каноническом виде будет 24 б. Тогда получится, что проголосовать смогут 65536/24=2730 пользователей. Этого достаточно? Ну и так далее.
 

Cleric-Lviv

Lotus team
03.01.2008
600
0
#6
Всем спасибо за пищу для размишлений:)

На счет вопросааTIA количество пользователей приблизительно 600человек, сервак 1. максимум оценок 1 фотки равно 600. Вероятность голосования за 1 фотку большая.....(вобщем про роцес. дети работников рисовали на какуюто тему ну и вот решено било сделать маленький конкурс кто лутший ну и там подарки и все такое...... так что думаю если мать ребенка подала рисунок то она сможет настроить весь отдел голосовать за даний рисунок....)

Azat

ваше решение не подойдет к веб приложению...... а работать с етой базой будут только через веб....но все равно спасибки ....много пользного увидел.


NetWood

вам тоже отдельное спасибо посмотрю обязательно!

Akupaka
вот вот и я так думаю:lol:
 

TIA

:-)
Lotus team
15.05.2009
790
3
#7
Тогда нельзя организовывать сохранение оценки так, чтоб пользователи модифицировали один и тотже документ. Я бы рекомендовал каждую оценку в отдельный документ записывать. Респонсный либо вообще в отдельных БД. Не будет головной боли с конфликтами. Итоги собирать агентом или лукапом, в зависимости от требуемой оперативности и загруженности сервака. После закрытия голосования оценки можно удалять или архивировать, сохранив итоги. Для обеспечения однократности голосования писать в документ имя пользователя. Анонимусов не пускать или обойтись куками с идентификаторами фоток. Есть кука - не даём голосовать N дней с данного рабочего места. Для голосования за детские рисунки такая защита вполне приемлема.
 

Cleric-Lviv

Lotus team
03.01.2008
600
0
#8
У меня проскакивала такая идея чтоб все голосовали в отдельной базе даже можна сделать так чтоб на всех 600 человек бил сделан именной документ......и тут уже б небило никаких претензий что ктото подтосовал ресультат..... каждий может проголосовать только один раз ну и виставить за 3 найлутшие фото оценки......
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#9
ну, если голосуют только зарегистрированные пользователи, то с анонимными лучше не париться, я думаю, что это ни к чему. во всяком случае, добавление анонимного голосования можно сделать опцией, т.е. в конце.

Cleric-Lviv, я не понял, что ты имел в виду про именной док на всех? :unsure: один или каждому свой?
думаю, что можно было бы сделать каждому кто голосует по доку, это было бы вполне оптимально - тогда конфликтов быть не должно.

например, человек заходит голосовать. выбирает документ за который готов голосовать. указывает оценку, подтверждает голос.
в базе есть вид, содержащий документ-профиль голосующего, отсортированный по имени голосующего (Ключ1).
при подтверждении система находит в виде профиль голосующего, если нет - создает.
если пользователь уже голосовал за этот документ, то система ему об этом сообщает, иначе, в документ записывается инфа о том, за какой документ был отдан голос (например унид, или иной ключ, Ключ2), и кол-во балов (если оно нужно, а не просто голос учитывается). для этих данных можно использовать два многозначных поля, соотв. каждой записи в одном поле должна отвечать запись во втором (при таком подходе можно в профиле сохранить около 28000 / 32 = 875 голосований).
для определения кол-ва балов можно построить вид, с профилями голосования, категоризированный по Ключ2, тогда профиль будет светиться в виде столько раз, сколько раз проголосовали за определенный документ. если же в голосовании используется еще и бальная система, то тогда нужно посчитать сумму балов, по данным со второго поля.
кол-во балов за определенный документ можно вовсе не хранить в самом документе, за который голосовали, а считать при открытии этого дока, но будет нагрузка на базу, при ее массированном использовании. для упрощения нагрузки, можно серверным агентом пересчитывать голосования и писать их в документ - это уменьшит нагрузку и избавит от возможных конфликтов при записи кол-ва балов...

в общем, вот так, особо не обдуманно, может и криво :) но с такими задачами раньше не встречался...
 

Cleric-Lviv

Lotus team
03.01.2008
600
0
#10
Akupaka

да-да как ти и говорил каждому свой и пользователь видит только свой документ, и видит только свои бали к каждому рисунку! чтоб потом небило разговоов о том почему ти дал только 4 бали и все ткаое......
я думаю так будет найлутше......!!!!!!!!!!!!!!!!!
 

Cleric-Lviv

Lotus team
03.01.2008
600
0
#11
TIA
что такое "кука" простите за столь глупий вопрос:unsure:))) я еще не постиг и 20 % прелестей нотес.............
 

NetWood

Lotus team
17.04.2008
372
18
#12
зал в шоке ((:)unsure:))) артисты в обмороке
http://z-oleg.com/secur/articles/cookies.php

Код:
function _doGetCookie (name) {
var start = document.cookie.indexOf( name + '=' );
var len = start + name.length + 1;
if ( ( !start ) && ( name != document.cookie.
substring( 0, name.length ) ) ) {
return null;
}
if ( start == -1 ) return null;
var end = document.cookie.indexOf( ';', len );
if ( end == -1 ) end = document.cookie.length;
return unescape( document.cookie.substring( len, end ) );
}

function _doSetCookie (name,value,type,scope) {
if (value==null | value=='null' | value=='') {return ''} else {
var expdate=new Date(); 
expdate.setTime(expdate.getTime()+365*24*60*60*1000); 
if (scope!='') {name='onimod_'+onimod_dbid+'_'+name} else {name='onimod_'+name}
if (type=='session') {document.cookie=name+'='+value+'; path=/'}
else {document.cookie=name+'='+value+'; expires='+expdate.toGMTString()+'; path=/'}}}

function delete_cookie (name, path) {
var expiration_date=new Date();
expiration_date.setYear(expiration_date.getYear ()-1);
expiration_date=expiration_date.toGMTString();
var cookie_string=escape (name)+"=; expires="+expiration_date;
if (path!=null) {cookie_string+="; path="+path}
document.cookie=cookie_string}
 

Cleric-Lviv

Lotus team
03.01.2008
600
0
#13
NetWood

ето ви правильно подметили:unsure:)))) я думал что ето какая нибудь специальная штука в лотусе.................