Een hart voor de Drupal Community

Bij make it fly geloven we sterk in Drupal en Open Source software in het algemeen. We maken dagelijks gebruik van vele open source componenten en de vele Drupal modules die beschikbaar zijn. We dragen actief ons steentje bij aan de community door zelf patches, modules en documentatie te voorzien, daarnaast zijn enkele teamleden ook actief in de Drupal User Group vzw.

Een overzicht van onze bijdragen aan de Drupal community vind je terug op onze Drupal.org pagina. Naast het actief meerwerken aan de Drupal community, zetten we ook andere ontwikkelaars op weg door vragen te beantwoorden op Drupal Answers.

  1. Flushing image, when webp module is used, doesnt work correctly

    Brecht Ceyssens

    The combination of these 2 tickets causes issues:

    • https://www.drupal.org/project/flush_single_image/issues/3187232
    • https://www.drupal.org/project/flush_single_image/issues/3102639

    When the webp image exists, it will only delete that one causing images but the be updated correcly. If you choose regeneration, the derivative is forced saved as the webp variation.

  2. Core 11.2^ support - Refactor widgets

    Sven Decabooter

    I tested this logic, both updating fields created in the 3.x version, and adding new fields. I have found no real issues with it. Seems like a good improvement to me.

  3. Add a cleanup function

    Sven Decabooter

    OK those seem like 2 valid points to stick with the current approach. If the current logic would pose unexpected problems, we can still change the implementation later on.

  4. Add a cleanup function

    Sven Decabooter

    Thanks for the MR. Logic looks good to me. Only thing I'm wondering: couldn't we use a QueueWorker plugin to process the deletion of the stale log entries? Then we wouldn't need the batch processing logic within the cron hook. The processing time could be configured in the QueueWorker plugin - e.g. \Drupal\locale\Plugin\QueueWorker\LocaleTranslation has this set to 30 seconds.

  5. Allow collapsing / expanding of multivalue items

    Sven Decabooter

    Yeah I have set it up with "Details" wrapper currently. Would be good to allow for 1-click collapsing / expanding though, to easily switch between "editing" mode and "reordering" mode.

  6. Allow collapsing / expanding of multivalue items

    Sven Decabooter

    Problem/Motivation

    We use custom_field to create multivalue fields, containing a bunch of properties / subfields. While this allows site editors to add rather complex multivalue data, it is a challenge for them to reorder the items, once created.

    In some cases we are using modals for content editing, which makes it even more challenging.

    Example:

    A video of me trying to reorder the items for a custom_field field with a bunch of subfields, is available here: https://www.drupal.org/files/issues/2025-08-18/custom_field_reorder_issu...

    For example the Paragraphs module seems to provide a better UX for this, with Collapse (all) / Edit (all) buttons:

    By default the editing experience would be similar, with all fields exposed:

    Clicking "Collapse all" gives us the following:

    This allows for easy reordering, and subsequently editing a specific item.

  7. It's possible a referenced paragraph does not exist, resulting in a WSOD

    Randal

    Problem/Motivation

    It's possible a referenced paragraph does not exist, resulting in a WSOD with this error: Error: Call to a member function createDuplicate() on null in Drupal\layout_builder_at\Plugin\Field\FieldWidget\LayoutBuilderCopyWidget->cloneEntity() (line 344 of /.../web/modules/contrib/layout_builder_at/src/Plugin/Field/FieldWidget/LayoutBuilderCopyWidget.php).

    Steps to reproduce

    I'm not sure how this came to be, but one of our nodes had a block with a referenced paragraph that doesn't seem to exist.

    Proposed resolution

    Lines 338 to 344 of the LayoutBuilderCopyWidget contain this code:

              $values = $clone->get($definition->getName())->getValue();
              if (!empty($values)) {
                foreach ($values as $value) {
                  /** @var \Drupal\Core\Entity\EntityInterface $reference */
                  /** @var \Drupal\Core\Entity\EntityInterface $reference_clone */
                  $reference = \Drupal::service('entity_type.manager')->getStorage($target_type)->load($value['target_id']);
                  $reference_clone = $reference->createDuplicate();

    I would suggest replacing it with:

              /** @var \Drupal\Core\Entity\EntityInterface[] $references */
              $references = $clone->get($definition->getName())->referencedEntities();
              if (!empty($references)) {
                foreach ($references as $reference) {
                  $reference_clone = $reference->createDuplicate();

    This ensures only existing references can be cloned, and `createDuplicate` can't be called on a null-value.

    Remaining tasks

    I'll create a patch/MR

    User interface changes

    N/A

    API changes

    N/A

    Data model changes

    N/A

  8. Gotenberg

    Randal

    Module purpose

    This module provides a Drupal-sauce around the gotenberg/gotenberg-php package, with basic configuration and a wrapper class to be used within Drupal.

    It also adds an 'entity_print'-plugin that uses Gotenberg as the printing back-end.

    For more information regarding Gotenberg, please visit their website and documentation Website: https://gotenberg.dev Documentation: https://gotenberg.dev/docs/getting-started/introduction

  9. Drupal 11 compatibility

    Randal

    Alright, I've pushed some changes that should make it fully D11 compatible.

    The biggest one was the constructor for the ConfigurationForm, in D11 an extra argument was required. To keep backwards compatibility, I've removed the constructor entirely and set the custom properties in the static create() method.

    This has the added advantage that any future changes to the constructor will be fully handled by the parent create() method, and we can simply set our own custom properties without having to worry about that.

    Other than that, only a version requirement change was needed in composer & info.yml.

Sven Decabooter - Drupal Developer

"Onze teamleden bouwen zelf ook mee aan ons geliefde Drupal, en daar zijn we trots op"

Sven Decabooter
Drupal developer

Betrouwbare technologie, naadloze prestaties. Dat zijn onze Drupal-oplossingen.