Score:0

แก้ไขบล็อกที่กำหนดเองโดยใช้ hook_entity_type_view_alter()

ธง gb

ใน Drupal 9 ฉันกำลังพยายามใช้ hook_ENTITY_TYPE_view_alter() เพื่อแก้ไขฟิลด์เนื้อหาของบล็อกแบบกำหนดเอง

อย่างไรก็ตาม ฉันไม่ทราบวิธีการเข้าถึงข้อมูลใน สร้าง $ อาร์เรย์เพื่อเปลี่ยน นี่คือการถ่ายโอนข้อมูลบางส่วนของ สร้าง $ อาร์เรย์ ฉันต้องการแก้ไขลิงก์ HTML ในไฟล์ ร่างกาย สนาม.

อาร์เรย์ (8) {
  ["#block_content"]=> วัตถุ(Drupal\block_content\Entity\BlockContent)#4946 (30) {
    ["theme":protected]=> NULL 
    ["values":protected]=> อาร์เรย์(17) { 
      ["id"]=> อาร์เรย์(1) { ["x-default"]=> สตริง(1) "4" } 
      ["revision_id"]=> อาร์เรย์(1) { ["x-default"]=> สตริง(1) "4" } 
      ["type"]=> อาร์เรย์(1) { ["x-default"]=> สตริง(5) "พื้นฐาน" } 
      ["uuid"]=> อาร์เรย์(1) { ["x-default"]=> สตริง(36) "f0c17429-584a-4221-995c-c00f4c41c714" } 
      ["langcode"]=> อาร์เรย์(1) { ["x-default"]=> สตริง(2) "en" } 
      ["revision_user"]=> อาร์เรย์(1) { ["x-default"]=> NULL } 
      ["revision_created"]=> อาร์เรย์(1) { ["x-default"]=> สตริง(10) "1632243859" } 
      ["revision_log"]=> อาร์เรย์(1) { ["x-default"]=> NULL } 
      ["revision_default"]=> อาร์เรย์(1) { ["x-default"]=> สตริง(1) "1" } 
      ["isDefaultRevision"]=> อาร์เรย์(1) { ["x-default"]=> สตริง(1) "1" } 
      ["สถานะ"]=> อาร์เรย์(1) { ["x-default"]=> สตริง(1) "1" } 
      ["info"]=> array(1) { ["x-default"]=> string(11) "Add Content" } 
      ["เปลี่ยน"]=> อาร์เรย์(1) { ["x-default"]=> สตริง(10) "1632457827" } 
      ["default_langcode"]=> อาร์เรย์(1) { ["x-default"]=> สตริง(1) "1" } 
      ["revision_translation_affected"]=> อาร์เรย์(1) { ["x-default"]=> สตริง(1) "1" } 
      ["reusable"]=> อาร์เรย์(1) { ["x-default"]=> สตริง(1) "1" } 
      ["body"]=> อาร์เรย์(1) {
        ["x-default"]=> อาร์เรย์(1) {
          [0]=> อาร์เรย์(3) {
            ["value"]=> string(652) "[â¦]" 
            ["บทสรุป"]=> สตริง(0) "" 
            ["รูปแบบ"]=> สตริง(11) "sbn_toolbar"
          }
        }
      }
    }
  }
}

ฉันไม่สามารถหาคำตอบที่ตรงไปตรงมาได้ผ่านการค้นหาของฉัน สิ่งที่ใกล้เคียงที่สุดที่ฉันพยายามทำคือรหัสนี้

$build['content']['#markup'] = Markup::create('ข้อความของคุณที่นี่');

มันล้มเหลวด้วยข้อผิดพลาดนี้

sbn_block_content_view_alter (อาร์เรย์ วัตถุ วัตถุ) (บรรทัด: 539)
Drupal\Core\Extension\ModuleHandler->alter('block_content_view', Array, Object, Object) (บรรทัด: 305)
Drupal\Core\Entity\EntityViewBuilder->buildMultiple(อาร์เรย์) (บรรทัด: 29)
Drupal\block_content\BlockContentViewBuilder->viewMultiple (อาร์เรย์, 'เต็ม', NULL) (บรรทัด: 17)
Drupal\block_content\BlockContentViewBuilder->view(Object, 'full') (บรรทัด: 187)
Drupal\block_content\Plugin\Block\BlockContentBlock->build() (บรรทัด: 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) (บรรทัด: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'section_component.build.render_array') (บรรทัด: 90)
Drupal\layout_builder\SectionComponent->toRenderArray(อาร์เรย์, ) (บรรทัด: 86)
Drupal\layout_builder\Section->toRenderArray(อาร์เรย์) (บรรทัด: 317)
Drupal\layout_builder\Entity\LayoutBuilderEntityViewDisplay->buildSections(Object) (บรรทัด: 276)
Drupal\layout_builder\Entity\LayoutBuilderEntityViewDisplay->buildMultiple(อาร์เรย์) (บรรทัด: 340)
Drupal\Core\Entity\EntityViewBuilder->buildComponents(อาร์เรย์, อาร์เรย์, อาร์เรย์, 'เต็ม') (บรรทัด: 282)
Drupal\Core\Entity\EntityViewBuilder->buildMultiple(อาร์เรย์) (บรรทัด: 239)
Drupal\Core\Entity\EntityViewBuilder->build(อาร์เรย์) call_user_func_array(อาร์เรย์, อาร์เรย์) (บรรทัด: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks ต้องเป็นเมธอดของคลาสที่ใช้ \Drupal\Core\Security\TrustedCallbackInterface หรือเป็นฟังก์ชันนิรนาม การเรียกกลับคือ %s ดู https://www.drupal.org/node/2966725', 'ข้อยกเว้น', 'Drupal\Core\Render\Element\RenderCallbackInterface') (บรรทัด: 781)
Drupal\Core\Render\Renderer->doCallback('#pre_render', อาร์เรย์, อาร์เรย์) (บรรทัด: 372)
Drupal\Core\Render\Renderer->doRender(อาร์เรย์, ) (บรรทัด: 200)
Drupal\Core\Render\Renderer->render(Array, ) (บรรทัด: 241)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent{closure}() (บรรทัด: 573)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (บรรทัด: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (บรรทัด: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (บรรทัด: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object) call_user_func(Array, Object, 'kernel.view', Object) (บรรทัด: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (บรรทัด: 163)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (บรรทัด: 80)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (บรรทัด: 57)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (บรรทัด: 47)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (บรรทัด: 106)
Drupal\page_cache\StackMiddleware\PageCache->pass(Object, 1, 1) (บรรทัด: 85)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (บรรทัด: 47)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (บรรทัด: 52)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (บรรทัด: 23)
Stack\StackedHttpKernel->handle(Object, 1, 1) (บรรทัด: 706)
Drupal\Core\DrupalKernel->ที่จับ (วัตถุ) (บรรทัด: 19)

4uk4 avatar
cn flag
ข้อความแสดงข้อผิดพลาดหายไป เป็นเพียงการติดตามสแต็กที่มีตะขอของคุณอยู่ด้านบน น่าจะเป็นข้อผิดพลาดทางไวยากรณ์ หากคุณต้องการแก้ไขฟิลด์ body ให้ลองดัมพ์ $build['body'] ก่อน
SomebodySysop avatar
gb flag
var_dump($build['body]) ให้ผลลัพธ์เดียวกันกับที่ var_dump($build) ทำด้านบน คำถามของฉันคือ ฉันจะแก้ไขค่า body ใน $build ได้อย่างไร
apaderno avatar
us flag
จะช่วยให้เห็นมากกว่าหนึ่งบรรทัดของการใช้งาน `hook_ENTITY_TYPE_view_alter()` นอกจากนี้ยังช่วยให้เห็นข้อความแสดงข้อผิดพลาด ไม่ใช่การติดตามสแต็กตามที่ @ 4k4 กล่าว
apaderno avatar
us flag
นอกจากนี้ ผลลัพธ์ของ `var_dump($build)` ยังถูกตัดให้เหลือส่วนที่ไม่เป็นประโยชน์มากนัก
SomebodySysop avatar
gb flag
คำถามของฉันได้รับการแก้ไข ฉันต้องการตัวอย่างการใช้ hook_entity_type_view_alter() เพื่อแก้ไขเนื้อหาของบล็อกที่กำหนดเอง
Razeem Ahmad avatar
ru flag
ลองเข้าถึงช่องเนื้อหาโดยใช้ `$build['#block_content']->body->value`

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา