среда, 19 января 2011 г.

Ограничение на количество создаваемых материалов

Речь пойдет о том, как ограничить количество материалов, создаваемых пользователем в рамках определенного временного промежутка и в зависимости от группы, в которую входит пользователь.

Для примера возьмем материал "Фотография" и две группы "Зарегистрированный пользователь" и "VIP". Пусть обычный пользователь может добавлять 7 фотографий в неделю, а привелигированный - 14.

Для решения задачи нам понадобится модуль Node Limit Number версии 2.х. На данный момент нет стабильного релиза, но т.к. альтернативы я не вижу, я взяла единственную доступную версию 6.x-2.0-beta1. Эта версия интегрирована с модулем Rules, который вам тоже прийдется установить. Это очень полезный модуль, я уверена, он вам пригодится и для других целей.

Вы не найдете никаких настроек для Node Limit Number, вместо этого, появится новое событие, которое можно задать в качестве критерия при создании нового правила. Найдем в админразделе Triggered rules (Запланированные правила) и добавим новое правило, где в качестве события выбираем "Check a Node limit".

Добавим несколько состояний:
  • Пользователь имеет роль "Зарегистрированный пользователь"
  • Материал имеет тип "Фотография"
Следующее состояние, которое мы добавим, собственно само ограничение "Reached limit for the node type". Здесь можно указать количество материалов и временные рамки.


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

Теперь остается добавить желаемое дейтвие, которое выполнится при срабатывании события. Я выбрала "Show a configurable message on the site" и затем перенаправление на главную страницу.

Правило для группы VIP создается анологично, с тремя состояниями:
  • Пользователь имеет роль "VIP"
  • Материал имеет тип "Фотография"
  • Материалов - 14, временной промежуток - неделя
Все вышеизложенное было сделано на Drupal 6 для сайта http://canon-fan.com