Điểm:0

sửa đổi khối tùy chỉnh bằng hook_entity_type_view_alter()

lá cờ gb

Trong Drupal 9, tôi đang cố gắng sử dụng hook_ENTITY_TYPE_view_alter() để sửa đổi trường nội dung của một khối tùy chỉnh.

Tuy nhiên, tôi không biết cách truy cập dữ liệu trong xây dựng $ mảng để thay đổi nó. Đây là một bãi chứa một phần của xây dựng $ mảng. Tôi muốn sửa đổi các liên kết HTML trong thân thể cánh đồng.

mảng(8) {
  ["#block_content"]=> đối tượng(Drupal\block_content\Entity\BlockContent)#4946 (30) {
    ["theme":protected]=> NULL 
    ["values":protected]=> mảng(17) { 
      ["id"]=> mảng(1) { ["x-default"]=> chuỗi(1) "4" } 
      ["revision_id"]=> mảng(1) { ["x-default"]=> chuỗi(1) "4" } 
      ["type"]=> mảng(1) { ["x-default"]=> string(5) "basic" } 
      ["uuid"]=> mảng(1) { ["x-default"]=> chuỗi(36) "f0c17429-584a-4221-995c-c00f4c41c714" } 
      ["langcode"]=> mảng(1) { ["x-default"]=> string(2) "en" } 
      ["revision_user"]=> mảng(1) { ["x-default"]=> NULL } 
      ["revision_created"]=> mảng(1) { ["x-default"]=> chuỗi(10) "1632243859" } 
      ["revision_log"]=> mảng(1) { ["x-default"]=> NULL } 
      ["revision_default"]=> mảng(1) { ["x-default"]=> chuỗi(1) "1" } 
      ["isDefaultRevision"]=> mảng(1) { ["x-default"]=> chuỗi(1) "1" } 
      ["status"]=> array(1) { ["x-default"]=> string(1) "1" } 
      ["thông tin"]=> mảng(1) { ["x-default"]=> chuỗi(11) "Thêm nội dung" } 
      ["đã thay đổi"]=> mảng(1) { ["x-default"]=> chuỗi(10) "1632457827" } 
      ["default_langcode"]=> mảng(1) { ["x-default"]=> chuỗi(1) "1" } 
      ["revision_translation_affected"]=> mảng(1) { ["x-default"]=> chuỗi(1) "1" } 
      ["tái sử dụng"]=> mảng(1) { ["x-default"]=> chuỗi(1) "1" } 
      ["body"]=> mảng(1) {
        ["x-default"]=> mảng(1) {
          [0]=> mảng(3) {
            ["giá trị"]=> chuỗi(652) "[â¦]" 
            ["tóm tắt"]=> chuỗi(0) "" 
            ["format"]=> string(11) "sbn_toolbar"
          }
        }
      }
    }
  }
}

Tôi dường như không thể tìm thấy câu trả lời đơn giản cho vấn đề này thông qua các tìm kiếm của mình. Điều gần nhất tôi đến với những gì tôi đang cố gắng làm là mã này.

$build['content']['#markup'] = Markup::create('Văn bản của bạn ở đây');

Nó không thành công với lỗi này.

sbn_block_content_view_alter(Mảng, Đối tượng, Đối tượng) (Dòng: 539)
Drupal\Core\Extension\ModuleHandler->alter('block_content_view', Array, Object, Object) (Dòng: 305)
Drupal\Core\Entity\EntityViewBuilder->buildMultiple(Array) (Dòng: 29)
Drupal\block_content\BlockContentViewBuilder->viewMultiple(Array, 'full', NULL) (Dòng: 17)
Drupal\block_content\BlockContentViewBuilder->view(Object, 'full') (Dòng: 187)
Drupal\block_content\Plugin\Block\BlockContentBlock->build() (Dòng: 105)
Drupal\layout_builder\EventSubscriber\BlockComponentRenderArray->onBuildRender(Object, 'section_component.build.render_array', Object) call_user_func(Array, Object, 'section_component.build.render_array', Object) (Dòng: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'section_component.build.render_array') (Dòng: 90)
Drupal\layout_builder\SectionComponent->toRenderArray(Array, ) (Dòng: 86)
Drupal\layout_builder\Section->toRenderArray(Array) (Dòng: 317)
Drupal\layout_builder\Entity\LayoutBuilderEntityViewDisplay->buildSections(Object) (Dòng: 276)
Drupal\layout_builder\Entity\LayoutBuilderEntityViewDisplay->buildMultiple(Array) (Dòng: 340)
Drupal\Core\Entity\EntityViewBuilder->buildComponents(Array, Array, Array, 'full') (Dòng: 282)
Drupal\Core\Entity\EntityViewBuilder->buildMultiple(Array) (Dòng: 239)
Drupal\Core\Entity\EntityViewBuilder->build(Array) call_user_func_array(Mảng, Mảng) (Dòng: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render hàm gọi lại phải là phương thức của một lớp triển khai \Drupal\Core\Security\TrustedCallbackInterface hoặc là hàm ẩn danh. Hàm gọi lại là %s. Xem https://www.drupal.org/node/2966725', 'ngoại lệ', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Dòng: 781)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Dòng: 372)
Drupal\Core\Render\Renderer->doRender(Array, ) (Dòng: 200)
Drupal\Core\Render\Renderer->render(Array, ) (Dòng: 241)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent{closure}() (Dòng: 573)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Dòng: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Dòng: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Mảng, Đối tượng, Đối tượng) (Dòng: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object) call_user_func(Array, Object, 'kernel.view', Object) (Dòng: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Dòng: 163)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Dòng: 80)
Symfony\Component\HttpKernel\HttpKernel->xử lý(Đối tượng, 1, 1) (Dòng: 57)
Drupal\Core\StackMiddleware\Session->xử lý (Đối tượng, 1, 1) (Dòng: 47)
Drupal\Core\StackMiddleware\KernelPreHandle->xử lý(Đối tượng, 1, 1) (Dòng: 106)
Drupal\page_cache\StackMiddleware\PageCache->pass(Object, 1, 1) (Dòng: 85)
Drupal\page_cache\StackMiddleware\PageCache->xử lý(Đối tượng, 1, 1) (Dòng: 47)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->xử lý(Đối tượng, 1, 1) (Dòng: 52)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Dòng: 23)
Stack\StackedHttpKernel->xử lý(Đối tượng, 1, 1) (Dòng: 706)
Drupal\Core\DrupalKernel->xử lý (Đối tượng) (Dòng: 19)

4uk4 avatar
lá cờ cn
Thông báo lỗi bị thiếu. Nó chỉ là dấu vết ngăn xếp với cái móc của bạn ở trên cùng. Có lẽ là một lỗi cú pháp. Nếu bạn muốn sửa đổi trường nội dung thì trước tiên hãy thử kết xuất $build['body'].
SomebodySysop avatar
lá cờ gb
var_dump($build['body]) mang lại cho tôi kết quả giống như var_dump($build) ở trên. Câu hỏi của tôi là: làm cách nào để sửa đổi giá trị nội dung trong $build?
apaderno avatar
lá cờ us
Sẽ rất hữu ích khi xem nhiều hơn một dòng triển khai `hook_ENTITY_TYPE_view_alter()` đó. Nó cũng sẽ hữu ích để xem thông báo lỗi, không phải dấu vết ngăn xếp, như @ 4k4 đã nói.
apaderno avatar
lá cờ us
Ngoài ra, đầu ra của `var_dump($build)` đã bị cắt bớt thành phần không hữu ích lắm.
SomebodySysop avatar
lá cờ gb
Câu hỏi của tôi đã được chỉnh sửa. Tôi chỉ cần một ví dụ về cách sử dụng hook_entity_type_view_alter() để sửa đổi phần thân của khối tùy chỉnh.
Razeem Ahmad avatar
lá cờ ru
Thử truy cập vào trường nội dung bằng cách sử dụng `$build['#block_content']->body->value`

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