Ограничение на добавление материалов
|
|
|
2014-02-07Дата: Пятница, 07.02.2014, 17:35 | Сообщение # 1 |
Рядовой
Группа: Проверенные
Статус: Offline
|
Здравствуйте! Необходима помощь в решении проблемы. У меня есть сайт на uCoz с открытой доской объявлений. Очень много пользователей добавляют свой материал множество раз. Модераторы устают модерировать все это дело. Решили, что было бы не плохо сделать какое-то ограничение на добавление своего материала. Один пользователь может добавлять в день только 2 объявления, если же он хочет добавить третье, то ему пишет "Вы можете добавлять только 2 объявления в день." Я думаю следует реализовать с помощью PHP и API uCoz.
Алгоритм: 1) Пользователь заходит на страницу добавления материала (доска объявлений), заполняет поля. 2) При нажатии на кнопочку Добавить материал выполняется скрипт, который проверяет ICQ, AOL пользователя (в профиле и редактировании инфы пользователя скрыто). (В поле ICQ мы будем записывать количество добавленных материалов в текущий день (1, 2), а в AOL - дату (дд.мм.гг) когда эти объявления были добавлены) 4) Скрипт сравнивает текущую дату (дд.мм.гг) и значение поля AOL. Если совпадение, то переходим к проверке поля ICQ: - если поле пустое, то записывается = 1, скрипт завершает работу и материал успешно добавляется - если поле = 1, то добавляем еще 1, скрипт завершает работу и материал успешно добавляется - если поле = 2, то скрипт выдает пользователю сообщение "Вы можете добавлять только 2 объявления в день.", завершает работу и материал не добавляется Если же дата (поле AOL) не совпадает с текущей, то поля ICQ и AOL очищаются и в них записываются новые данные (1 и текущая дата), скрипт завершает работу и материал успешно добавляется.
Теперь вопросы: Возможно ли вообще все это реализовать на uCoz? Если да: Оптимален ли алгоритм? Возможно есть другие варианты? Как получить значение полей ICQ и AOL пользователя, который добавляет материал? Как перезаписать значения этих полей? Как отменить добавление, когда пользователь нажал на кнопку Добавить?
Буду очень благодарен человеку, который хоть как-то поможет решить проблему!
| | |
|
|
2014-02-07Дата: Пятница, 07.02.2014, 19:46 | Сообщение # 2 |
Аццкий кодер
Группа: Администраторы
Статус: Unknown
|
nulledb, Возможно ли вообще все это реализовать на uCoz? Возможно. Нет. Возможно есть другие варианты? Куки Как получить значение полей ICQ и AOL пользователя, который добавляет материал? GET апросом на страницу пользователя. Как перезаписать значения этих полей? POST запросом. Как отменить добавление, когда пользователь нажал на кнопку Добавить? Это хреново - заставлять пользователя заполнять поля, а потом обламывать. Надо проверять ДО этого момента. Как отменить добавление, когда пользователь нажал на кнопку Добавить? Скриптом - Возвратить false.
| | |
|
|
2014-02-07Дата: Пятница, 07.02.2014, 20:56 | Сообщение # 3 |
Рядовой
Группа: Проверенные
Статус: Offline
|
likbezz, спасибо, что ответили! Вы можете привести хотя бы примитивный пример реализации с помощью куков?
Скриптом - Возвратить false. Как именно?
Это хреново - заставлять пользователя заполнять поля, а потом обламывать. Надо проверять ДО этого момента. Тогда нужно перезагружать страницу после каждого добавления материала, ибо пользователь может попросту тыкать Добавить, закрывать ajax окошко "Материал добавлен" и опять тыкать Добавить.
| | |
|
|
2014-02-07Дата: Пятница, 07.02.2014, 21:22 | Сообщение # 4 |
Аццкий кодер
Группа: Администраторы
Статус: Unknown
|
nulledb, Вы можете привести хотя бы примитивный пример реализации с помощью куков? Как вы себе это представляете?
Там две возможности - событие submit и встроенная функция openery
Тогда нужно перезагружать страницу после каждого добавления материала, ибо пользователь может попросту тыкать Добавить, закрывать ajax окошко "Материал добавлен" и опять тыкать Добавить. Это уже ... подробности - решаются по месту - проверять можно и два раза. А еще лучше - после добавления просто очищать форму. Или выгружать пользователя со страницы добавления. Варианты есть если подумать, и получше чем обламывать после заполнения всех полей.
| | |
|
|
2014-02-07Дата: Пятница, 07.02.2014, 22:23 | Сообщение # 5 |
Рядовой
Группа: Проверенные
Статус: Offline
|
Как вы себе это представляете? Ну хотя бы сам алгоритм и какие-то участки кода. Если вам не трудно, конечно же.
Это уже ... подробности - решаются по месту - проверять можно и два раза. А еще лучше - после добавления просто очищать форму. Или выгружать пользователя со страницы добавления. Варианты есть если подумать, и получше чем обламывать после заполнения всех полей. Я думаю проще всего будет просто после каждого добавления перезагружать страницу.
| | |
|
|
2014-02-07Дата: Пятница, 07.02.2014, 22:56 | Сообщение # 6 |
Аццкий кодер
Группа: Администраторы
Статус: Unknown
|
nulledb, Алгоритм прост: Проверять наличие сообщений за сегодня и в зависимости от проверки показывать форму добавления или табличку с уведомлением.
Реализация же зависит от способа, условий, метода и прочих факторов. И того кто будет писать, по большей части. Я бы это сделал на куках - ибо проще. Т.к. скрыть или запретить изменение какого-либо поля в персональной странице пользователя, но все 100% невозможно. Зачем тогда усложнять, если защита достаточна условна.
Я думаю проще всего будет просто после каждого добавления перезагружать страницу. Да, согласен, это проще всего.
| | |
|
|
2014-02-08Дата: Суббота, 08.02.2014, 00:30 | Сообщение # 7 |
Рядовой
Группа: Проверенные
Статус: Offline
|
Проверять наличие сообщений за сегодня и в зависимости от проверки показывать форму добавления или табличку с уведомлением. Вот как бы вы это все дело проверяли? В голове много всего крутится, но объединить это в одно как-то не получается.
| | |
|
|
2014-02-08Дата: Суббота, 08.02.2014, 00:41 | Сообщение # 8 |
Аццкий кодер
Группа: Администраторы
Статус: Unknown
|
nulledb, Вот как бы вы это все дело проверяли? Я бы? - да просто запросом в апи - если необходимо юзать поля. Или проверять куку - если неважно.
В голове много всего крутится, но объединить это в одно как-то не получается. Возьмите бумагу и карандаш и нарисуйте логическую блок-схему. Вот и логика. А все что в блоках - это функционал - и он может быть различным и оптимальный определяется в процессе.
| | |
|
|
2014-02-08Дата: Суббота, 08.02.2014, 02:47 | Сообщение # 9 |
Рядовой
Группа: Проверенные
Статус: Offline
|
Я бы? - да просто запросом в апи - если необходимо юзать поля. Или проверять куку - если неважно. Я пришел на этот форум за дельным советом, а не за "вокруг да около". Вы можете навести хоть какой-то пример кода (php || js)проверки куков САБЖа?
P.S. Не подумайте, что я хочу вас оскорбить или еще что-то. Необходим дельный совет специалиста. Если у вас есть своя цена - напишите её.
| | |
|
|
2014-02-08Дата: Суббота, 08.02.2014, 07:49 | Сообщение # 10 |
Аццкий кодер
Группа: Администраторы
Статус: Unknown
|
nulledb, Я пришел на этот форум за дельным советом, а не за "вокруг да около". Дельный совет за идею? Вы его получили, на те вопросы которые озвучили.
Вы можете навести хоть какой-то пример кода (php || js)проверки куков САБЖа? nulledb, вот давай честно, хотя бы для себя. Если ты не знаешь как проверить куку или получать данные по полю - какого хрена ты вообще об этом спрашиваешь? Скрипт ты сам не напишешь - к бабке не ходи. За спасибо я его писать тоже не буду. Так зачем тебе эти куски? Просто так? Для общего развития?
Ну вот, пожалуйста: Получение значение AOL через апи: Код $.get('/api/index/8',function(d){ var string=$(d.getElementsByTagName('string')[11]).text(); if(string.length>0){ alert('Ваш AOL = '+string); }else{ alert('Поле не заполнено'); } }); Проверка куки и получение значения: Код if(getCookie('AOL')){ alert('Ваша кука = '+getCookie('AOL')); }else{ alert('У вас нет такой куки'); }; Как отменить добавление, когда пользователь нажал на кнопку Добавить: Код $('#addEntForm').unbind().submit(function(){ return false; }); Мне не жалко - был бы смысл.
Не подумайте, что я хочу вас оскорбить или еще что-то Ничего такого я не подумал. А если бы и подумал - и что?.. мало ли)
Необходим дельный совет специалиста Мой совет - определиться, написать ТЗ и заплатить. В данном сабже мы еще определяемся - видите какой у вас разброс - php или JS - это ж ахуеть.. У вас даже точного представления нет.. Ваш алгорит из первого поста - бред, юзать поля - абсурд..
По какому вопросу вам дать дельный совет? По схеме? Я бы сделал так - гораздо проще чем ваша. При переходе на страницу добавления проверяем куку, если она есть - смотрим что в ней, если там 2 - табличка и нахуй со страницы, если там 1 или ее вообще нет - показываем форму. При успешной отправке пишем куку со значением 1 или если уже есть пишем 2, выкидываем со страницы. Все. Остальные мелочи по месту решаются.
Если у вас есть своя цена - напишите её Советы даю бесплатно. Работу без четкого ТЗ не беру. Цена от 1000 р.
| | |
|
|
2014-02-08Дата: Суббота, 08.02.2014, 20:19 | Сообщение # 11 |
Рядовой
Группа: Проверенные
Статус: Offline
|
likbezz, все понял, большое спасибо!
Последний вопрос: как будет лучшего всего перезагрузить страницу после добавления материала? Интересует код.
| | |
|
|
2014-02-08Дата: Суббота, 08.02.2014, 20:49 | Сообщение # 12 |
Аццкий кодер
Группа: Администраторы
Статус: Unknown
|
nulledb, Последний вопрос: как будет лучшего всего перезагрузить страницу после добавления материала? Как обычно, наверное: Код window.location.reload(); Но я бы отправлял на главную или на добавленный материал .. нефига там наблюдать пустую форму. Согласитесь, что редко кто добавляет два объявления подряд, даже не посмотрев на первое... )
Хотя, вы, наверное спросили не об этом.. могу ошибаться, конечно. Основное в этом - отловить именно удачное добавление материала. Надеюсь не нужно описывать какой облом ждет пользователя, если он забыл заполнить обязательное поле.. А это возможно только только отследив наличие надписи «успешно» в окошке. Кроме того, (!!!) материал может редактироваться - об этом не упомянуто в условиях, но это может быть - я не в курсе правил вашего сайта. Так что все это тоже желательно учитывать. Редактирование материала можно отловить по ссылке - она другая нежели добавление. Успешную отправку - по вхождению слова «успешно».
| | |
|
|
2014-02-08Дата: Суббота, 08.02.2014, 21:03 | Сообщение # 13 |
Рядовой
Группа: Проверенные
Статус: Offline
|
Основное в этом - отловить именно удачное добавление материала. Именно. Не подскажете как это можно сделать? Вся проблема сразу же решается.
| | |
|
|
2014-02-08Дата: Суббота, 08.02.2014, 21:20 | Сообщение # 14 |
Аццкий кодер
Группа: Администраторы
Статус: Unknown
|
nulledb, Не подскажете как это можно сделать? Вся проблема сразу же решается. Вешается событие на отправку - submit - формы, событие запускает функцию, проверяющее содержание поля, через интервал - оно не сразу появляется. Функция работает таким образом - через интервал или тайм-аут, допустим в 500 ms проверяет наличие блока с контентом окошка, если его нет еще - return, если есть - получаем контент и находим вхождение, если есть там слово успешно - пишем куки и отправляем дальше, если нет - останавливаем проверку и снова return.
Событие вешается, как и показано выше: Код $('#addEntForm').submit(function(){ /* событие */ });
Таймер типа такого: Код var timer = setInterval(function() { if( /* проверяем наличие окошка */) { if( /* проверяем вхождение успешно */) { clearInterval(timer); /* пишем куку */ /* редирект */ }else{ /* ошибка при заполнении */ clearInterval(timer); return; } } }, 500);
| | |
|
|
2014-02-08Дата: Суббота, 08.02.2014, 22:41 | Сообщение # 15 |
Рядовой
Группа: Проверенные
Статус: Offline
|
likbezz, спасибо вам за все советы!
Решил проблему следующим образом: Код <?if($URI_ID$='bdAdd0')?> <script> $(function(){ $('#bdF77').hide().after('<input class="manFlSbm" id="add_content" value="Добавить материал" onclick="addtob();" type="button">'); }); function addtob(){ $('#doSmbBt').click(); var timer = setInterval(function() { $('.myWinSuccess').each(function() { if ($(this).text() == 'Материал успешно добавлен') { clearInterval(timer); alert('Поймано'); } }); $('.myWinError').each(function() { if ($(this).text()) { clearInterval(timer); } }); }, 1000); } </script> <?endif?>
| | |
|