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

  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
  • Drupal 11 neu aufsetzen und Bereiche aus 10 importieren
  • Wie erlaubt man neuen Benutzern auf die Resetseite zugreifen zu dürfen.
  • [gelöst] Anzeigeformat Text mit Bild in einem Artikel, Drupal 11
  • Social Media Buttons um Insteragram erweitern
  • Nach Installation der neuesten D10-Version kein Zugriff auf Website
  • Composer nach Umzug
  • [gelöst] Taxonomie Begriffe zeigt nicht alle Nodes an
  • Drupal 11 + Experience Builder (Canvas) + Layout Builder
  • Welche KI verwendet ihr?
  • Update Manger läst sich nicht Installieren
Weiter

Neue Kommentare

  • melde mich mal wieder, da ich
    vor 2 Wochen 1 Tag
  • Hey danke
    vor 2 Wochen 1 Tag
  • Update: jetzt gibt's ein
    vor 2 Wochen 2 Tagen
  • Hallo, im Prinzip habe ich
    vor 3 Wochen 1 Stunde
  • Da scheint die Terminologie
    vor 3 Wochen 4 Stunden
  • Kannst doch auch alles direkt
    vor 3 Wochen 4 Tagen
  • In der entsprechenden View
    vor 3 Wochen 4 Tagen
  • Dazu müsstest Du vermutlich
    vor 3 Wochen 4 Tagen
  • gelöst
    vor 6 Wochen 23 Stunden
  • Ja natürlich. Dass ist etwas,
    vor 6 Wochen 1 Tag

Statistik

Beiträge im Forum: 250233
Registrierte User: 20453

Neue User:

  • ByteScrapers
  • Mroppoofpaync
  • 4aficiona2

» Alle User anzeigen

User nach Punkten sortiert:
wla9461
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3857
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 28 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