Dường như không thể chỉ sử dụng Drupal, có nghĩa là:
variable_set()
bản thân nó không gọi bất kỳ hook nào, nhưng nó sử dụng db_merge()
. Hàm đó đang sử dụng MergeQuery
lớp. Bây giờ, sẽ rất tốt để kết nối hook_query_alter()
, nhưng nó chỉ hoạt động cho các lớp truy vấn thực hiện QueryAlterableInterface
giao diện. Đáng buồn thay, giao diện này hiện chỉ được thực hiện bởi SelectQuery
các SelectQueryExtender
lớp và không phải bởi MergeQuery
lớp.
Lưu ý rằng ngay cả khi bạn sẽ tìm cách tạo một lớp con MergeQuery
, nó sẽ thực hiện QueryAlterableInterface
và khiến Drupal sử dụng nó. hook_query_alter()
chỉ hoạt động trên các truy vấn có thẻ và variable_set()
không gắn thẻ truy vấn của nó, vì vậy hook sẽ không được sử dụng, trừ khi bạn sẵn sàng hack core. Nhưng nếu là bạn, bạn không cần tất cả những thứ đó, bạn chỉ có thể hack trong một cuộc gọi hook.
Nếu bạn cảm thấy khó khăn, bạn có thể sử dụng một cách tiếp cận PHP gián tiếp hơn: $conf
là một mảng toàn cầu của các biến cấu hình; bạn có thể viết một mô-đun sẽ thay thế nó bằng đối tượng hoạt động như một mảng, như được mô tả trên Stack Overflow . Để làm cho nó một sự thay thế tốt, bạn cần phải thực hiện ArrayAccess
. Kéo tất cả các giá trị từ bản gốc $conf
vào đối tượng của bạn. Sau đó, trong ArrayAccess::offsetSet()
việc thực hiện logic đăng nhập của bạn.
$conf
sau đó: D Hy vọng câu trả lời cập nhật của tôi sẽ giúp được ai đó.