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:
/**
* 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;
}
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:
/**
* 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);
}
}
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.