Có cách nào để vô hiệu hóa bộ nhớ đệm cho một trường cho người dùng ẩn danh không?


7

Tôi gặp một vấn đề thú vị, nhưng có lẽ là phổ biến. Khi bật bộ nhớ đệm, chứng khoán không được cập nhật ngay lập tức cho người dùng ẩn danh (điều này có nghĩa là đó là điểm của bộ nhớ đệm). Tuy nhiên, điều này dẫn đến một chút UXWTF. Khi hết sản phẩm, người dùng vẫn được hiển thị rằng '1' vẫn khả dụng. Chỉ khi họ cố gắng thêm nó vào giỏ hàng, họ mới được thông báo

Số lượng tối đa của 'tên sản phẩm' có thể được mua là 0.

Tôi vẫn muốn giữ bộ nhớ cache khá nhiều cho mọi thứ khác, nhưng có cách nào để vô hiệu hóa bộ nhớ đệm của số lượng chứng khoán có sẵn không?


3
Bạn có thể kéo giá trị cổ phiếu thành một khối? Nếu vậy, bạn có thể hiển thị nó dưới dạng một khối và sử dụng Khối Ajax: drupal.org/project/ajaxblocks
keva

Thật không may, cách tiếp cận này thực sự chỉ hoạt động với một thực thể sản phẩm / một sản phẩm duy nhất (hoặc ngay cả khi có hai hoặc ba biến thể sản phẩm). Cách tiếp cận này có thể trở nên khó sử dụng khi có nhiều hơn một vài biến thể sản phẩm cho mỗi màn hình sản phẩm.
Nigel Waters

AJAX và / hoặc ESI / SSI là một câu trả lời drupal.org/project/esi . Vô hiệu hóa bộ đệm là câu trả lời khác drupal.org/project/cache_ilities . Cả hai đều là phức tạp và do đó không phải là một giải pháp giảm.
mikeytown2

Tôi vừa gặp vấn đề này drupal.org/node/1785158 và tác giả mô-đun trích dẫn "Các trang web thương mại không hoạt động tốt với bộ nhớ đệm và thương mại drupal cũng không ngoại lệ."
Junedkazi

Không thể viết câu trả lời xứng đáng ngay bây giờ, nhưng hãy xem Drupal 7 - Cập nhật các trường nút thông qua ajax / frontpage - xem xét chỉ cập nhật một trường đó bằng AJAX và bộ đếm thời gian. Bằng cách đó, ngay cả QTY thay đổi sau khi người dùng mở trang sẽ được phản ánh.
Mołot

Câu trả lời:


1

Chỉ là một ý tưởng - trong trường hợp này, một cách giải quyết có thể là móc một hàm sau khi một đơn đặt hàng đã được đặt và sau đó xóa bộ nhớ cache theo chương trình.

Bạn có thể sử dụng hook_commerce_checkout_complete()và có cache_clear_all()chức năng gọi .


sẽ không cache_clear_all () trở thành một cú hích hiệu suất lớn vì nó đang xóa toàn bộ bộ đệm của trang web. Ngoài ra, nếu trang web bận rộn, nó có thể bị sặc.
Junedkazi

Thật; Tôi đã suy nghĩ về điều tương tự và giải pháp sẽ là chỉ xóa bộ nhớ cache từ mô-đun Thương mại. Không chắc chắn chính xác những gì nên được gọi hoặc nếu có một chức năng cho điều đó.
Aram Boyajyan

2
@junedkazi cache_clear_all thực sự được đặt tên kém. Nó chấp nhận một tham số, trong đó bạn có thể chỉ định từng trang / đối tượng được lưu trong bộ nhớ cache để xóa.
jmking

0

Cơ chế bộ nhớ đệm trong Drupal rất linh hoạt. Bạn có thể sử dụng bộ đệm tùy chỉnh cho các phần của trang mà bạn muốn "không lưu trong bộ nhớ cache" trong một số điều kiện nhất định và khi điều kiện được đáp ứng (thanh toán), chỉ cần đặt lại bộ đệm cho $ cid cụ thể đó trong biểu mẫu thanh toán .

Xem bài đăng này để biết tổng quan tốt về api bộ nhớ đệm.

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.