Drupal is a registered trademark of Dries Buytaert
Protected Pages 3.0.0 Major update available for module protected_pages (3.0.0). Commerce Core 3.3.8 Minor update available for module commerce (3.3.8). Search API HTML Element Filter 1.0.7 Minor update available for module search_api_html_element_filter (1.0.7). Layout Builder Reorder 2.0.1 Minor update available for module layout_builder_reorder (2.0.1). Ban 1.1.0 Minor update available for module ban (1.1.0). Field Formatter Range 2.0.0 Major update available for module field_formatter_range (2.0.0). Field Formatter Range 8.x-1.8 Minor update available for module field_formatter_range (8.x-1.8). UI Patterns (SDC in Drupal UI) 2.0.18 Minor update available for module ui_patterns (2.0.18). Search API Solr 4.3.11 Module search_api_solr updated after 14 months of inactivity (4.3.11). Provus Mega Menu Module provus_mega_menu crossed 1,000 active installs.

This module automatically generates "Layouts" for Drupal's Layout Builder by discovering and mapping objects. It allows you to define layout regions using attributes, enabling you to create reusable layout configurations with minimal code.

Automates creation of Layouts, for Layout Builder, etc, discovered and mapped automatically.

Pinto Layout Documentation

Minimal object

Here, we'll set up an object to be a Layout in as little code as possible.

If your object doesn't conform exactly to this format, there are various other way to transform objects into layouts, whether you own the object code or not.

Setup and configure Pinto objects as usual.

use Drupal\pinto\Object\DrupalObjectTrait;
use Drupal\pinto_layout\Attribute\Region;
use Drupal\pinto_layout\PintoLayout\Data\RegionAttributes;
use Pinto\Slots\Build;

final class Obj {
  use DrupalInvokableSlotsTrait;

  public function __construct(
    #[Region]
    public readonly mixed $region1,
    #[Region]
    public readonly mixed $region2,
    public RegionAttributes $regionAttributes,
  ) {
  }
}

Associated Twig template:

<div {{ regionAttributes.containerAttributes() }}>
  <div {{ regionAttributes.regionAttributes('region1') }}>
    {{ region1 }}
  </div>
  <div {{ regionAttributes.regionAttributes('region2') }}>
    {{ region2 }}
  </div>
</div>

Note, this setup requires the following to be added to site settings.php:

$settings['twig_sandbox_allowed_classes'] = [
  \Drupal\Core\Template\Attribute::class,
  \Drupal\pinto_layout\PintoLayout\Data\RegionAttributes::class,
];

Clear container, and this object will be made available as a Layout, for use with Layout Builder.

There are other examples on how to customize these Layout objects in the example test code directory, including:

  • Customizing Layout ID
  • Customizing Layout Label
  • Pinto objects implementing an interface, as an alternative to #[Region] attribute, so you can make constructors private or custom.
  • If you do not have control over Pinto object code, you can nominate a object as a layout, by providing regions and a factory method to wire things together.

Activity

Total releases
8
First release
Oct 2025
Latest release
5 months ago
Releases (12 mo)
8 ▲ from 0
Maintenance
Active

Release Timeline

Releases

Version Type Release date
1.2.2 Stable Jan 30, 2026
1.1.1 Stable Nov 27, 2025
1.2.1 Stable Nov 27, 2025
1.2.0 Stable Nov 26, 2025
1.1.0 Stable Nov 26, 2025
1.0.0-beta3 Pre-release Oct 29, 2025
1.0.0-beta2 Pre-release Oct 8, 2025
1.0.0-beta1 Pre-release Oct 7, 2025