PHPackages                             alengo/sulu-content-extra-bundle - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. alengo/sulu-content-extra-bundle

ActiveSymfony-bundle

alengo/sulu-content-extra-bundle
================================

Additional Data tab for Sulu CMS Pages and Articles — generic JSON field with configurable key mapping

1.1.3(yesterday)016↑2337.5%MITPHPPHP ^8.2

Since Apr 6Pushed yesterdayCompare

[ Source](https://github.com/alengodev/SuluContentExtraBundle)[ Packagist](https://packagist.org/packages/alengo/sulu-content-extra-bundle)[ Docs](https://github.com/alengodev/SuluContentExtraBundle)[ RSS](/packages/alengo-sulu-content-extra-bundle/feed)WikiDiscussions main Synced today

READMEChangelog (5)Dependencies (2)Versions (6)Used By (0)

SuluContentExtraBundle
======================

[](#sulucontentextrabundle)

Extends [Sulu CMS](https://sulu.io/) 3.x Pages and Articles with configurable additional data, navigation link markers, and Doctrine ORM 3.x compatibility fixes for mapped-superclass entities.

Features
--------

[](#features)

- **Additional Data tab** — auto-registered for Pages and Articles via `PreviewFormViewBuilder`
- **Built-in entities** — concrete `Page`, `PageDimensionContent`, `Article`, `ArticleDimensionContent` extending Sulu's base classes; no project entities required
- **Configurable field mapping** — declare which form fields go to the unlocalized vs. localized dimension content via bundle config
- **Zero-config entity registration** — `sulu_page` / `sulu_article` objects are auto-configured via `PrependExtensionInterface`
- **Navigation link markers** — `NavigationLinkEnhancer` adds `sourceLink`/`sourceUuid` markers to link-type pages; `NavigationLinkTypeResolver` exposes them to templates
- **Doctrine compatibility** — `SuluPageAwareTreeListener`, `SafeTreeObjectHydrator`, `InheritedAssociationDeclaredFixerSubscriber` included; no separate bundle needed

Requirements
------------

[](#requirements)

- PHP 8.2+
- Sulu CMS ~3.0
- Symfony 7.x

Installation
------------

[](#installation)

```
composer require alengo/sulu-content-extra-bundle
```

Register the bundle in `config/bundles.php`:

```
Alengo\SuluContentExtraBundle\AlengoContentExtraBundle::class => ['all' => true],
```

That's it — no further configuration required for a standard setup.

Configuration
-------------

[](#configuration)

Create `config/packages/alengo_content_extra.yaml` to declare which form fields are stored in the unlocalized vs. localized dimension content:

```
alengo_content_extra:
    page:
        form_key: page_additional_data        # default
        unlocalized_keys:
            - template_theme
            - template_logo_light
        localized_keys:
            - notes
    article:
        form_key: article_additional_data     # default
        unlocalized_keys:
            - template_theme
        localized_keys:
            - notes
```

To use additional data only for Articles (not Pages):

```
alengo_content_extra:
    page:
        enabled: false
```

To disable the Article tab entirely:

```
alengo_content_extra:
    article:
        enabled: false
```

### Full configuration reference

[](#full-configuration-reference)

```
alengo_content_extra:
    page:
        enabled: true
        page_class: Alengo\SuluContentExtraBundle\Entity\Page           # override with custom entity
        entity_class: Alengo\SuluContentExtraBundle\Entity\PageDimensionContent
        form_key: page_additional_data
        tab_title: sulu_admin.app.additional_data
        unlocalized_keys: []
        localized_keys: []
    article:
        enabled: true
        article_class: Alengo\SuluContentExtraBundle\Entity\Article
        entity_class: Alengo\SuluContentExtraBundle\Entity\ArticleDimensionContent
        form_key: article_additional_data
        tab_title: sulu_admin.app.additional_data
        unlocalized_keys: []
        localized_keys: []
```

Provided Forms
--------------

[](#provided-forms)

The bundle does **not** ship default form XML files — the project controls field definitions. Create your own in `config/forms/`:

```
config/forms/page_additional_data.xml
config/forms/article_additional_data.xml

```

Example form:

```

    page_additional_data

                Theme
                Theme

```

Provided Models
---------------

[](#provided-models)

ClassPurpose`Entity\Page`Concrete Doctrine entity (`pa_pages`) extending Sulu's `Page``Entity\PageDimensionContent`Dimension content with `additionalData` JSON column (`pa_page_dimension_contents`)`Entity\Article`Concrete Doctrine entity (`ar_articles`) extending Sulu's `Article``Entity\ArticleDimensionContent`Dimension content with `additionalData` JSON column (`ar_article_dimension_contents`)`Model\AdditionalDataInterface`Interface implemented by both dimension content entitiesNavigation Link Markers
-----------------------

[](#navigation-link-markers)

`NavigationLinkEnhancer` decorates Sulu's `sulu_page.page_link_dimension_content_enhancer`. When a page is of link type, it adds two markers to the template data:

FieldTypeDescription`sourceLink``bool``true` when the page redirects to another page or URL`sourceUuid``string`UUID of the original link-type page`NavigationLinkTypeResolver` exposes these fields to templates via the `navlink` content section — bypassing Sulu's `TemplateResolver` which would otherwise drop unknown keys.

Both services are registered automatically.

Doctrine Compatibility
----------------------

[](#doctrine-compatibility)

The bundle ships fixes for Doctrine ORM 3.x + Gedmo tree extension when extending Sulu's mapped-superclass entities:

ClassPurpose`Doctrine\Tree\SuluPageAwareTreeListener`Fixes Gedmo's `TreeListener` for Sulu's mapped-superclass `Page``Doctrine\Hydrator\SafeTreeObjectHydrator`Fixes `TreeObjectHydrator::getChildrenField()` for Doctrine ORM 3.x`Doctrine\EventSubscriber\InheritedAssociationDeclaredFixerSubscriber`Fixes null `declared` on inherited association mappingsThese are registered automatically — no separate bundle or configuration needed.

### `auto_generate_proxy_classes: false` in production

[](#auto_generate_proxy_classes-false-in-production)

The bundle registers Doctrine's `resolve_target_entities` for all enabled entity overrides. This replaces Sulu's original class references in association mappings at container build time, so Doctrine never needs to generate proxies for the original Sulu classes at runtime.

This allows setting `auto_generate_proxy_classes: false` in production (recommended):

```
# config/packages/prod/doctrine.yaml
when@prod:
    doctrine:
        orm:
            auto_generate_proxy_classes: false
            proxy_dir: '%kernel.build_dir%/doctrine/orm/Proxies'
```

Proxies are generated during `cache:warmup` as part of the normal deploy process.

###  Health Score

43

—

FairBetter than 90% of packages

Maintenance100

Actively maintained with recent releases

Popularity8

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity49

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

5

Last Release

1d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/4a3bea97975bdeddcfa5b76c222740e703e4ff5f9bbf5f6d5d75e8827e0a48ac?d=identicon)[alengodev](/maintainers/alengodev)

---

Top Contributors

[![hual7](https://avatars.githubusercontent.com/u/89628357?v=4)](https://github.com/hual7 "hual7 (16 commits)")

### Embed Badge

![Health badge](/badges/alengo-sulu-content-extra-bundle/health.svg)

```
[![Health](https://phpackages.com/badges/alengo-sulu-content-extra-bundle/health.svg)](https://phpackages.com/packages/alengo-sulu-content-extra-bundle)
```

###  Alternatives

[sulu/skeleton

Project template for starting your new project based on the Sulu content management system

29733.3k](/packages/sulu-skeleton)[sulu/article-bundle

Bundle for managing localized content-rich entities like blog-posts in the Sulu content management system

66409.6k2](/packages/sulu-article-bundle)[sulu/headless-bundle

Bundle that provides controllers and services for using Sulu as headless content management system

55133.7k2](/packages/sulu-headless-bundle)[sulu/form-bundle

Bundle for creating forms in Sulu.

87287.3k7](/packages/sulu-form-bundle)[sulu/content-bundle

Experimental content implementation for sulu.

17112.3k1](/packages/sulu-content-bundle)[sulu/theme-bundle

The Sulu Bundle which provides theming functionality.

23300.4k1](/packages/sulu-theme-bundle)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
