Làm cách nào để xóa biến khỏi bảng biến khi mô-đun của tôi gỡ cài đặt?


7

Tôi đang làm việc trên một mô-đun Drupal 6 có thêm một số biến vào bảng biến. Làm thế nào tôi có thể loại bỏ các biến đó khỏi bảng biến khi mô-đun được gỡ cài đặt?

Câu trả lời:


13

Theo dõi các biến của bạn và thêm các variable_del()cuộc gọi phù hợp trong quá trình thực hiện hook_uninstall():

function foo_uninstall() {
  variable_del('foo_variable1');
  variable_del('foo_variable2');
}

Như hook_uninstall()là một hook cài đặt, nó cần nằm trong .installtệp của mô-đun của bạn (ví dụ foo.install).

Bạn không nên xóa tất cả các biến có tiền tố với tên mô-đun của mình vì các xung đột không gian tên sẽ quay lại cắn bạn. Ví dụ: nếu tên mô-đun của bạn là foo, bạn có thể nghĩ rằng bạn chỉ nên thăm dò variablesbảng cho tất cả các biến có tiền tố foo_. Nhưng nếu tôi viết một mô-đun có tên foo_awesomethì sao? Bạn cũng sẽ xóa các biến của tôi. Điều đó sẽ không tốt


2

CẬP NHẬT: Khi tiếp tục đào sâu thảo luận về bài đăng trên blog này , tôi đã xem qua ý tưởng này từ Dave Reid để áp dụng phương pháp mà lõi Drupal sử dụng .


Điều này cũng sẽ xóa các biến cho các mô-đun khác như "testsplemodule_extternal".

@Mark Trapp: Vâng, có một số thảo luận về điều đó trong các bình luận trên bài đăng. Tôi đã cập nhật câu trả lời của mình với một liên kết đến một ý tưởng tốt hơn trong cuộc thảo luận đó.
Matt V.

1
@Matt Tôi vẫn chưa hài lòng về việc sử dụng một hook mới, chung chung như thế vì sợ va chạm không gian tên, nhưng đó chắc chắn là một lựa chọn tốt hơn. Và rõ ràng, phương pháp mà Dave Reid sử dụng (thực hiện hook_variables()) không phải là cách thức cốt lõi: đó là cách anh ấy thực hiện nó trong một số mô-đun của chính mình. Trong Drupal 8, vấn đề này có thể được giải quyết bằng việc bổ sung hook_variable_info()móc lõi .

@Mark Trapp: Vâng, tôi đã đưa ra giả định rằng cốt lõi đã làm theo cách đó dựa trên chủ đề trả lời của Mark. Tôi đã thực hiện một số hoạt động đào và rất ngạc nhiên khi thấy rằng khá nhiều mô-đun cốt lõi vẫn chưa thực hiện hook_uninstall.
Matt V.

2
Chà, một số mô-đun cốt lõi có thể không có bất kỳ biến nào và một số mô-đun được yêu cầu và không thể gỡ cài đặt như nút và người dùng. Vì vậy, thật vô nghĩa khi những cái này thực hiện hook_uninstall (). Điều đó nói rằng, hoàn toàn có thể một số biến không được gỡ cài đặt chính xác ngay cả trong lõi. Đó là một thứ dễ bị lãng quên. Tôi đã đầu tư nhiều giờ để cố gắng đưa hook_variable_info () vào lõi nhưng điều đó đơn giản sẽ không xảy ra với hệ thống biến hiện tại, nó làm cho nó quá phức tạp và quá chậm.
Berdir
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.