Права на добавление терминов таксономии + капча
5 июня 2013 в 11:21
Доброго времени!
Ищу способ дать возможность анонимным пользователям добавлять термины в один словарь (с проверкой по капче).
В настройках прав есть только редактирование и удаление терминов, но они не дают возможность добавить термин (нужно только добавление).
Ну и собственно, каким образом можно добавить капчу при добавлении терминов?
Спасибо!
- Блог
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
Комментарии
Не желательно давать анонимам права на таксономию, лучше пусть создают например ноду или entityform с капчей (модуль CAPTCHA) , и срабатывает правило, которое и создает новый термин в словаре и записывает значения из ноды (или entityform), и сразу же можно удалять ноду, чтобы не плодились.
Большое спасибо!
Пошаговое решение:
1. ставим Entity API, CAPTCHA и Rules
2. добавляем тип материалов (я сделал с машинным именем "tmp") - я сделал возможность модерации (по умолчанию материал не опубликован)
3. В настройках admin/config/people/captcha/captcha добавляем капчу на form_id "tmp_node_form"
4. На странице управления правилами admin/config/workflow/rules/reaction/manage добавляем свое правило, в котором:
- Event: "After updating existing content" (без модерации было бы "После добавления материала")
- Conditions: Content is of type указываем "tmp"; если с модерацией - "Content is published" сюда же вторым условием
- Действия: Execute custom PHP code, вводим код:
$vocabulary = taxonomy_vocabulary_machine_name_load('zn'); // машинное имя термина - "zn"
$term = (object)array('vid' => $vocabulary->vid, 'name' => '[node:title]', 'description' => '[node:body]'); //при необходимости поля добавляем
taxonomy_term_save($term);
node_delete([node:nid]);
5. Все сохраняем и радуемся.
Единственное неудобство - анонимный пользователь после добавления материала получает "Ошибка доступа", так как только что созданный материал не опубликован. Тоже решаемо....
PS: Еще раз спасибо MerryHamster и извиняюсь за кривопереведенные термины в тексте....
Не получается
в «taxonomy_vocabulary_machine_name_load» - где тут имя моего словаря, в который вставить надо будет новый термин? (т.е. тот, который создаст анонимный юзер?)
я пробовал разные комбинации
«
taxonomy_vocabulary_machine_name_load('zn'); // машинное имя термина - "zn"»
которого "zn" - термина? нового, создаваемого? как аноним может его задать - он что, будет каждый раз проверять список всех терминов, созданных ранее?
или существующего? один раз и навсегда заданного заранее? как тогда оно будут потом обновляться?
Т.е. у меня материал создаётся, но в словарь ничего не попадает
"zn" - как раз оно самое имя словаря.
PS: заглядываю сюда нечасто - только заметил вопрос.