Điểm:0

Làm cách nào để lập trình lưu bố cục của nút?

lá cờ us

Không chắc đây có phải là cách tiếp cận tốt nhất hay không nhưng nó hoạt động tốt.. gần như vậy.

Tôi đang sử dụng mô-đun Phương thức trình tạo bố cục, trong trình tạo bố cục, mở cấu hình khối theo phương thức. Điều này thật tuyệt nhưng tôi muốn mở rộng khả năng này ra giao diện người dùng để tôi có thể định cấu hình khối bố cục mà không cần phải đi vào bố cục của nút.

Nếu tôi chỉ đặt liên kết theo ngữ cảnh mà mô-đun này tạo vào trang nút của tôi; chắc chắn rằng nó sẽ mở phương thức cần thiết và cho phép tôi thay đổi cấu hình của khối cụ thể.Khi gửi, cấu hình khối được thay đổi và phương thức đóng, nhưng bố cục không được lưu để sử dụng cấu hình khối mới này. Điều này có thể được nhìn thấy khi tôi đi đến bố cục nút và nó cho biết có những thay đổi đang chờ xử lý. Nếu bây giờ tôi lưu bố cục, tôi sẽ thấy cấu hình khối của mình thay đổi.

Làm cách nào tôi có thể buộc lưu bố cục của nút theo chương trình?

Điểm:2
lá cờ bd

Mặc dù đây không phải là câu trả lời thực sự cho câu hỏi của bạn "Làm cách nào tôi có thể buộc lưu bố cục của nút theo chương trình?", Tôi muốn chỉ cho bạn Trình tạo bố cục IPE mô-đun mà tôi đã tạo để giải quyết trường hợp sử dụng tương tự như của bạn: Cung cấp khả năng chỉnh sửa trực tiếp từ trang xem của một nút.

Nếu đây không phải là một tùy chọn dành cho bạn, thì giải pháp có lập trình có thể phát triển xung quanh:

  1. nối vào biểu mẫu gửi
  2. thêm trình xử lý gửi tùy chỉnh của bạn
  3. lấy cấu hình khối bằng cách nào đó
  4. cập nhật OverridesSectionStorage cho nút
  5. lưu nút
  6. xóa bộ lưu trữ tạm thời cho trình tạo bố cục của nút đó

Ít nhất đó là những gì tôi nhớ lại. Khi làm việc trên IPE của Trình tạo bố cục, thành thật mà nói, tôi thấy rằng toàn bộ cấu trúc hơi phức tạp, đó là lý do chính để thử và hoàn thành việc này một lần theo cách chung chung hơn.

Cập nhật Một số chi tiết khác tôi đã tra cứu có thể giúp ích cho việc này:

Để có được các phần cho nút kích hoạt trình tạo bố cục, bạn có thể sử dụng LayoutEntityHelperTrait::getSectionStorageForEntity, ví dụ.:

$section_storage = $this->getSectionStorageForEntity($node);
$sections = $section_storage->getSections();

Cái này $phần biến là một mảng các phần, mỗi phần chứa các thành phần của phần. Bạn có thể lặp lại chúng cho đến khi tìm thấy khối mà bạn đang tìm kiếm và làm những gì bạn cần làm để cập nhật cấu hình (mã chưa được kiểm tra):

foreach ($sections as $delta => $section) {
  foreach ($section->getComponents() dưới dạng $component) {
    // Mỗi thành phần là một đối tượng kiểu \Drupal\layout_builder\SectionComponent.
    // Để xác định khối, bạn có thể sử dụng plugin id (hoặc UUID nếu
    // tồn tại nhiều khối cùng loại). 
    $plugin_id = $component->getPluginId();
    nếu ($plugin_id == 'BLOCK_PLUGIN_ID') {
      $configuration = $component->get('configuration');
      // Cập nhật cấu hình, sau đó cập nhật thành phần.
      $component->setConfiguration($configuration);
    }
  }
}

Khi các thay đổi cần thiết đã được thực hiện, các phần có thể được lưu lại vào nút bằng cách sử dụng:

$node->get(OverridesSectionStorage::FIELD_NAME)->setValue($sections);

Và để xóa tempstore, một cái gì đó như thế này sẽ hoạt động, mặc dù điều này rõ ràng nên sử dụng DI:

\Drupal::service('layout_builder.tempstore_repository')->delete($section_storage);
lá cờ cn
Nhận xét không dành cho thảo luận mở rộng; cuộc trò chuyện này đã được [chuyển sang trò chuyện](https://chat.stackexchange.com/rooms/136485/discussion-on-answer-by-berliner-how-to-programmatically-save-a-nodes-layout).

Đă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.