Разрешить анонимным пользователям создавать неопубликованные узлы в Drupal?

Разрешить анонимным пользователям создавать неопубликованные узлы в Drupal?

23.01.2011 01:35:51 Просмотров 72 Источник

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

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

У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/4771079/allow-anonymous-users-to-create-unpublished-nodes-in-drupal#comment5280481_4771079
Вы используете CCK?

Ответы - Разрешить анонимным пользователям создавать неопубликованные узлы в Drupal? / Allow anonymous users to create unpublished nodes in Drupal?

Matt V.

23.01.2011 01:40:34

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

https://stackoverflow.com/questions/4771079/allow-anonymous-users-to-create-unpublished-nodes-in-drupal/4771098#comment5280512_4771098
Это может сработать... За исключением того, что каждый раз, когда аутентифицированный пользователь (не обязательно администратор) публикует узел, им нужно будет убедиться и установить флажок опубликовано. Это кажется немного неудобным... Можете ли вы придумать способ автоматической публикации узлов аутентифицированными пользователями?
https://stackoverflow.com/questions/4771079/allow-anonymous-users-to-create-unpublished-nodes-in-drupal/4771098#comment5280578_4771098
В пользовательском модуле можно написать реализацию hook_form_alter для переопределения опубликованного состояния по умолчанию для пользователей, прошедших проверку подлинности.
https://stackoverflow.com/questions/4771079/allow-anonymous-users-to-create-unpublished-nodes-in-drupal/4771098#comment5280587_4771098
Вы можете использовать 2 разных типа узлов, по одному для каждой группы, а затем обрабатывать их одинаково при отображении. В качестве альтернативы вы должны быть в состоянии, в" presave " op nodeapi публиковать или не публиковать в зависимости от роли.
https://stackoverflow.com/questions/4771079/allow-anonymous-users-to-create-unpublished-nodes-in-drupal/4771098#comment5281010_4771098
Спасибо Мирзу, я использовал ваше второе предложение. Я только что создал быстрый модуль с реализацией hook_nodeapi (). Он отлично работает!
tpow

23.01.2011 01:44:15

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

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

Zach Smith

23.01.2011 03:04:33

Спасибо идет к @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 . '"');
    }
}
Является ответом!
mirzu

23.01.2011 04:38:07

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

Вы можете использовать 2 разных типа узлов, по одному для каждой группы, а затем обрабатывать их одинаково при отображении. В качестве альтернативы вы должны быть в состоянии, в" presave " op nodeapi публиковать или не публиковать в зависимости от роли.

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

Andy J

26.05.2011 07:12:57

В вашем hook_nodeapi () 'presave' а не:

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

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

$node->status = 0;
gerard

01.05.2013 05:24:03

Для Drupal 7 Вы можете применить @решение Mirzu таким образом :

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

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

inaxio

24.10.2019 06:52:11

Вы можете использовать этот крюк в Drupal 8

function MODULENAME_entity_presave(Drupal\Core\Entity\EntityInterface $entity) {

  if( $entity->bundle() == 'BUNDLENAME' && in_array('anonymous', \Drupal::currentUser()->getRoles() ) ) {
    $entity->setPublished(FALSE);
  }

}
Помочь в развитии проекта:
Закрыть X