Problem/Motivation

In #2346893: Duplicate AJAX wrapper around a file field we discovered that with #render_children the render system duplicates some rendering, resulting in #prefix and #suffix being rendered twice. That duplication was fixed there. We still need to investigate whether this happens for other properties like #post_render.

In #2190333: Make #group FAPI / render feature work on all form/render #types out of the box, another case on clean main was found: a textfield assigned to a datetime element using #group is rendered twice. The datetime template renders the element again to output its children, causing preRenderGroup() to add the group members again. This does not require #2190333: Make #group FAPI / render feature work on all form/render #types out of the box to be applied, but if applied, more elements will be affected (datelist, managed_file).

Also there are concerns about:

Proposed resolution

Add regression coverage for repeated rendering, starting with the grouped-element case, and fix the duplication. The exact fix still needs to be determined.

Remaining tasks

  • Review the added FormElementGroupingTest, which currently fails because the grouped textfield appears twice instead of once.
  • Fix the duplicate rendering of group members.
  • Investigate the remaining questions about other callbacks, metadata and cache/asset bubbling. The grouped-element test does not cover these.

User interface changes

API changes

Data model changes

Issue fork drupal-2926030

Command icon Show commands

Start within a Git clone of the project using the version control instructions.

Or, if you do not have SSH keys set up on git.drupalcode.org:

Comments

alexpott created an issue. See original summary.

alexpott’s picture

Issue summary: View changes
alexpott’s picture

Issue summary: View changes

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

Drupal 8.5.0-alpha1 will be released the week of January 17, 2018, which means new developments and disruptive changes should now 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.6.x-dev » 8.7.x-dev

Drupal 8.6.0-alpha1 will be released the week of July 16, 2018, which means new developments and disruptive changes should now 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.7.x-dev » 8.8.x-dev

Drupal 8.7.0-alpha1 will be released the week of March 11, 2019, which means new developments and disruptive changes should now be targeted against the 8.8.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.8.x-dev » 8.9.x-dev

Drupal 8.8.0-alpha1 will be released the week of October 14th, 2019, which means new developments and disruptive changes should now be targeted against the 8.9.x-dev branch. (Any changes to 8.9.x will also be committed to 9.0.x in preparation for Drupal 9’s release, but some changes like significant feature additions will be deferred to 9.1.x.). 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.9.x-dev » 9.1.x-dev

Drupal 8.9.0-beta1 was released on March 20, 2020. 8.9.x is the final, long-term support (LTS) minor release of Drupal 8, which means new developments and disruptive changes should now 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.

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

Drupal 9.1.0-alpha1 will be released the week of October 19, 2020, which means new developments and disruptive changes should now be targeted for the 9.2.x-dev branch. For more information see the Drupal 9 minor version schedule and the Allowed changes during the Drupal 9 release cycle.

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.

smustgrave’s picture

Status: Active » Postponed (maintainer needs more info)
Issue tags: +stale-issue-cleanup

Thank you for creating this issue to improve Drupal.

We are working to decide if this task is still relevant to a currently supported version of Drupal. There hasn't been any discussion here for over 8 years which suggests that this has either been implemented or is no longer relevant. Your thoughts on this will allow a decision to be made.

Since we need more information to move forward with this issue, the status is now Postponed (maintainer needs more info). If we don't receive additional information to help with the issue, it may be closed after three months.

Thanks!

Version: 11.x-dev » main

Drupal core is now using the main branch as the primary development branch. New developments and disruptive changes should now be targeted to the main branch.

Read more in the announcement.

berliner made their first commit to this issue’s fork.

berliner’s picture

Status: Postponed (maintainer needs more info) » Active

While working on #2190333: Make #group FAPI / render feature work on all form/render #types out of the box I found a case where repeated rendering still causes duplication in current core, without that MR applied. I added a test case exposing this with a textfield assigned to a datetime element using #group.

For the duplication to occur, it requires:

  • An element being used as a group target, with other elements assigned to it using #group.
  • Its rendering process rendering the element again to output its children, causing preRenderGroup() to add the members again.

If #2190333: Make #group FAPI / render feature work on all form/render #types out of the box gets merged, this would therefore also affect datelist and managed_file when used as group targets. I reproduced this locally by explicitly enabling their grouping callbacks.

berliner’s picture

berliner’s picture

Status: Active » Needs review

Added the smallest fix I could think of for the duplicated rendering of group members. Changing to "Needs review" to hopefully get some feedback on the direction.

smustgrave’s picture

Tagging for summary update when a solution is determined.

Thanks.