Грубо говоря задача такая - есть тип материала, к примеру "статья", у этого типа есть поле к примеру "тематика" и там набор значений, например "политика", "искусство", "природа" и тп. Так вот как поставить условие, что можно создавать не более, скажем, 5 статей одной тематики?
Причём не одному пользователю, а вообще - как только набирается 5 статей с одинаковым значением поля "тематика" дальнейшее создание таких статей запрещается?
Или аналогичная ситуация с модулем webform - к примеру есть форма заказа мастера на дом, и в ней, среди прочих, есть поле "мастер" со списком тех самых мастеров. Но один мастер может взять не больше 5 заказов одновременно. Как, в таком примере, "прекратить" приём заказов с определённым значением поля "мастер", если уже есть 5 заказов с таким значением именно этого поля?
Комментарии
Нужно копать в сторону [module=rules]
да что-то не нашёл я у rules условий, мол такое-то поле равно такому-то значению.
по крайней мере в стандартном rules и rulse webform точно нет
а php условие на что?
боюсь показаться нубом, но раньше с rules работать не приходилось, можно поподробней?
разобрался, просто не знал куда писать эти условия, теперь узнал. буду ковыряться.
Если вдруг появятся идеи более изящного решения буду крайне благодарен
Если поле с тематиками - список, то можно вешать на сохранение ноды правило и в нем уже с помощью php изменять параметры (допустимые значения) созданного поля, но тогда могут возникнуть проблемы с изменением предыдущих значений (при каждом изменении ноды с удаленной тематикой будут ошибки валидации сыпаться). Если же тематики определяются таксономией, то тут хз как сделать не влезая в код.
Я бы создал словарь с терминами (тематиками) и написал бы модуль со своим полем. За основу можно взять поле таксономии из стандартного модуля field, только нужно изменить выборку подставляемых значений (те термины, у которых количество нод <=5). Задача довольно специфическая и нестандартная, что и сказывается на сложности (для новичков) ее решения.
Может кто еще что-то посоветует...
мда уж. Разбираться с написанием модулей немного некогда.
А если через условие на сохранение ноды такой алгоритм
Если такое-то поле (банальный список) равно такому-то значению, то такой-то счётчик плюс один, если счётчик равен 5 - выводить сообщенице, мол облом, и удалять ноду.
Но что за счётчики? Я полный ноль в апи друпал, куда приплюсовывать эту единичку?
Зачем счетчики? Тут опять же проще программно запрос к бд написать для определения количества повторений определенного значения у поля.
Легко сказать. У меня не получается даже написать банальное правило - если выбрано первое значение из списка, то вывести ноду на главную. ночь ещё впереди конечно, да и гугл работает.
Кстати если не лень, скажи в чём здесь ошибка?
return $node->field_user_kurs_nkurs[0]['value'] == 'one';
field_user_kurs_nkurs - поле со списком
one - ключ первого значения
Конкретно в этой строке в синтаксисе, скобочки не хватает перед ;
скобочка перед $node затесалась случайно.
я создал правило "после добавления материала", там два условия через AND, первое про тип материала, второе php, на всякий случай взял другое поле, без списка, просто текстовое, вот весь код, который я написал в условие:
return $node->field_user_kurs_phone[0]['value'] == '123';
в итоге при добавлении материала вылазит ошибка:
Notice: Undefined offset: 0 в функции eval() (строка 1 в файле Z:\home\aqua.ru\www\sites\all\modules\rules\modules\php.eval.inc(146) : eval()'d code).
и, судя по логу, именно php условие не срабатывает, хотя я явно прописываю в это поле 123
а если так?
return $node->field_user_kurs_phone['und'][0]['value'] == '123';
хо хо! да ты маг
спасибо) я бы ещё часа два лазил по гуглам в поисках этого und) а смысл ошибки только щас понял) ладно, будем упражняться со значениями полей и запросами в базу) ещё раз спасибо 
Всё сделал методом, который предложил iGusev - Rules ловит создание материала, проверяет тип, дальше php условие, запрос в базу данных на кол-во записей с нужным содержанием нужного поля, в конце ретурн с проверкой полученного кол-ва.