Saya sedang membangun pertukaran dengan layanan mitra XML, dan saya tidak bisa mendapatkan XML dengan benar, tetapi seperti semua hal Drupal, kesalahan xmlrpc dan pencatatan tindakan kurang kuat.
Jadi saya melakukan ini di include / xmlrpc.inc.
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;
}
Saya mendapatkan data yang saya butuhkan dan dalam 10 menit antarmuka mitra merespons dengan tepat untuk permintaan saya karena (mengejutkan saya tahu) log baik.
Saya suka logging ekstra, dan saya ingin menyimpannya. Apa cara yang bersih, mudah, dan yang paling penting, yang disetujui Drupal untuk melakukan itu?
variable_set()
atau mekanisme serupa yang dapat diekspor jika perlu. :]Jawaban:
Inti peretasan sangat tidak disarankan bagi yang belum tahu karena secara efektif mengurangi komunitas pendukung ribuan menjadi komunitas pendukung satu (atau apa pun ukuran tim Anda). Tanpa praktik terbaik ini, membantu mereka yang baru ke Drupal hampir tidak mungkin. Ini juga menghalangi modularitas dan, dalam beberapa kasus, keamanan.
Ini telah dikatakan, inti peretasan tidak selalu jahat seperti yang kita inginkan. Tanpa memodifikasi inti, kami tidak akan memiliki distribusi seperti Pressflow dan sejenisnya yang menambah inti dengan cara yang menarik. Sangatlah penting bahwa Anda tahu persis apa yang Anda lakukan, bahwa Anda mendistribusikan tambalan Anda dengan distribusi Anda (lebih disukai dengan cara yang memungkinkan Anda untuk menerapkannya lagi secara otomatis setelah peningkatan), dan Anda menyimpan dokumentasi terperinci dari apa yang telah Anda ubah dan mengapa Anda mengubahnya.
Bergantung pada bagaimana Anda memiliki hal-hal terstruktur, Anda tentu bisa membuat perubahan di atas
xmlrpc_request()
, membuat tambalan, dan kemudian menggunakan sesuatu seperti Drush Make untuk secara otomatis menerapkannya (perhatikan bahwa Drush Make bergerak ke dalam proyek Drush sendiri untuk rilis 5.x ), sambil menyediakan dokumentasi tambahan di makefile dan di tempat lain tentang apa yang dilakukan perubahan dan mengapa itu perlu / diinginkan.Pola umum lainnya untuk meningkatkan fungsi inti adalah membuat pembungkus yang menambahkan sedikit fungsionalitas ke fungsi inti, dan memanggil pembungkus sebagai pengganti implementasi inti. Jika memungkinkan, ini membuat semuanya jauh lebih modular. Pertimbangkan yang berikut ini:
Sekali lagi, tergantung pada apa yang Anda lakukan ini mungkin atau mungkin tidak layak, tetapi ketika Anda telah menyelamatkan diri Anda beberapa sakit kepala dalam mencoba untuk memastikan bahwa inti tetap ditambal dan didokumentasikan. Meskipun dalam kasus ini, fungsi satu kali seperti ini sepertinya adalah kandidat yang sempurna untuk pembungkus seperti itu. Jika implementasi Anda ditangkap dalam sebuah modul, Anda bahkan dapat mengembangkannya untuk mengontrol level log dari seluruh solusi Anda, menonaktifkan fungsi ini di situs produksi:
Singkatnya, Anda ingin memaksimalkan apa yang dapat Anda lakukan dengan modul (dan Anda dapat melakukan banyak hal), tetapi ada alasan yang sah untuk mengubah inti. Itu harus dilakukan dengan hati-hati, itu saja.
sumber
Jika Anda perlu mengubah modul inti atau kontrib, Anda harus.
sumber