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

Тема в разделе "Lotus - Программирование", создана пользователем Cleric-Lviv, 6 июн 2009.

  1. Cleric-Lviv

    Cleric-Lviv Lotus team
    Lotus team

    Регистрация:
    3 янв 2008
    Сообщения:
    605
    Симпатии:
    0
    Всем привет вобщем вопрос таков.

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

    как я ето вижу

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

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

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

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    думаю, что самый сложный вопрос, который у тебя возникнет при реализации, будет как сделать так, чтобы один человек мог голосовать единожды, если будет возможность анонимного голосования...
     
  3. NetWood

    NetWood Lotus team
    Lotus team

    Регистрация:
    17 апр 2008
    Сообщения:
    308
    Симпатии:
    0
  4. azat20

    azat20 Well-Known Member

    Регистрация:
    22 июл 2008
    Сообщения:
    244
    Симпатии:
    0
    Просто делаешь кнопку, по нажатию вываливается листбох с оценками. Юзер выбирает, нажимает ОК. Этот юзер записывается в мультивалуе поле. Оценку записываем в поле суммы, которое формируется как сумма всех баллов деленное на количество проголосовавших. Всего у меня используется 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)
     
  5. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Прежде чем предлагать решение, необходимо определиться с техническими параметрами проектируемой системы. Поэтому сначала ответьте себе и нам на следующие вопросы:

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

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

    Cleric-Lviv Lotus team
    Lotus team

    Регистрация:
    3 янв 2008
    Сообщения:
    605
    Симпатии:
    0
    Всем спасибо за пищу для размишлений:)

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

    Azat

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


    NetWood

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

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

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Тогда нельзя организовывать сохранение оценки так, чтоб пользователи модифицировали один и тотже документ. Я бы рекомендовал каждую оценку в отдельный документ записывать. Респонсный либо вообще в отдельных БД. Не будет головной боли с конфликтами. Итоги собирать агентом или лукапом, в зависимости от требуемой оперативности и загруженности сервака. После закрытия голосования оценки можно удалять или архивировать, сохранив итоги. Для обеспечения однократности голосования писать в документ имя пользователя. Анонимусов не пускать или обойтись куками с идентификаторами фоток. Есть кука - не даём голосовать N дней с данного рабочего места. Для голосования за детские рисунки такая защита вполне приемлема.
     
  8. Cleric-Lviv

    Cleric-Lviv Lotus team
    Lotus team

    Регистрация:
    3 янв 2008
    Сообщения:
    605
    Симпатии:
    0
    У меня проскакивала такая идея чтоб все голосовали в отдельной базе даже можна сделать так чтоб на всех 600 человек бил сделан именной документ......и тут уже б небило никаких претензий что ктото подтосовал ресультат..... каждий может проголосовать только один раз ну и виставить за 3 найлутшие фото оценки......
     
  9. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    ну, если голосуют только зарегистрированные пользователи, то с анонимными лучше не париться, я думаю, что это ни к чему. во всяком случае, добавление анонимного голосования можно сделать опцией, т.е. в конце.

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

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

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

    Cleric-Lviv Lotus team
    Lotus team

    Регистрация:
    3 янв 2008
    Сообщения:
    605
    Симпатии:
    0
    Akupaka

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

    Cleric-Lviv Lotus team
    Lotus team

    Регистрация:
    3 янв 2008
    Сообщения:
    605
    Симпатии:
    0
    TIA
    что такое "кука" простите за столь глупий вопрос:unsure:))) я еще не постиг и 20 % прелестей нотес.............
     
  12. NetWood

    NetWood Lotus team
    Lotus team

    Регистрация:
    17 апр 2008
    Сообщения:
    308
    Симпатии:
    0
    зал в шоке ((:)unsure:))) артисты в обмороке
    http://z-oleg.com/secur/articles/cookies.php

    Код (Text):
    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}
     
  13. Cleric-Lviv

    Cleric-Lviv Lotus team
    Lotus team

    Регистрация:
    3 янв 2008
    Сообщения:
    605
    Симпатии:
    0
    NetWood

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

Поделиться этой страницей