Права на добавление терминов таксономии + капча

Главные вкладки

Аватар пользователя ezhy ezhy 5 июня 2013 в 11:21

Доброго времени!

Ищу способ дать возможность анонимным пользователям добавлять термины в один словарь (с проверкой по капче).
В настройках прав есть только редактирование и удаление терминов, но они не дают возможность добавить термин (нужно только добавление).
Ну и собственно, каким образом можно добавить капчу при добавлении терминов?

Спасибо!

Комментарии

Аватар пользователя MerryHamster MerryHamster 5 июня 2013 в 11:39

Не желательно давать анонимам права на таксономию, лучше пусть создают например ноду или entityform с капчей (модуль CAPTCHA) , и срабатывает правило, которое и создает новый термин в словаре и записывает значения из ноды (или entityform), и сразу же можно удалять ноду, чтобы не плодились.

Аватар пользователя ezhy ezhy 5 июня 2013 в 19:00

Большое спасибо!

Пошаговое решение:
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 и извиняюсь за кривопереведенные термины в тексте....

Аватар пользователя leo7 leo7 7 июня 2013 в 1:19

Не получается Sad

в «taxonomy_vocabulary_machine_name_load» - где тут имя моего словаря, в который вставить надо будет новый термин? (т.е. тот, который создаст анонимный юзер?)
я пробовал разные комбинации Sad

«
taxonomy_vocabulary_machine_name_load('zn'); // машинное имя термина - "zn"
»

которого "zn" - термина? нового, создаваемого? как аноним может его задать - он что, будет каждый раз проверять список всех терминов, созданных ранее?
или существующего? один раз и навсегда заданного заранее? как тогда оно будут потом обновляться?

Т.е. у меня материал создаётся, но в словарь ничего не попадает Sad

Аватар пользователя ezhy ezhy 19 апреля 2015 в 1:08

leo7 wrote:
Не получается Sad

в «taxonomy_vocabulary_machine_name_load» - где тут имя моего словаря, в который вставить надо будет новый термин? (т.е. тот, который создаст анонимный юзер?)
я пробовал разные комбинации Sad

«
taxonomy_vocabulary_machine_name_load('zn'); // машинное имя термина - "zn"
»

"zn" - как раз оно самое имя словаря.
PS: заглядываю сюда нечасто - только заметил вопрос.