• Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: Admin, Cибиря4ка, Komoff, Diana  
Скрипты и коды для юкоз - Форум аццкого кодера » Раздел для начинающих » Если вы пришли за помощью, то Вам сюда... » Ограничение на добавление материалов (доска объявлений)
Ограничение на добавление материалов
Дата: Пятница, 07.02.2014, 17:35 |
nulledb
Рядовой
Группа: Проверенные
Сообщений: 9
Награды: 0
Репутация: 0
Статус: 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 пользователя, который добавляет материал?
Как перезаписать значения этих полей?
Как отменить добавление, когда пользователь нажал на кнопку Добавить?

Буду очень благодарен человеку, который хоть как-то поможет решить проблему!


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


nulledb,
Цитата nulledb, Пт, 07.02.2014, 17:35:14
Возможно ли вообще все это реализовать на uCoz?

Возможно.
Цитата nulledb, Пт, 07.02.2014, 17:35:14
Оптимален ли алгоритм?

Нет.
Цитата nulledb, Пт, 07.02.2014, 17:35:14
Возможно есть другие варианты?

Куки
Цитата nulledb, Пт, 07.02.2014, 17:35:14
Как получить значение полей ICQ и AOL пользователя, который добавляет материал?

GET апросом на страницу пользователя.
Цитата nulledb, Пт, 07.02.2014, 17:35:14
Как перезаписать значения этих полей?

POST запросом.
Цитата nulledb, Пт, 07.02.2014, 17:35:14
Как отменить добавление, когда пользователь нажал на кнопку Добавить?

Это хреново - заставлять пользователя заполнять поля, а потом обламывать. Надо проверять ДО этого момента.
Цитата nulledb, Пт, 07.02.2014, 17:35:14
Как отменить добавление, когда пользователь нажал на кнопку Добавить?

Скриптом - Возвратить false.


 
Дата: Пятница, 07.02.2014, 20:56 |
nulledb
Рядовой
Группа: Проверенные
Сообщений: 9
Награды: 0
Репутация: 0
Статус: Offline


likbezz, спасибо, что ответили! Вы можете привести хотя бы примитивный пример реализации с помощью куков?

Цитата likbezz, Пт, 07.02.2014, 17:46:59
Скриптом - Возвратить false.

Как именно?

Цитата likbezz, Пт, 07.02.2014, 17:46:59
Это хреново - заставлять пользователя заполнять поля, а потом обламывать. Надо проверять ДО этого момента.

Тогда нужно перезагружать страницу после каждого добавления материала, ибо пользователь может попросту тыкать Добавить, закрывать ajax окошко "Материал добавлен" и опять тыкать Добавить.


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


nulledb,
Цитата nulledb, Пт, 07.02.2014, 20:56:03
Вы можете привести хотя бы примитивный пример реализации с помощью куков?

Как вы себе это представляете?

Цитата nulledb, Пт, 07.02.2014, 20:56:03
Как именно?

Там две возможности - событие submit и встроенная функция openery

Цитата nulledb, Пт, 07.02.2014, 20:56:03
Тогда нужно перезагружать страницу после каждого добавления материала, ибо пользователь может попросту тыкать Добавить, закрывать ajax окошко "Материал добавлен" и опять тыкать Добавить.

Это уже ... подробности - решаются по месту - проверять можно и два раза.
А еще лучше - после добавления просто очищать форму.
Или выгружать пользователя со страницы добавления.
Варианты есть если подумать, и получше чем обламывать после заполнения всех полей.


 
Дата: Пятница, 07.02.2014, 22:23 |
nulledb
Рядовой
Группа: Проверенные
Сообщений: 9
Награды: 0
Репутация: 0
Статус: Offline


Цитата likbezz, Пт, 07.02.2014, 19:22:30
Как вы себе это представляете?

Ну хотя бы сам алгоритм и какие-то участки кода. Если вам не трудно, конечно же.

Цитата likbezz, Пт, 07.02.2014, 19:22:30
Это уже ... подробности - решаются по месту - проверять можно и два раза.
А еще лучше - после добавления просто очищать форму.
Или выгружать пользователя со страницы добавления.
Варианты есть если подумать, и получше чем обламывать после заполнения всех полей.

Я думаю проще всего будет просто после каждого добавления перезагружать страницу.


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


nulledb,
Цитата nulledb, Пт, 07.02.2014, 22:23:24
Ну хотя бы сам алгоритм

Алгоритм прост:
Проверять наличие сообщений за сегодня и в зависимости от проверки показывать форму добавления или табличку с уведомлением.

Реализация же зависит от способа, условий, метода и прочих факторов. И того кто будет писать, по большей части.
Я бы это сделал на куках - ибо проще.
Т.к. скрыть или запретить изменение какого-либо поля в персональной странице пользователя, но все 100% невозможно.
Зачем тогда усложнять, если защита достаточна условна.

Цитата nulledb, Пт, 07.02.2014, 22:23:24
Я думаю проще всего будет просто после каждого добавления перезагружать страницу.

Да, согласен, это проще всего.


 
Дата: Суббота, 08.02.2014, 00:30 |
nulledb
Рядовой
Группа: Проверенные
Сообщений: 9
Награды: 0
Репутация: 0
Статус: Offline


Цитата likbezz, Пт, 07.02.2014, 20:56:00
Проверять наличие сообщений за сегодня и в зависимости от проверки показывать форму добавления или табличку с уведомлением.

Вот как бы вы это все дело проверяли? В голове много всего крутится, но объединить это в одно как-то не получается.


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


nulledb,
Цитата nulledb, Сб, 08.02.2014, 00:30:22
Вот как бы вы это все дело проверяли?

Я бы? - да просто запросом в апи - если необходимо юзать поля.
Или проверять куку - если неважно.

Цитата nulledb, Сб, 08.02.2014, 00:30:22
В голове много всего крутится, но объединить это в одно как-то не получается.

Возьмите бумагу и карандаш и нарисуйте логическую блок-схему.
Вот и логика.
А все что в блоках - это функционал - и он может быть различным и оптимальный определяется в процессе.


 
Дата: Суббота, 08.02.2014, 02:47 |
nulledb
Рядовой
Группа: Проверенные
Сообщений: 9
Награды: 0
Репутация: 0
Статус: Offline


Цитата likbezz, Пт, 07.02.2014, 22:41:48
Я бы? - да просто запросом в апи - если необходимо юзать поля.
Или проверять куку - если неважно.

Я пришел на этот форум за дельным советом, а не за "вокруг да около".
Вы можете навести хоть какой-то пример кода (php || js)проверки куков САБЖа?

P.S. Не подумайте, что я хочу вас оскорбить или еще что-то. Необходим дельный совет специалиста. Если у вас есть своя цена - напишите её.


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


nulledb,
Цитата nulledb, Сб, 08.02.2014, 02:47:33
Я пришел на этот форум за дельным советом, а не за "вокруг да около".

Дельный совет за идею?
Вы его получили, на те вопросы которые озвучили.

Цитата nulledb, Сб, 08.02.2014, 02:47:33
Вы можете навести хоть какой-то пример кода (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;
});

Мне не жалко - был бы смысл.

Цитата nulledb, Сб, 08.02.2014, 02:47:33
Не подумайте, что я хочу вас оскорбить или еще что-то

Ничего такого я не подумал.
А если бы и подумал - и что?.. мало ли)

Цитата nulledb, Сб, 08.02.2014, 02:47:33
Необходим дельный совет специалиста

Мой совет - определиться, написать ТЗ и заплатить.
В данном сабже мы еще определяемся - видите какой у вас разброс - php или JS - это ж ахуеть..
У вас даже точного представления нет.. Ваш алгорит из первого поста - бред, юзать поля - абсурд..

По какому вопросу вам дать дельный совет?
По схеме?
Я бы сделал так - гораздо проще чем ваша.
При переходе на страницу добавления проверяем куку, если она есть - смотрим что в ней, если там 2 - табличка и нахуй со страницы, если там 1 или ее вообще нет - показываем форму. При успешной отправке пишем куку со значением 1 или если уже есть пишем 2, выкидываем со страницы.
Все.
Остальные мелочи по месту решаются.

Цитата nulledb, Сб, 08.02.2014, 02:47:33
Если у вас есть своя цена - напишите её

Советы даю бесплатно.
Работу без четкого ТЗ не беру.
Цена от 1000 р.


 
Дата: Суббота, 08.02.2014, 20:19 |
nulledb
Рядовой
Группа: Проверенные
Сообщений: 9
Награды: 0
Репутация: 0
Статус: Offline


likbezz, все понял, большое спасибо! thumb

Последний вопрос: как будет лучшего всего перезагрузить страницу после добавления материала? Интересует код.


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


nulledb,
Цитата nulledb, Сб, 08.02.2014, 20:19:58
Последний вопрос: как будет лучшего всего перезагрузить страницу после добавления материала?

Как обычно, наверное:
Код
window.location.reload();

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

Хотя, вы, наверное спросили не об этом.. могу ошибаться, конечно.
Основное в этом - отловить именно удачное добавление материала. Надеюсь не нужно описывать какой облом ждет пользователя, если он забыл заполнить обязательное поле..
А это возможно только только отследив наличие надписи «успешно» в окошке.
Кроме того, (!!!) материал может редактироваться - об этом не упомянуто в условиях, но это может быть - я не в курсе правил вашего сайта.
Так что все это тоже желательно учитывать.
Редактирование материала можно отловить по ссылке - она другая нежели добавление.
Успешную отправку - по вхождению слова «успешно».


 
Дата: Суббота, 08.02.2014, 21:03 |
nulledb
Рядовой
Группа: Проверенные
Сообщений: 9
Награды: 0
Репутация: 0
Статус: Offline


Цитата likbezz, Сб, 08.02.2014, 18:49:30
Основное в этом - отловить именно удачное добавление материала.

Именно. Не подскажете как это можно сделать? Вся проблема сразу же решается.


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


nulledb,
Цитата nulledb, Сб, 08.02.2014, 21:03:38
Не подскажете как это можно сделать? Вся проблема сразу же решается.

Вешается событие на отправку - submit - формы, событие запускает функцию, проверяющее содержание поля, через интервал - оно не сразу появляется.
Функция работает таким образом - через интервал или тайм-аут, допустим в 500 ms проверяет наличие блока с контентом окошка, если его нет еще - return, если есть - получаем контент и находим вхождение, если есть там слово успешно - пишем куки и отправляем дальше, если нет - останавливаем проверку и снова return.

Событие вешается, как и показано выше:
Код
$('#addEntForm').submit(function(){
     /* событие */
});


Таймер типа такого:
Код
var timer = setInterval(function() {
if( /* проверяем наличие окошка */) {
   if( /* проверяем вхождение успешно */) {
   clearInterval(timer);
      /* пишем куку */
      /* редирект */
   }else{
     /* ошибка при заполнении */
    clearInterval(timer);
     return;
   }
}
}, 500);


 
Дата: Суббота, 08.02.2014, 22:41 |
nulledb
Рядовой
Группа: Проверенные
Сообщений: 9
Награды: 0
Репутация: 0
Статус: 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?>


 
Скрипты и коды для юкоз - Форум аццкого кодера » Раздел для начинающих » Если вы пришли за помощью, то Вам сюда... » Ограничение на добавление материалов (доска объявлений)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:


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