Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Module › Modul-Entwicklung ›

[solved] Verständinisfrage zu $node->status und best practice

Eingetragen von naden@drupal.org (36)
am 29.11.2009 - 18:08 Uhr in
  • Modul-Entwicklung
  • Drupal 6.x

Hi, ich bin relativ bei Drupal gelandet - deshalb diese grundlegende Frage zu Drupal und $node->status

Ich habe ein Modul geschrieben, was einen eigenen Nodetype implementiert. Wenn ein "Gast" eine Node anlegt, wird dieser von dem Modul der Status 0 zugewiesen. Diese Node muss von einem Admin oder Moderator freigeschaltet werden.

<?php
function mynode_nodeapi(&$node, $op, $teaser = NULL, $page = NULL) {
  switch(
$op) {
    case
'presave':
      global
$user;
      if(
$user->uid == 0) {
       
$node->status = 0;
      }
      break;
  }
}
?>

Soweit funktioniert auch alles wie gewollt.

Allerdings ist die Node trotz Status 0 für jeden Gast und jedes Mitglied sichtbar. Laut Drupal sollte dies bei Status 0 aber nicht der Fall sein ...

Meine Lösung sieht wie folgt aus:

<?php
function mynode_access($op, $node, $account) {
  switch(
$op) {
    case
'view':
      if(
$node->status == 0) {
       
drupal_set_message(t('Diese Node wartet auf Moderation, ...!'));
        return
false;
      }
      return
true;
  }
}
?>

Das funktioniert soweit auch wunderbar. Ich bin allerdings nicht sicher, ob das so gehandelt werden sollte oder ob man das besser über das Feld $node->moderate löst bzw. ich da etwas im Bezug auf $node->status und Drupals Art und Weise damit umzugehen missverstanden habe.

Mit der obigen Lösung wird zwar der Node-Inhalt an sich nicht angezeigt, wohl aber andere Dinge im Template, die sich auf diese noch nicht freigeschaltete Node beziehen.
Z.B. die Tagcloud in der Sidebar oder das related/similar Nodes-Listing weiter unten auch der Seite.

Gibt es für die Steuerung dieser nodebezogenen Daten eine generelle Lösung oder muss ich sämtliche Blöcke und Listings über eine if($node->status == 1) Verzweigung steuern?

Danke und ich bin gespannt!

‹ Wiederverwnedung von Funktionalitäten Spalte 'data' in Tabelle users ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Nein, da ist definitiv etwas

Eingetragen von dawehner (2639)
am 29.11.2009 - 22:09 Uhr

Nein, da ist definitiv etwas anders falsch. Hast du mal die Berechtigungen des Gast überprüft?
--------------
Blog www.freeblogger.org: Deutscher IRC-Channel: irc.freenode.net #drupal.de ... Jabber-me: dwehner@im.calug.de
http://kupferbau.ernst-bloch-uni.de/

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ich habe mir die

Eingetragen von naden@drupal.org (36)
am 29.11.2009 - 23:06 Uhr

Ich habe mir die Berechtigungen nochmal angesehen und mit denen anderer Module verglichen. Dort sieht alles ok aus. Meine Node wird sowohl bei Gast, Admin als auch User in jedem Fall angezeigt.

Ich habe es nochmal mit dem Blog-Modul verglichen, eine Blog-Post mit dem Status = 0 wird nicht angezeigt. Was richtig ist. Ich kann aber im Vergleich zum Blog-Modul und in den Zugriffsberechtigungen keine Unterschiede finden.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Hast du ein nodetype Modul?

Eingetragen von dawehner (2639)
am 30.11.2009 - 00:36 Uhr

Hast du ein nodetype Modul? Implementierst du dort hook_access?
--------------
Blog www.freeblogger.org: Deutscher IRC-Channel: irc.freenode.net #drupal.de ... Jabber-me: dwehner@im.calug.de
http://kupferbau.ernst-bloch-uni.de/

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ja, tue ich wie

Eingetragen von naden@drupal.org (36)
am 30.11.2009 - 09:41 Uhr

Ja, tue ich wie folgt:

hook_access

<?php
function mynode_access($op, $node, $account) {
 
$is_author = $account->uid == $node->uid;
 
  switch(
$op) {
    case
'view':
     
// muss Node noch moderiert werden?
     
if($node->status == 0) {
       
drupal_set_message(t('Diese Node wartet auf Moderation, ...!'));
        return
false;
      }
      return
true;
    case
'create':
      return
user_access('create mynode', $account);
    case
'update':
      return
user_access('edit own mynode', $account) && $is_author || user_access('edit any mynode', $account);
    case
'delete':
      return
user_access('delete own mynode', $account) && $is_author || user_access('delete any mynode', $account);
  }
}
?>

hook_perm

<?php
function mynode_perm() {
  return array(
   
'create mynode',
   
'edit own mynode',
   
'edit any mynode',
   
'delete own mynode',
   
'delete any mynode'
 
);
}
?>

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ich habe das Modul nochmal

Eingetragen von naden@drupal.org (36)
am 03.12.2009 - 22:41 Uhr

Ich habe das Modul nochmal feinkörnig mit einer frischen Drupal-Installation getestet und festgestellt, dass eine unschöne Konstellation in hook_access -> $op == 'view' immer true geliefert hat.

Nun funktioniert es und ich bin beruhigt, dass sich Drupal so verhält, wie man es erwarten würde :)

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • Best Practices for Plain Text Notes
  • gepatchte PHP Version 7.4 für Windows
  • Canvas Palette: Eine fertige Komponentenbibliothek für Drupal Canvas
  • Hilfe zu Updates oder Composer
  • Vergleich Drupal und Contao
  • [geloest] Blocks in Bootstrap nebeneinander darstellen und nicht untereinander
  • DrupalCamp Frankfurt 27-28 November 2026
  • Bitte mein Bentzerkonto löschen
  • Beim Aufruf einiger Inhalte erhalte ich folgende Fehlermeldung
  • Neuinstallation: vermutlich ein rewrite-Problem
  • Drupal CMS installieren
  • [erledigt]MP3 in Drupal 10 einbinden
Weiter

Neue Kommentare

  • Muss ja nicht genau php 8.3 sein
    vor 2 Tagen 21 Stunden
  • Guten morgen und Danke
    vor 3 Tagen 4 Stunden
  • Evtl. versuchen auf PHP 8 zu wechseln
    vor 3 Tagen 10 Stunden
  • Danke Schmittrich. Die Frage
    vor 5 Tagen 2 Stunden
  • Keine Antwort auf die Frage nach dem Woher
    vor 5 Tagen 4 Stunden
  • Danke ich werde mir die
    vor 6 Wochen 2 Tagen
  • Vielen Dank für Ihren
    vor 6 Wochen 5 Tagen
  • Composer ist sehr ratsam
    vor 7 Wochen 14 Stunden
  • Vielen Dank für den
    vor 7 Wochen 3 Tagen
  • Die alten CMS Vergleiche von contentmanager.de
    vor 7 Wochen 3 Tagen

Statistik

Beiträge im Forum: 250324
Registrierte User: 20571

Neue User:

  • alxshell
  • FesObsemo
  • AnthonyhoF

» Alle User anzeigen

User nach Punkten sortiert:
wla9466
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 7 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association