The entity view block is rendered even though the active fields of the referenced view mode are empty

Created on 13 May 2024, 10 months ago

Problem/Motivation

The entity block (view) that references a view mode of the same entity in which the active fields are empty is rendered.

Steps to reproduce

For example, using Layout Builder:

  1. Enable Layout Builder and ctools.
  2. Manage layout on Default view mode.
  3. Add the Entity block and choose any view mode in which you have any fields configured that are not in the default view mode.
  4. View the entity and the block will be displayed even if the fields are empty.

Proposed resolution

I have created a patch where I filter out active fields that are not base fields and are not empty.
If all active fields that are not base fields are empty, it returns an empty array.

🐛 Bug report
Status

Active

Version

3.14

Component

Code

Created by

🇪🇸Spain einarulfhednar

Live updates comments and jobs are added and updated live.
Sign in to follow issues

Comments & Activities

  • Issue created by @einarulfhednar
  • Status changed to Needs review 10 months ago
  • 🇪🇸Spain Carlos Romero

    Carlos Romero made their first commit to this issue’s fork.

  • 🇫🇷France ericdsd France

    Hi i tested the patch against ctools 3.14.0
    and views pages returns an error

    Le site Web a rencontré une erreur inattendue. Veuillez essayer de nouveau plus tard.
    
    Error: Call to a member function getBaseFieldDefinitions() on null in Drupal\ctools\Plugin\Block\EntityView->build() (line 138 of modules/contrib/ctools/src/Plugin/Block/EntityView.php).
    
    Drupal\block\BlockViewBuilder::preRender(Array)
    call_user_func_array(Array, Array) (Line: 111)
    Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 797)
    Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 386)
    Drupal\Core\Render\Renderer->doRender(Array) (Line: 458)
    Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
    Drupal\Core\Render\Renderer->render(Array) (Line: 474)
    Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 153)
    __TwigTemplate_39d1120b7c348d10f138a3908dc12f89->doDisplay(Array, Array) (Line: 394)
    Twig\Template->displayWithErrorHandling(Array, Array) (Line: 367)
    Twig\Template->display(Array) (Line: 379)
    Twig\Template->render(Array, Array) (Line: 40)
    Twig\TemplateWrapper->render(Array) (Line: 53)
    twig_render_template('themes/custom/frontend_b5/templates/layout/page.html.twig', Array) (Line: 372)
    Drupal\Core\Theme\ThemeManager->render('page', Array) (Line: 445)
    Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
    Drupal\Core\Render\Renderer->render(Array) (Line: 474)
    Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 139)
    __TwigTemplate_5bb4cd612af95b2749578fc18ced131c->doDisplay(Array, Array) (Line: 394)
    Twig\Template->displayWithErrorHandling(Array, Array) (Line: 367)
    Twig\Template->display(Array) (Line: 379)
    Twig\Template->render(Array, Array) (Line: 40)
    Twig\TemplateWrapper->render(Array) (Line: 53)
    twig_render_template('themes/custom/frontend_b5/templates/layout/html.html.twig', Array) (Line: 372)
    Drupal\Core\Theme\ThemeManager->render('html', Array) (Line: 445)
    Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 204)
    Drupal\Core\Render\Renderer->render(Array) (Line: 158)
    Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 592)
    Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 159)
    Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90)
    Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object)
    call_user_func(Array, Object, 'kernel.view', Object) (Line: 111)
    Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 186)
    Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 76)
    Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
    Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
    Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 106)
    Drupal\page_cache\StackMiddleware\PageCache->pass(Object, 1, 1) (Line: 85)
    Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 50)
    Drupal\ban\BanMiddleware->handle(Object, 1, 1) (Line: 48)
    Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
    Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 51)
    Drupal\Core\StackMiddleware\StackedHttpKernel->handle(Object, 1, 1) (Line: 704)
    Drupal\Core\DrupalKernel->handle(Object) (Line: 19)
    
Production build 0.71.5 2024