Puncte:0

modificați blocul personalizat folosind hook_entity_type_view_alter()

drapel gb

În Drupal 9, încerc să folosesc hook_ENTITY_TYPE_view_alter() pentru a modifica câmpul de corp al unui bloc personalizat.

Cu toate acestea, nu știu cum să accesez datele din $build matrice pentru a o schimba. Aceasta este o descărcare parțială a $build matrice. Vreau să modific linkurile HTML din corp camp.

matrice (8) {
  ["#block_content"]=> obiect(Drupal\block_content\Entity\BlockContent)#4946 (30) {
    ["theme":protected] => NULL 
    ["valori":protected] => matrice(17) { 
      ["id"]=> array(1) { ["x-default"] => string(1) "4" } 
      ["revision_id"]=> array(1) { ["x-default"] => string(1) "4" } 
      ["tip"]=> matrice (1) { ["x-default"] => șir(5) "de bază" } 
      ["uuid"]=> matrice(1) { ["x-default"]=> șir(36) "f0c17429-584a-4221-995c-c00f4c41c714" } 
      ["langcode"]=> array(1) { ["x-default"] => string(2) "ro" } 
      ["revision_user"]=> matrice(1) { ["x-default"]=> NULL } 
      ["revision_created"] => array(1) { ["x-default"] => string(10) "1632243859" } 
      ["revision_log"]=> matrice(1) { ["x-default"]=> NULL } 
      ["revision_default"]=> matrice(1) { ["x-default"]=> șir(1) "1" } 
      ["isDefaultRevision"]=> matrice(1) { ["x-default"]=> șir(1) "1" } 
      ["status"]=> matrice(1) { ["x-default"] => șir(1) "1" } 
      ["info"]=> array(1) { ["x-default"] => string(11) "Adăugați conținut" } 
      ["schimbat"] => matrice (1) { ["x-default"] => șir (10) "1632457827" } 
      ["default_langcode"]=> matrice(1) { ["x-default"]=> șir(1) "1" } 
      ["revision_translation_affected"]=> matrice(1) { ["x-default"]=> șir(1) "1" } 
      ["reutilizabil"]=> matrice(1) { ["x-default"]=> șir(1) "1" } 
      ["body"] => matrice(1) {
        ["x-default"] => matrice(1) {
          [0] => matrice(3) {
            ["value"] => string(652) "[â¦]" 
            ["summary"] => string(0) "" 
            ["format"] => string(11) "sbn_toolbar"
          }
        }
      }
    }
  }
}

Se pare că nu pot găsi un răspuns simplu la acest lucru prin căutările mele. Cel mai aproape m-am apropiat de ceea ce încerc să fac este acest cod.

$build['content']['#markup'] = Markup::create('Textul dvs. aici');

Eșuează cu această eroare.

sbn_block_content_view_alter(Matrice, obiect, obiect) (linia: 539)
Drupal\Core\Extension\ModuleHandler->alter('block_content_view', Array, Object, Object) (Linia: 305)
Drupal\Core\Entity\EntityViewBuilder->buildMultiple(Array) (linia: 29)
Drupal\block_content\BlockContentViewBuilder->viewMultiple(Matrice, „full”, NULL) (linia: 17)
Drupal\block_content\BlockContentViewBuilder->view(Object, 'full') (Linia: 187)
Drupal\block_content\Plugin\Block\BlockContentBlock->build() (linia: 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) (Linia: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'section_component.build.render_array') (Linia: 90)
Drupal\layout_builder\SectionComponent->toRenderArray(Array, ) (Linie: 86)
Drupal\layout_builder\Section->toRenderArray(Array) (linia: 317)
Drupal\layout_builder\Entity\LayoutBuilderEntityViewDisplay->buildSections(Object) (linia: 276)
Drupal\layout_builder\Entity\LayoutBuilderEntityViewDisplay->buildMultiple(Array) (linia: 340)
Drupal\Core\Entity\EntityViewBuilder->buildComponents(Array, Array, Array, 'full') (Linia: 282)
Drupal\Core\Entity\EntityViewBuilder->buildMultiple(Array) (linia: 239)
Drupal\Core\Entity\EntityViewBuilder->build(Array) call_user_func_array(Matrice, Matrice) (Linie: 101)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callback-urile trebuie să fie metode ale unei clase care implementează \Drupal\Core\Security\TrustedCallbackInterface sau să fie o funcție anonimă. Callback-ul a fost %s. Vezi https://www.drupal.org/node/2966725', „excepție”, „Drupal\Core\Render\Element\RenderCallbackInterface”) (linia: 781)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Linia: 372)
Drupal\Core\Render\Renderer->doRender(Array, ) (Linie: 200)
Drupal\Core\Render\Renderer->render(Array, ) (Linie: 241)
Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent{closure}() (Linia: 573)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Linia: 242)
Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Linia: 132)
Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Linie: 90)
Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object) call_user_func(Array, Object, 'kernel.view', Object) (Linie: 142)
Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Linia: 163)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Linie: 80)
Symfony\Component\HttpKernel\HttpKernel->handle(Obiect, 1, 1) (Linie: 57)
Drupal\Core\StackMiddleware\Session->handle(Obiect, 1, 1) (Linie: 47)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Obiect, 1, 1) (Linie: 106)
Drupal\page_cache\StackMiddleware\PageCache->pass(Object, 1, 1) (Linie: 85)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Linie: 47)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Obiect, 1, 1) (Linie: 52)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Obiect, 1, 1) (Linia: 23)
Stack\StackedHttpKernel->handle(Obiect, 1, 1) (Linie: 706)
Drupal\Core\DrupalKernel->handle(Obiect) (Linia: 19)

4uk4 avatar
drapel cn
Lipsește mesajul de eroare. Este doar urma stivei cu cârligul în partea de sus. Probabil o eroare de sintaxă. Dacă doriți să modificați câmpul body, încercați mai întâi să descărcați $build['body'].
SomebodySysop avatar
drapel gb
var_dump($build['body]) îmi oferă aceeași ieșire ca var_dump($build) mai sus. Întrebarea mea este: cum modific valoarea corpului în $build?
apaderno avatar
drapel us
Ar ajuta să vedem mai mult de o singură linie a acelei implementări `hook_ENTITY_TYPE_view_alter()`. De asemenea, ar ajuta să vedeți mesajul de eroare, nu urmărirea stivei, așa cum a spus @4k4.
apaderno avatar
drapel us
De asemenea, rezultatul lui `var_dump($build)` a fost trunchiat la partea care nu este de mare ajutor.
SomebodySysop avatar
drapel gb
Întrebarea mea a fost editată. Am nevoie doar de un exemplu de utilizare a hook_entity_type_view_alter() pentru a modifica corpul unui bloc personalizat.
Razeem Ahmad avatar
drapel ru
Încercați să accesați câmpul body folosind `$build['#block_content']->body->value`

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.