Điểm:2

Bộ nhớ đệm ID nút trên hook_form_alter()

lá cờ in

Tôi có một biểu mẫu web có trường email. Tôi đang nhúng biểu mẫu web trên mỗi nút, với một trường trên nút cho địa chỉ email.

tôi đã thực hiện hook_form_alter() trong tệp .theme của tôi tải nút bằng cách sử dụng $node = \Drupal::routeMatch()->getParameter('node');.

Sau đó, tôi có thể tải nút và lấy địa chỉ email thích hợp và đặt địa chỉ đó trong biểu mẫu web. Vấn đề là nút được lưu trữ cho người dùng ẩn danh. Tôi đang ở nút nào không quan trọng, $node->id() luôn trả về cùng một ID nút được lưu trong bộ nhớ cache.

Tôi đã thử một trong hai dòng này, nhưng ID nút vẫn như cũ.

\Drupal::service('page_cache_kill_switch')->trigger();
$vars['#cache']['max-age'] = 0;

Tôi hiểu rằng tôi phải xóa các thẻ bộ đệm và bối cảnh bộ đệm, nhưng không có ví dụ nào chỉ ra chính xác cách thực hiện việc này trong hook_form_alter().

Làm cách nào để xóa bộ nhớ cache đúng cách?

Điểm:5
lá cờ cn

Khi bạn nhận được các tham số tuyến đường, bạn cần bối cảnh bộ đệm này:

$form['#cache']['contexts'][] = 'tuyến đường';

Bạn cũng có thể muốn thêm dữ liệu bộ nhớ cache của nút để biểu mẫu bị vô hiệu hóa khi nút được lưu với một giá trị trường khác:

$renderer = \Drupal::service('renderer');
$renderer->addCacheableDependency($form, $node);

Bối cảnh bộ đệm được áp dụng cho biểu mẫu và tất cả các thành phần trang nơi biểu mẫu được đặt. Vì vậy, điều này hoạt động bất kể bạn nhúng biểu mẫu ở đâu.

Nếu biểu mẫu được nhúng trong một nút, thì việc lấy nút từ đối sánh tuyến đường có lẽ không phải là ý tưởng hay nhất. Bạn nên sử dụng nút hoặc ID nút làm tham số khi gọi biểu mẫu. Sau đó, bạn có thể thử câu trả lời từ @sonfd vì bạn không cần các khóa bộ đệm riêng cho nút và biểu mẫu web.

lá cờ in
Đây là những gì đã làm nó. Cảm ơn bạn rất nhiều!! $form['#cache']['contexts'][] = 'tuyến đường';
Điểm:3
lá cờ in

Vấn đề là biểu mẫu web được lưu vào bộ nhớ cache với dữ liệu nút $ từ nút đầu tiên được truy cập, nhưng bạn cần biểu mẫu web là duy nhất cho mỗi nút.

Bạn có thể bỏ đặt các khóa bộ nhớ đệm cho biểu mẫu web của mình - điều này sẽ ngăn không cho biểu mẫu web tự lưu vào bộ nhớ đệm, nhưng vẫn cho phép biểu mẫu web được lưu vào bộ nhớ cache cùng với cha của nó (nút), với tất cả siêu dữ liệu bộ nhớ đệm của biểu mẫu web nổi lên.

trong bạn hook_form_FORM_ID_alter() (địa chỉ bạn đang sử dụng để đặt địa chỉ email), bạn có thể bỏ đặt các khóa bộ đệm như:

if (isset($form['#cache']['keys']) {
  unset($form['#cache']['keys']);
}

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.