Ich habe einen Austausch mit einem Partner-XML-Service aufgebaut und konnte das XML nicht richtig darstellen, aber wie bei allen Drupal-Dingen ist die xmlrpc-Fehler- und Aktionsprotokollierung weniger als robust.
Also habe ich das in includes / xmlrpc.inc gemacht.
function xmlrpc_request($method, $args) {
$xmlrpc_request = new stdClass();
$xmlrpc_request->method = $method;
$xmlrpc_request->args = $args;
$xmlrpc_request->xml = <<<EOD
<?xml version="1.0"?>
<methodCall>
<methodName>{$xmlrpc_request->method}</methodName>
<params>
EOD;
foreach ($xmlrpc_request->args as $arg) {
$xmlrpc_request->xml .= '<param><value>';
$v = xmlrpc_value($arg);
$xmlrpc_request->xml .= xmlrpc_value_get_xml($v);
$xmlrpc_request->xml .= "</value></param>\n";
}
$xmlrpc_request->xml .= '</params></methodCall>';
/* This part here */
watchdog('xmlrpc',$xmlrpc_request->xml);
/* End ridiculously tiny hack */
return $xmlrpc_request;
}
Ich bekam die Daten, die ich brauchte, und in 10 Minuten reagierte die Partner-Oberfläche angemessen auf meine Anfrage, weil (schockierend, ich weiß) Protokolle gut sind.
Ich mag die zusätzliche Protokollierung, und ich möchte es behalten. Was ist die saubere, unkomplizierte und vor allem von Drupal genehmigte Vorgehensweise?
variable_set()
eines ähnlichen Mechanismus festlegen, der bei Bedarf exportiert werden kann. :]Antworten:
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:
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:
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.
quelle
Wenn Sie Kern- oder Contrib- Module ändern müssen, sollten Sie dies tun .
quelle