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 - 17: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 - 17: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 - 17: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 - 17: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 - 17: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 - 18: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 - 19: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 - 11: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 - 10: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 - 22: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 20.07.2009 - 23: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

  • Ветошь для протирки оборудования
  • 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?
Weiter

Neue Kommentare

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

Statistik

Beiträge im Forum: 250234
Registrierte User: 20455

Neue User:

  • JoMek
  • Znogsnernoimb
  • ByteScrapers

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