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

Seit Drupal 6.13 wird hook_nodeapi pro Node u.U. 2mal durchlaufen?!

Eingetragen von Airport1 (34)
am 06.07.2009 - 18:32 Uhr in
  • Modul-Entwicklung
  • Drupal 6.x

Hallo, seitdem ich das neueste Drupal 6.13 installiert habe wird hook_nodeapi (nur auf manchen Unterseiten) 2mal durchlaufen:

function myhook_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
global $user;

switch ($op) {
case 'prepare':
echo "!";
break;
case 'view':
echo "?";
break;
case 'alter':
echo "#";
break;
...

Die Echos dienen nur dazu um zu zeigen, dass die Prozesse 2mal durchlaufen werden, denn es erscheinen !?# und nochmal !?# (unter Nicht-Beachtung der Reihenfolge).

Das war zuvor (Drupal 6.12) nicht so. das tritt aber nicht bei allen Unterseiten auf, nur bei manchen. Ich habe Alias URLs und Globale Weiterleitung an (letzteres habe ich versuchsweise auch schon ausgeschaltet, hat aber nichts geholfen).

Hier scheint sich irgendwas geaendert zu haben bzgl. wie man damit umzugehen hat, oder es ist schlichtweg ein Bug.
Hat das Problem noch jemand? Bei mir kollabiert deshalb ein Modul, denn das wird eben auch 2mal ausgefuehrt und frueher nur 1mal.

Mir wird wohl erstmal nix uebrig bleiben als Drupal 6.12 wieder quasi ZURUECK zu installieren?

‹ drupal_render() von formelementen des Typs checkboxes Views 2 - Felder und Filter Integrieren ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

hook_nodeapi

Eingetragen von stBorchert (6003)
am 06.07.2009 - 18:34 Uhr

Moin.
Wird denn bei jedem Durchlauf auch das gleiche Nodeobjekt behandelt?

 Stefan

--
sei nett zu Deinem Themer

  • Anmelden oder Registrieren um Kommentare zu schreiben

gute idee! jawohl, habs mir

Eingetragen von Airport1 (34)
am 06.07.2009 - 18:42 Uhr

Gute Idee! Die Frage muss ich bejahen, habs mir eben mit print_r($node) ausgeben lassen:

stdClass Object ( [nid] => 23 [type] => page [language] => de [uid] => 1 [status] => 1 [created] => 1237199541 [changed] => 1237410671 [comment] => 0 [promote] => 0 [moderate] => 0 [sticky] => 0 [tnid] => 0 [translate] => 0 [vid] => 23 [revision_uid] => 1 [title] => Stau Verkehr ...

stdClass Object ( [nid] => 23 [type] => page [language] => de [uid] => 1 [status] => 1 [created] => 1237199541 [changed] => 1237410671 [comment] => 0 [promote] => 0 [moderate] => 0 [sticky] => 0 [tnid] => 0 [translate] => 0 [vid] => 23 [revision_uid] => 1 [title] => Stau Verkehr ...

Wie gesagt, tritt dieser Effekt des 2mal hook_nodeapi Durchlaufens anscheinend nur auf bestimmten Seiten auf, die Umstaende WANN sowas auftritt sind mir leider selber noch nicht bekannt. Das Ganze passiert erst seit Drupal 6.13.

  • Anmelden oder Registrieren um Kommentare zu schreiben

trace

Eingetragen von stBorchert (6003)
am 06.07.2009 - 18:41 Uhr

Hm, dann mach mal ein debug_backtrace(). Dann siehst Du, woher der Aufruf kommt.
Vielleicht ist da ja ein Modul, dass das nochmal aufruft?
Oder der Beitrag wird wirklich nochmal auf der Seite angezeigt (als feed oder sonstwie). Du sagst ja auch, dass es nicht auf allen Seiten auftritt. Irgendein Unterschied muss da also sein.

Vielleicht Typ-spezifisch?

hth,

 Stefan

--
sei nett zu Deinem Themer

  • Anmelden oder Registrieren um Kommentare zu schreiben

debug_backtrace() eingebaut

Eingetragen von Airport1 (34)
am 06.07.2009 - 18:56 Uhr

debug_backtrace() eingebaut in myhook_nodeapi op 'alter' ergibt :

DEBUG: Array ( [0] => Array ( [file] => /var/www/drupal/modules/node/node.module [line] => 673 [function] => myhook_nodeapi [args] => Array ( [0] => stdClass Object ( [nid] => 23 [type] => page [language] => de [uid] => 1 [status] => 1 [created] => 1237199541 [changed] => 1237410671 [comment] => 0 [promote] => 0 [moderate] => 0 [sticky] => 0 [tnid] => 0 [translate] => 0 [vid] => 23 [revision_uid] => 1 ...

DEBUG: Array ( [0] => Array ( [file] => /var/www/drupal/modules/node/node.module [line] => 673 [function] => myhook_nodeapi [args] => Array ( [0] => stdClass Object ( [nid] => 23 [type] => page [language] => de [uid] => 1 [status] => 1 [created] => 1237199541 [changed] => 1237410671 [comment] => 0 [promote] => 0 [moderate] => 0 [sticky] => 0 [tnid] => 0 [translate] => 0 [vid] => 23 [revision_uid] => 1 ...

Das sagt mir also auch nur dass hier mein hook_nodeapi 2mal gecalled wird. Okay, jetzt koennte man wiederum in node/node.module line 673 schauen und dann das Ganze weiter rueckwaerts. Demnach ists aber wohl ein (neuer) Drupal Bug, oder? Vielleicht haengts auch u.U. mit einem anderen Modul zusammen (z.B. habe ich nodewords fuer die Meta Tags).

Bei den meisten Modulen die hook_nodeapi verwenden duerfte das 2mal Aufrufen nicht auffallen, aber manche Module lassen sich nicht 2mal callen ;-)

  • Anmelden oder Registrieren um Kommentare zu schreiben

HM Schon abstruß Der Diff

Eingetragen von dawehner (2639)
am 06.07.2009 - 19:02 Uhr

HM Schon abstruß

Der Diff ändert auch nichts in dem Bereich, ruft irgendwie nodeapi auf oder ähnliches.
--------------
Blog www.freeblogger.org: Deutscher IRC-Channel: irc.freenode.net #drupal.de ... Jabber-me: dwehner@im.calug.de
SirFiChi ist auch dein Halbgott.

AnhangGröße
drupal-6--12--13.patch 47.25 KB
  • Anmelden oder Registrieren um Kommentare zu schreiben

der typ ist uebrigens fuer

Eingetragen von Airport1 (34)
am 06.07.2009 - 20:30 Uhr

der typ ist uebrigens fuer alle seiten "page" - also sowohl bei den seiten wo das nicht, wie auch bei den seiten wo das auftritt.

und, noch mehr details: wenn 2mal durchgerannt wird, wird anscheinend wird nur das ergebnis des 2. durchlaufs auch angewendet. spricht wenn man in der op "alter" z.b. was vom node content ersetzt, wird es nur im 2. durchgang ersetzt. wirkt fast wie "schluckauf".

es ist natuerlich durchaus moeglich dass dieses szenario z.b. nur mit bestimmten modulen auftritt.

leider hab ich nix da womit man das jetzt ausfuehrlich "rueckwaerts debuggen" tracen koennte, falls das z.b. zend kann. ich nehm eigentlich immer nur notepad++ zum scripten ;)

habe das modul jetzt so abgeaendert dass es auch 2mal gecalled werden kann, aber dass manche nodes quasi 2mal gerendert werden ist damit nur umgangen, m.E. nicht geloest.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Debug mit $nodeapiCallCount

Eingetragen von Airport1 (34)
am 07.07.2009 - 12:14 Uhr

mich laesst das nicht los, ich wuerde das jetzt gerne wirklich verstehen ;-) darum lasse ich mir mal quasi mitzaehlen wie oft myhook_nodeapi gecalled wird:

$nodeapiCallCount = 0;

function myhook_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
global $nodeapiCallCount;
$nodeapiCallCount++;
echo "$op:$nodeapiCallCount ";

Das Ergebnis:

auf Seiten die NICHT 2mal gerendert werden erscheint:
load:1 view:2 alter:3 load:4

auf Seiten die 2mal gerendert werden erscheint:
load:1 view:2 alter:3 view:4 alter:5 load:6

Jemand Lust oder Ahnung das zu interpretieren?

  • Anmelden oder Registrieren um Kommentare zu schreiben

hat das "problem" sonst echt

Eingetragen von Airport1 (34)
am 14.07.2009 - 11:19 Uhr

hat das "problem" sonst echt keiner? wahrscheinlich faellt es nur nicht jedem auf, weil viele module kein probleme damit haben 2mal pro node den rendering prozess zu durchlaufen ;)

macht es sinn das irgendwo und wenn ja wie zu reporten? wenns ein bug ist, halt ich ihn schon fuer nicht gerade "unelementar" ;)

  • Anmelden oder Registrieren um Kommentare zu schreiben

Doch ich hab auch das

Eingetragen von CKIDOW (67)
am 20.07.2009 - 23:28 Uhr

Doch ich hab auch das "Problem"... ich nutze unter case: "load" -> $taxonomy = taxonomy_node_get_term($node, 'tid'); und es wird mir zweimal was ausgespuckt...

Nr.1:

Array
(
    [94] => stdClass Object
        (
            [tid] => 94
            [vid] => 8
            [name] => Giving 2009
            [description] =>
            [weight] => 0
        )

    [87] => stdClass Object
        (
            [tid] => 87
            [vid] => 6
            [name] => Edelstahl
            [description] =>
            [weight] => 0
        )

    [133] => stdClass Object
        (
            [tid] => 133
            [vid] => 6
            [name] => Kreide
            [description] =>
            [weight] => 0
        )

    [80] => stdClass Object
        (
            [tid] => 80
            [vid] => 3
            [name] => Sonstiges
            [description] =>
            [weight] => 3
        )

    [16] => stdClass Object
        (
            [tid] => 16
            [vid] => 3
            [name] => Essen + Trinken
            [description] =>
            [weight] => 33
        )

)

und Nr.2:

Array
(
    [94] => stdClass Object
        (
            [tid] => 94
            [vid] => 8
            [name] => Giving 2009
            [description] =>
            [weight] => 0
        )

    [141] => stdClass Object
        (
            [tid] => 141
            [vid] => 6
            [name] => Nylon
            [description] =>
            [weight] => 0
        )

    [73] => stdClass Object
        (
            [tid] => 73
            [vid] => 3
            [name] => Schirme
            [description] =>
            [weight] => 2
        )

    [39] => stdClass Object
        (
            [tid] => 39
            [vid] => 3
            [name] => Outdoor + Werkzeuge
            [description] =>
            [weight] => 24
        )

)

Also ich weis wirklich nicht, wo der 2te auswurf herkommt... Schirme und Nylon... muss mal den Zusammenhang ergründen...

  • Anmelden oder Registrieren um Kommentare zu schreiben

hast du vlt. auf deiner

Eingetragen von dawehner (2639)
am 21.07.2009 - 00:23 Uhr

hast du vlt. auf deiner Seite neben dem eigentliche Node auch noch eine Block oder sonstiges wo du node_load aufrufst.

Aufrufe für verschiedene Nodes sind eigentlich normal.
--------------
Blog www.freeblogger.org: Deutscher IRC-Channel: irc.freenode.net #drupal.de ... Jabber-me: dwehner@im.calug.de
SirFiChi ist auch dein Halbgott.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • Neuinstallation: vermutlich ein rewrite-Problem
  • Drupal CMS installieren
  • [erledigt]MP3 in Drupal 10 einbinden
  • (gelöst)Drupal 11 installieren
  • Titel ausblenden
  • Ich brauche dringen Hilfe zu Updates oder ggf. wwie geht Composer?
  • Dynamische Ansicht von Seiteninhalt (als Tabelle?)
  • Vergabe von Berechtigungen für bestimmte Rollen; mir fehlt der Haken bzw. das „Veröffentlicht“
  • Medien und andere Daten mit Feeds von Drupal 7 auf Drupal 10 migrieren
  • Rolle erstellen nicht zu finden
  • für drupal11 ein Slider Modul
  • [gelöst] W3CSS Paragraphs Views
Weiter

Neue Kommentare

  • Was für einen Server benutzt
    vor 3 Tagen 17 Stunden
  • Wenn die Subdomain auf
    vor 5 Tagen 15 Stunden
  • ordnerstruktur
    vor 6 Tagen 2 Stunden
  • Die Subdomain muß auf den
    vor 1 Woche 1 Tag
  • Verwende doch das Tag dafür,
    vor 4 Wochen 3 Tagen
  • Guckst du hier: step by step
    vor 4 Wochen 2 Tagen
  • Guckst du hier: step by step
    vor 4 Wochen 2 Tagen
  • Ich habe ja keine Angst vor
    vor 5 Wochen 5 Tagen
  • Ist grundsätzlichmachbar – aber nichts für „einfach mal schnell“
    vor 6 Wochen 12 Stunden
  • Vielen Dank erst einmal, aber
    vor 6 Wochen 2 Tagen

Statistik

Beiträge im Forum: 250289
Registrierte User: 20513

Neue User:

  • Scottteday
  • MichaelPeeno
  • Pavlotog

» 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 26 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