Von Hacking Core wird Uneingeweihten dringend abgeraten, da es die Support-Community von Tausenden effektiv auf eine Support-Community von einer reduziert (oder was auch immer Ihre Teamgröße ist). Ohne diese bewährte Methode wäre es nahezu unmöglich, Drupal-Neulingen zu helfen. Dies beeinträchtigt auch die Modularität und in einigen Fällen die Sicherheit.
Nachdem dies gesagt wurde, ist Hacking Core nicht immer so böse, wie wir es gerne ausmachen. Ohne eine Änderung des Kerns hätten wir keine Distributionen wie Pressflow und dergleichen, die den Kern auf interessante Weise erweitern. Es ist nur von entscheidender Bedeutung, dass Sie genau wissen, was Sie tun, dass Sie Ihre Patches mit Ihrer Distribution verteilen (vorzugsweise so, dass Sie sie nach dem Upgrade automatisch erneut anwenden können) und dass Sie eine detaillierte Dokumentation führen von dem, was du geändert hast und warum du es geändert hast.
Abhängig davon, wie Sie die Dinge strukturiert haben, können Sie die oben genannten Änderungen vornehmen xmlrpc_request()
, einen Patch erstellen und dann Drush Make verwenden, um das Anwenden zu automatisieren (beachten Sie, dass Drush Make für die 5.x-Version in das Drush-Projekt selbst verschoben wird ), während Sie im Makefile und an anderer Stelle zusätzliche Dokumentationen darüber bereitstellen, was die Änderung bewirkt und warum sie notwendig / erwünscht ist.
Ein weiteres gängiges Muster zur Verbesserung der Kernfunktionen besteht darin, einen Wrapper zu erstellen, der einer Kernfunktion ein kleines Stück Funktionalität hinzufügt, und den Wrapper anstelle der Implementierung des Kerns aufzurufen. Dies macht die Dinge viel modularer, wenn dies machbar ist. Folgendes berücksichtigen:
/**
* Wrapper function for xmlrpc_request() to provide logging.
*/
function mymodule_xmlrpc_request($method, $args) {
$xrr = xmlrpc_request($method, $args);
watchdog('xmlrpc', $xrr->xml);
return $xrr;
}
Wiederum, je nachdem, was Sie tun, ist dies möglicherweise machbar oder nicht machbar, aber wenn dies der Fall ist, haben Sie sich ein paar Kopfschmerzen erspart, um sicherzustellen, dass der Kern gepatcht und dokumentiert bleibt. In diesem Fall scheint eine einmalige Funktion wie diese ein perfekter Kandidat für einen solchen Wrapper zu sein. Wenn Ihre Implementierung in einem Modul erfasst ist, können Sie es sogar erweitern, um die Protokollstufe Ihrer gesamten Lösung zu steuern, und diese Funktion an Produktionsstandorten deaktivieren:
/**
* Wrapper function for xmlrpc_request() to provide logging (if enabled).
*/
function mymodule_xmlrpc_request($method, $args) {
$xrr = xmlrpc_request($method, $args);
if (variable_get('mymodule_log_level', 0) > 0) {
watchdog('xmlrpc', $xrr->xml);
}
}
Kurz gesagt, Sie möchten maximieren, was Sie mit Modulen tun können (und Sie können viel tun), aber es gibt berechtigte Gründe für die Änderung des Kerns. Es sollte mit Sorgfalt gemacht werden, das ist alles.