Разрешить анонимным пользователям создавать неопубликованные узлы в Drupal? - PullRequest
3 голосов
/ 23 января 2011

Я создаю сайт для клиента на основе drupal, и клиент хочет, чтобы анонимный пользователь (не вошедший в систему) мог создать новый, но только неопубликованный узел.Затем администратор может просмотреть узел и изменить его перед публикацией.

Я рассмотрел использование триггеров и действий, но написание пользовательского модуля триггера кажется немного сложным, так как я не очень бегло знаком с Drupal.API в настоящее время.Любые идеи приветствуются.

Ответы [ 6 ]

3 голосов
/ 01 мая 2013

Для Drupal 7 вы можете применить решение @Mirzu следующим образом:

function <your-module-name>_node_presave($node) {
    if (user_is_anonymous())
        $node->status = FALSE; // means unpublished
}

Конечно, вы можете сделать это наоборот:
Определение типа контента неопубликованный , а затем установите его опубликовано для аутентифицированных пользователей в хуке.

2 голосов
/ 23 января 2011

Вы можете сделать это без пользовательского кодирования или триггеров / действий. Просто установите для типа контента значение по умолчанию неопубликованное и установите разрешения для типа контента, чтобы анонимные пользователи могли создавать контент такого типа.

1 голос
/ 26 мая 2011

В вашем hook_nodeapi () «presave» вместо:

db_query('UPDATE node SET status="0" WHERE nid="' . $node->nid . '"');

не могли бы вы просто использовать:

$node->status = 0;
1 голос
/ 23 января 2011

Вы можете сделать это без пользовательского кодирования или триггеров / действий.

Вы можете использовать 2 разных типа узлов, по одному для каждой группы, а затем обрабатывать их одинаково при отображении.В качестве альтернативы вы должны иметь возможность в опере «saveave» nodeapi публиковать или отменять публикацию в зависимости от роли.

Просто установите для «по умолчанию» для типа контента анонимных пользователей статус «неопубликованный» и установите разрешения для типа контента.разрешить анонимным пользователям создавать контент такого типа.

1 голос
/ 23 января 2011

Спасибо, @mirzu.Для тех, кто заинтересован, я использовал следующий код:

function hook_nodeapi($node, $op, $a3 = NULL, $a4 = NULL)
{
    global $user;
    if( $op == 'presave' && !$user->uid)
    {
        db_query('UPDATE node SET status="0" WHERE nid="' . $node->nid . '"');
    }
}
0 голосов
/ 23 января 2011

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

Затем вы можете создать представление - или просто использовать ссылку «Содержимое» в разделе администратора для просмотра страниц, которые имеют анонимность для автора и не опубликованы, - тогда вы можете просматривать узлы оттуда.

...