3 Stimmen

Anonymen Benutzern das Erstellen unveröffentlichter Knoten in Drupal erlauben?

Ich erstelle eine Website für einen Kunden, die auf Drupal basiert, und der Kunde möchte, dass ein anonymer Benutzer (nicht angemeldet) in der Lage ist, einen neuen Knoten zu erstellen, aber nur einen unveröffentlichten. Dann kann ein Administrator den Knoten überprüfen und ändern, bevor er ihn selbst veröffentlicht.

Ich habe mir die Verwendung von Triggern und Aktionen angesehen, aber das Schreiben eines benutzerdefinierten Triggermoduls scheint mir etwas entmutigend, da ich mich mit der Drupal-API derzeit nicht sehr gut auskenne. Jede Idee ist willkommen.

3voto

gerard Punkte 1843

Für Drupal 7 können Sie @Mirzu Lösung auf diese Weise anwenden:

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

Natürlich kann man es auch andersherum machen:
Festlegung des zu verwendenden Inhaltstyps unveröffentlicht und dann die Einstellung veröffentlicht für authentifizierte Benutzer im Hook.

2voto

Matt V. Punkte 9563

Sie können dies ohne benutzerdefinierte Kodierung oder Auslöser/Aktionen bewerkstelligen. Legen Sie einfach den Standardwert für den Inhaltstyp auf unveröffentlicht fest und legen Sie die Berechtigungen für den Inhaltstyp so fest, dass anonyme Benutzer diesen Inhaltstyp erstellen können.

1voto

Zach Smith Punkte 586

Der Dank geht an @mirzu. Für alle, die es interessiert, habe ich den folgenden Code verwendet:

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 . '"');
    }
}

1voto

mirzu Punkte 1831

Sie können dies ohne benutzerdefinierte Kodierung oder Auslöser/Aktionen bewerkstelligen.

Sie könnten 2 verschiedene Knotentypen verwenden, einen für jede Gruppe, und sie dann bei der Anzeige gleich behandeln. Alternativ sollten Sie in der Lage sein, in der "Presave"-Operation der Nodeapi je nach Rolle zu veröffentlichen oder nicht zu veröffentlichen.

Setzen Sie einfach den Standardstatus des Inhaltstyps "Anonyme Benutzer" auf "unveröffentlicht" und legen Sie die Berechtigungen für den Inhaltstyp so fest, dass anonyme Benutzer diesen Inhaltstyp erstellen können.

1voto

Andy J Punkte 11

In Ihrem hook_nodeapi() 'presave' statt:

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

könnten Sie nicht einfach verwenden:

$node->status = 0;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X