Problem/Motivation

Given how views listings work, EVD is not a perfect fit. It is not only per entity but also per bundle.
This was mostly done, due to the fact how the field UI is created and you configure the rendering of a specific bundles,
but for views, you don't do things necessarily

Proposed resolution

  • Keep the way how EVDs are stored
  • Keep the UI
  • Just change EVD internally to support rendering fields across entiies

Remaining tasks

User interface changes

API changes

Comments

yched’s picture

Copy pasting myself from #1867518-112: Leverage entityDisplay to provide fast rendering for fields :

EVDs are currently modeled as "the config entities for Field UI's "Manage Fields" screen *on a specific bundle*". The config entity ID is keyed by entity type and bundle.

Maybe we could untie that strong "link to a specific bundle" for runtime, non-config EVDs - meaning, if you don't have a $this->bundle, you can be used for runtime rendering, but you can't be saved in config.

Then we'd need to change the way EVDs collect the (bundle specific) field definitions they pass to each formatter.
Currently that's done "statically" in EntityDisplayBase::getFieldDefinitions() based on $this->targetEntityType / $this->bundle.
It would need to happen dynamically based on each specific $entity being rendered.

That one seems doable, I could try to work on that in Dev Days next week.

larowlan’s picture

Wim proposed something similar a long time ago for a comment issue, will try and find it

Wim Leers’s picture

Yes, that's the "discussion at Drupal Dev Days Szeged with swentel" thing I referred to in a comment a few days ago.

Wim Leers’s picture

yched’s picture

I guess the major thing is that the Formatters still need to be instanciated (and thus, persisted in the EVD) by bundle, since they receive the FieldDefinition, which is by bundle.

Doing this came was rasied in earlier steps in #1867518: Leverage entityDisplay to provide fast rendering for fields as a possible way to mitigate the overhead of an approach using EVDs compared to an approach bypassing them. However, the difference didn't seem that big in the later comparisons in #183 and below over there.

Unless it does make a noticeable difference for per-field Views (which will get row caching anyway ?), I can't say I'm too keen on bending the internals of EVD too much away from their main use case (an EVD is for a bundle).

Is there a way we can try to predict how much that change would benefit Views ? Looks like this would mostly save the creation of one EVD per bundle, so maybe we should check the wall time of EVD::create() there ?

Fabianx’s picture

I think the better benefit is to re-use this issue to allow aliased fields and less cross-bundle rendering (which did not work). That could remove quite some complexity from the views code IMHO.

yched’s picture

@Fabianx: yes, aliased fields (i.e EVD supporting rendering several times the same field) is still interesting IMO, and could be worthwhile in the future for the "main use case" (entity_view()) as well. That's a separate topic though, so I'd rather open a separate issue though, else the OP and first comments here would be totally unrelated. Opened #2483095: Consider adding support for 'field aliases' in EVD (allow an EVD to render a field several times) for that.

The question in #5 is then - do we "won't fix" this issue here ?

Version: 8.0.x-dev » 8.1.x-dev

Drupal 8.0.6 was released on April 6 and is the final bugfix release for the Drupal 8.0.x series. Drupal 8.0.x will not receive any further development aside from security fixes. Drupal 8.1.0-rc1 is now available and sites should prepare to update to 8.1.0.

Bug reports should be targeted against the 8.1.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.2.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.1.x-dev » 8.2.x-dev

Drupal 8.1.9 was released on September 7 and is the final bugfix release for the Drupal 8.1.x series. Drupal 8.1.x will not receive any further development aside from security fixes. Drupal 8.2.0-rc1 is now available and sites should prepare to upgrade to 8.2.0.

Bug reports should be targeted against the 8.2.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.3.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.2.x-dev » 8.3.x-dev

Drupal 8.2.6 was released on February 1, 2017 and is the final full bugfix release for the Drupal 8.2.x series. Drupal 8.2.x will not receive any further development aside from critical and security fixes. Sites should prepare to update to 8.3.0 on April 5, 2017. (Drupal 8.3.0-alpha1 is available for testing.)

Bug reports should be targeted against the 8.3.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.4.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.3.x-dev » 8.4.x-dev

Drupal 8.3.6 was released on August 2, 2017 and is the final full bugfix release for the Drupal 8.3.x series. Drupal 8.3.x will not receive any further development aside from critical and security fixes. Sites should prepare to update to 8.4.0 on October 4, 2017. (Drupal 8.4.0-alpha1 is available for testing.)

Bug reports should be targeted against the 8.4.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.5.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.4.x-dev » 8.5.x-dev

Drupal 8.4.4 was released on January 3, 2018 and is the final full bugfix release for the Drupal 8.4.x series. Drupal 8.4.x will not receive any further development aside from critical and security fixes. Sites should prepare to update to 8.5.0 on March 7, 2018. (Drupal 8.5.0-alpha1 is available for testing.)

Bug reports should be targeted against the 8.5.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.6.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.5.x-dev » 8.6.x-dev

Drupal 8.5.6 was released on August 1, 2018 and is the final bugfix release for the Drupal 8.5.x series. Drupal 8.5.x will not receive any further development aside from security fixes. Sites should prepare to update to 8.6.0 on September 5, 2018. (Drupal 8.6.0-rc1 is available for testing.)

Bug reports should be targeted against the 8.6.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.7.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.6.x-dev » 8.8.x-dev

Drupal 8.6.x will not receive any further development aside from security fixes. Bug reports should be targeted against the 8.8.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.9.x-dev branch. For more information see the Drupal 8 and 9 minor version schedule and the Allowed changes during the Drupal 8 and 9 release cycles.

Version: 8.8.x-dev » 8.9.x-dev

Drupal 8.8.7 was released on June 3, 2020 and is the final full bugfix release for the Drupal 8.8.x series. Drupal 8.8.x will not receive any further development aside from security fixes. Sites should prepare to update to Drupal 8.9.0 or Drupal 9.0.0 for ongoing support.

Bug reports should be targeted against the 8.9.x-dev branch from now on, and new development or disruptive changes should be targeted against the 9.1.x-dev branch. For more information see the Drupal 8 and 9 minor version schedule and the Allowed changes during the Drupal 8 and 9 release cycles.

Pasqualle’s picture

Version: 8.9.x-dev » 9.2.x-dev

Version: 9.2.x-dev » 9.3.x-dev

Drupal 9.2.0-alpha1 will be released the week of May 3, 2021, which means new developments and disruptive changes should now be targeted for the 9.3.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 9.3.x-dev » 9.4.x-dev

Drupal 9.3.0-rc1 was released on November 26, 2021, which means new developments and disruptive changes should now be targeted for the 9.4.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 9.4.x-dev » 9.5.x-dev

Drupal 9.4.0-alpha1 was released on May 6, 2022, which means new developments and disruptive changes should now be targeted for the 9.5.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 9.5.x-dev » 10.1.x-dev

Drupal 9.5.0-beta2 and Drupal 10.0.0-beta2 were released on September 29, 2022, which means new developments and disruptive changes should now be targeted for the 10.1.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 10.1.x-dev » 11.x-dev

Drupal core is moving towards using a “main” branch. As an interim step, a new 11.x branch has been opened, as Drupal.org infrastructure cannot currently fully support a branch named main. New developments and disruptive changes should now be targeted for the 11.x branch, which currently accepts only minor-version allowed changes. For more information, see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.