Hacking cốt lõi được khuyến khích mạnh mẽ cho những người không quen biết vì nó có hiệu quả làm giảm cộng đồng hỗ trợ của hàng ngàn người xuống cộng đồng hỗ trợ của một người (hoặc bất kể quy mô nhóm của bạn là gì). Nếu không có cách làm tốt nhất này, việc giúp đỡ những người mới sử dụng Drupal sẽ không thể thực hiện được. Nó cũng cản trở tính mô-đun và, trong một số trường hợp, bảo mật.
Điều này đã được nói, hack lõi không phải lúc nào cũng xấu xa như chúng ta muốn làm cho nó ra. Nếu không sửa đổi lõi, chúng tôi sẽ không có các bản phân phối như Pressflow và lõi tăng cường đó theo những cách thú vị. Điều cực kỳ quan trọng là bạn phải biết chính xác những gì bạn đang làm, rằng bạn đang phân phối các bản vá của mình với bản phân phối của bạn (tốt nhất là theo cách cho phép bạn áp dụng lại chúng một cách tự động sau nâng cấp) và bạn đang giữ tài liệu chi tiết về những gì bạn đã thay đổi và tại sao bạn thay đổi nó.
Tùy thuộc vào cách bạn sắp xếp mọi thứ, bạn chắc chắn có thể thực hiện thay đổi ở trên xmlrpc_request()
, tạo một bản vá và sau đó sử dụng một cái gì đó như Drush Make để tự động áp dụng nó (lưu ý rằng Drush Make đang chuyển sang dự án Drush cho bản phát hành 5.x ), trong khi cung cấp tài liệu bổ sung trong tệp thực hiện và các nơi khác về những thay đổi đó và lý do cần thiết / mong muốn.
Một mô hình phổ biến khác để tăng cường các chức năng cốt lõi là tạo một trình bao bọc thêm một chút chức năng nhỏ vào chức năng cốt lõi và gọi trình bao bọc thay cho việc triển khai lõi. Khi khả thi, điều này làm cho mọi thứ trở nên mô-đun hơn nhiều. Hãy xem xét những điều sau đây:
/**
* 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;
}
Một lần nữa, tùy thuộc vào những gì bạn đang làm điều này có thể hoặc không khả thi, nhưng khi bạn đã tự cứu mình một vài vấn đề đau đầu trong việc cố gắng đảm bảo rằng lõi vẫn được vá và ghi lại. Mặc dù trong trường hợp này, một chức năng một lần như thế này có vẻ như là một ứng cử viên hoàn hảo cho một trình bao bọc như vậy. Nếu việc triển khai của bạn được ghi lại trong một mô-đun, bạn thậm chí có thể mở rộng trên nó để kiểm soát mức độ nhật ký của toàn bộ giải pháp của bạn, vô hiệu hóa chức năng này trên các trang web sản xuất:
/**
* 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);
}
}
Nói tóm lại, bạn muốn tối đa hóa những gì bạn có thể làm với các mô-đun (và bạn có thể làm rất nhiều), nhưng có những lý do chính đáng để thay đổi cốt lõi. Nó nên được thực hiện với sự cẩn thận, đó là tất cả.