[gelöst] Reihenfolge der verwendeten Hooks/Funktionen aufzeichnen und abfragen?
am 18.11.2018 - 20:06 Uhr in
Hallo Freunde,
ich befülle in einem Node (beim Erstellen) das Locationfeld automatisch über ein Mini-Modul (hook_node_presave).
<?php
function MY_MODULE_node_presave($node) {
$node->field_agentur_model_adresse['und']['0']['street'] = 'Ebelingstrasse';
$node->field_agentur_model_adresse['und']['0']['city'] = 'Berlin';
$node->field_agentur_model_adresse['und']['0']['province'] = 'BE';
$node->field_agentur_model_adresse['und']['0']['province_name'] = 'Berlin';
$node->field_agentur_model_adresse['und']['0']['postal_code'] = 10249;
$node->field_agentur_model_adresse['und']['0']['country'] = 'de';
}
?>
Seit einiger Zeit gibt es damit ein Problem (der Ortsname (city) und das Bundesland (province) werden einfach nicht übernommen, PLZ, Straße und Land hingegen schon). Im erstellten Node fehlen ORT und Bundesland immer, obwohl die Daten korrekt übergeben werden.
Ich weiß leider nicht wo der Fehler liegt, da es weder im Drupal-Log noch im Server-Log eine Fehlermeldung gibt.
Bis die Werte in die Datenbank geschrieben werden, durchlaufen sie ja zahlreiche Funktionen/Prozesse und irgendwo dort verschwinden die Values für ORT und BUNDESLAND (für mich ist aber nicht ersichtlich wo das passiert).
Gibt es eine Möglichkeit in Drupal (beim Speichern eines Nodes) sämtliche Hooks/Funktionen/Prozesse (die im Hintergund ablaufen z.B. Field-Validierung, bis zum Schreiben in die Datenbank etc.) aufzuzeichnen und danach auszugeben, damit ich mir anschauen kann wo die Werte für den Ort und Bundesland "verschluckt werden"?
Hat da jemand eine Idee?
Danke und Gruß
- Anmelden oder Registrieren um Kommentare zu schreiben
Am effektivsten ist ein
am 18.11.2018 - 23:54 Uhr
Am effektivsten ist ein Debugging mittels xdebug. Wenn du jedoch die komplette Validierungs- und Speicherpipeline debuggen willst, wirst du wahrscheinlich aufgrund der Menge irgendwann resignieren. Da muss man schon wissen wonach man sucht.
Die Reihenfolge der hooks Ausführungen lässt sich zu einem bestimmten Grad beeinflussen. Beispielsweise kannst du die `weight` Spalte der `system` Tabelle für das Modul erhöhen. Es wird sicher nicht viele Module geben, die dieses Feld modifizieren. Im besten Fall nur das Modul, dass dem Feldtyp bereitstellt. Mit einem höheren weight als dieses wird der presave Hook auch später ausgeführt.
Vielen Dank für die
am 19.11.2018 - 00:26 Uhr
Vielen Dank für die Antwort.
Ich habe das Problem aber jetzt gefunden (nachdem ich fast 2000 Zeilen Code im Location-Modul durchgearbeitet habe, um [halbwegs] zu verstehen wie das funktioniert).
In den Field-Settings sind die Collect-Werte des Locationfeldes (dort wo man einstellt ob das city/province-feld "Allow, Required oder Force Default" ist) verschwunden bzw. auf 0 gesetzt.
Im Location-Modul wird bei collect = 0 aber nur per PLZ geocodiert und city und province werden verworfen und daher auch nicht in die Datenbank geschrieben.
Ich kann diese Collect-Werte auch im Nachinein nicht ändern, egal was ich auswähle, collect bleibt immer 0.
Das scheint wohl ein Bug zu sein.
In einer anderen (gespiegelten) DEV-Installation (auf demselben Server) habe ich das Problem nicht.
Ich muss jetzt also im Mini-Modul beim Befüllen des Locationfeldes auch die korrekten collect-Werte mit übergeben, damit Ort und Bundesland mit übernommen werden
$node->field_ort['und']['0']['location_settings']['form']['fields']['city']['collect'] = 1;
$node->field_ort['und']['0']['location_settings']['form']['fields']['province']['collect'] = 1;
Manchmal ist das wirklich zum Haare raufen. Das hat wieder Unmengen Zeit gekostet.
Danke und Gruß
Drupal rockt!!!