Ein Patch gilt nicht unbedingt für eine neue Version eines Moduls: Es reicht aus, wenn die gepatchte Funktion in eine andere Zeile verschoben wird oder der Code für diese Funktion geändert wird und der Patch nicht mehr gilt. Damit die Funktion in eine andere Zeile verschoben werden kann, reicht es aus, wenn eine andere Funktion neu geschrieben wird, um mehr Zeilen (oder weniger Zeilen) aufzunehmen.
Eine bessere Möglichkeit, das Verhalten eines Moduls zu ändern, ist für Drupal 7:
- Wenn das Modul Code für einen Seitenrückruf verwendet, den Sie ändern möchten, ändern Sie den Seitenrückruf mit hook_menu_alter () .
- Wenn das Modul eine Themenfunktion implementiert, die Sie ändern möchten, ändern Sie die mit hook_theme_registry_alter () verknüpfte Funktion . Wenn es alternativ ausreicht, die Variablen zu ändern, die die Themenfunktion erhält, können Sie die Vorverarbeitungsfunktion für diese Themenfunktion implementieren (z. B.
hook_preprocess_rdf_metadata()
für theme_rdf_metadata () , und die Variablen ändern, die die Themenfunktion erhält.
- Wenn das Modul eine SQL-Abfrage mit db_select () ausführt und der Abfrage ein Tag zuweist, ändern Sie die ausgeführte Abfrage mit hook_query_alter () .
- Wenn das Modul einen Hook implementiert, von dem Sie nicht möchten, dass er ausgeführt wird, können Sie hook_module_implements_alter () implementieren , um zu vermeiden, dass er ausgeführt wird.
- Wenn das Modul einen Alter-Hook implementiert (z. B. hook_page_alter () ) und Sie ändern möchten, was dieser Hook geändert hat, implementieren Sie denselben Alter-Hook, und stellen Sie sicher, dass er nach dem von diesem Modul implementierten ausgeführt wird.
Wenn die Funktion, die Sie ändern möchten, kein Hook ist, gilt Folgendes:
- Überprüfen Sie, ob die Funktion Hooks verwendet, die von einem anderen Modul implementiert wurden. Zum Beispiel node_save () aufruft hook_node_presave () ; Wenn ich die "geänderte" Eigenschaft des Knotens ändern möchte, hacke ich nicht
node_save()
, sondern implementiere sie hook_node_presave()
, um sie zu ändern.
- Überprüfen Sie, ob die Funktion von einem Hook aus referenziert / verwendet wird. In diesem Fall können Sie etwas für diesen Haken tun, wie ich zuvor beschrieben habe.
Wenn etwas, was ich bisher gesagt habe, nicht zutrifft, ist es besser, ein benutzerdefiniertes Modul zu erstellen und es mit dem Code des anderen Moduls zu erstellen. Ich würde auch versuchen, eine Funktionsanforderung für das vorhandene Modul zu stellen, in der Hoffnung, dass die Funktion implementiert ist.
Das Hacken eines Drittanbieter-Moduls ist niemals eine gute Idee, insbesondere weil automatische Updates des Moduls (über den Update Manager oder Drush) für dieses Modul nicht mehr möglich wären.
Ja, IMO, du machst es "falsch", aber vielleicht sind deine Projektanforderungen nur geringer als meine durchschnittlichen Projektanforderungen :) Füge alle deine Patches und Modulversionen in eine Drush-Make-Datei ein, damit du deine Plattform immer mit Drush aufbauen kannst, wenn etwas passiert.
http://drupal.org/project/drush_make
Das Schreiben von Dateien ist sehr einfach, sobald Sie die Syntax kennen.
quelle