PHPackages                             itplusx/flexible-pages - 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. [Utility &amp; Helpers](/categories/utility)
4. /
5. itplusx/flexible-pages

ActiveTypo3-cms-extension[Utility &amp; Helpers](/categories/utility)

itplusx/flexible-pages
======================

Supports the setup and management of custom page types.

v3.0.0(2y ago)03.7k↓56%[4 issues](https://github.com/itplusx/flexible_pages/issues)1MITPHPPHP ^8.1

Since Aug 3Pushed 2mo ago2 watchersCompare

[ Source](https://github.com/itplusx/flexible_pages)[ Packagist](https://packagist.org/packages/itplusx/flexible-pages)[ Docs](https://itplusx.de)[ RSS](/packages/itplusx-flexible-pages/feed)WikiDiscussions main Synced yesterday

READMEChangelog (9)Dependencies (7)Versions (14)Used By (1)

 [ ![TYPO3 EXT:flexible_pages](https://raw.githubusercontent.com/itplusx/flexible_pages/master/Resources/Public/Icons/Logo.png) ](https://github.com/itplusx/flexible_pages)

TYPO3 Extension `flexible_pages`
================================

[](#typo3-extension-flexible_pages)

[![License: MIT](https://camo.githubusercontent.com/fdf2982b9f5d7489dcf44570e714e3a15fce6253e0cc6b5aa61a075aac2ff71b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d79656c6c6f772e737667)](https://opensource.org/licenses/MIT)

**Setup custom page types in TYPO3 with ease.**

This extensions reduces the [registration of custom page types in TYPO3](https://docs.typo3.org/m/typo3/reference-coreapi/12.4/en-us/ApiOverview/PageTypes/CreateNewPageType.html) to a simple setup using *YAML* files.

- Features
- Roadmap
- Installation
- Registering custom pages types
- Generic frontend list plugin (*tx\_flexiblepages\_pagelist*)

Features
--------

[](#features)

✓ Register custom pages types within seconds

✓ Use custom or already registered icons

✓ Plugin to render menus / lists of pages by page types

Roadmap
-------

[](#roadmap)

- Create an generic icon with the staring letter of the label, if no icons have been registered
- Backend module to configure custom pages types. It's basically a configuration front end for the YAML file
- Enable setting custom position in pages select box
- Enable sorting by date
- Cli command to create page types
- BE Module
    - List
        - List pages with page type filter
        - Bulk edit
    - Configuration
        - Configure page type in BE
- Provide a nice way to extend custom page types with additional fields

1. Installation
---------------

[](#1-installation)

### 1.1 Installation with [`composer`](https://getcomposer.org/)

[](#11-installation-with-composer)

`composer require itplusx/flexible-pages`

### 1.2 Installation with the [TYPO3 Extension Manager](https://docs.typo3.org/typo3cms/GettingStartedTutorial/ExtensionManager/Index.html#installing-a-new-extension)

[](#12-installation-with-the-typo3-extension-manager)

Use the Extension Key `flexible_pages` in the [TYPO3 Extension Manager](https://docs.typo3.org/m/typo3/reference-coreapi/12.4/en-us/ExtensionArchitecture/HowTo/ExtensionManagement.html#installing-extensions).

2. Registering custom pages types
---------------------------------

[](#2-registering-custom-pages-types)

There are two ways to register custom pages types.

1. [Using *YAML* configuration files (recommended)](#21-using-yaml-configuration-files-recommended)
2. [Using ext\_localconf.php](#22-using-ext_localconfphp)

### 2.1 Using *YAML* configuration files (recommended)

[](#21-using-yaml-configuration-files-recommended)

The easiest way to add new page types is via YAML. Three different possibilities exist to add new pageTypes with YAML files:

1. [Using the global config directory path (like with the site configuration of the TYPO3 core)](#211-using-the-global-config-directory)
2. [Using the extension Configuration directory path of your custom extension](#212-using-the-extension-configuration-directory)
3. [Adding a custom path](#213-adding-a-custom-path)

#### 2.1.1 Using the global config directory

[](#211-using-the-global-config-directory)

As with the site configuration of the TYPO3 core it is also possible to add YAML files inside the global config directory.

Example:

```
config/
└── flexible_pages/
    └── myNewPageType.yaml
    └── myOtherPageType.yaml
    └── Articles
        └── blogArticle.yaml
        └── newsArticle.yaml

```

#### 2.1.2 Using the extension Configuration directory

[](#212-using-the-extension-configuration-directory)

It is also possible for every third-party extension to use `flexible_pages` as base for adding custom pageTypes. To enable this just add a YAML configuration file to your own extension inside `Configuration/Yaml/flexible_pages`.

Example:

```
your_extensionkey/
└── Configuration/
    └── Yaml
        └── flexible_pages/
            └── myNewPageType.yaml
            └── myOtherPageType.yaml
            └── Articles
                └── blogArticle.yaml
                └── newsArticle.yaml

```

#### 2.1.3 Adding a custom path

[](#213-adding-a-custom-path)

Beside the first two pre-defined directory paths it is also possible to define a third custom path where your custom YAML files are stored. For this you could simply add the custom path to the extension configuration in `Admin Tools -> Settings -> Extension Configuration -> flexible_pages` or set `$GLOBALS['TYPO3_CONF_VARS']['EXTENSIONS']['flexible_pages']['additionalYamlConfigPath']` in your `ext_localconf.php`.

#### 2.1.4 YAML File Example

[](#214-yaml-file-example)

```
dokType: 87
label: 'My Custom pageType'
iconSet:
  defaultIcon:
    source: 'EXT:your_ext/Resources/Public/Icons/apps-pagetree-mycustompagetype.svg'
  hideInMenuIcon:
    identifier: 'apps-pagetree-page-frontend-user-hideinmenu'
  rootPageIcon:
    source: 'EXT:your_ext/Resources/Public/Icons/apps-pagetree-mycustompagetype-root.svg'
isDraggableInNewPageDragArea: true

```

### 2.2 Using ext\_localconf.php

[](#22-using-ext_localconfphp)

```
\ITplusX\FlexiblePages\Registry\PageTypesRegistration::registerPageType(
  87
  'My Custom pageType',
  [
    \ITplusX\FlexiblePages\Configuration\IconSetConfiguration::ICON_TYPE_DEFAULT => [
        'source' => 'EXT:your_ext/Resources/Public/Icons/apps-pagetree-mycustompagetype.svg',
    ],
    \ITplusX\FlexiblePages\Configuration\IconSetConfiguration::ICON_TYPE_HIDE_IN_MENU => [
        'identifier' => 'apps-pagetree-page-frontend-user-hideinmenu',
    ]
    \ITplusX\FlexiblePages\Configuration\IconSetConfiguration::ICON_TYPE_ROOT_PAGE => [
        'source' => 'EXT:your_ext/Resources/Public/Icons/apps-pagetree-mycustompagetype-root.svg',
    ]
  ],
  'isDraggableInNewPageDragArea' => true
);
```

### 2.3 Configuration

[](#23-configuration)

#### 2.3.1 Registration parameters

[](#231-registration-parameters)

ParameterTypeMandatoryDescriptiondokTypeint✓The dokType to register the new pageType withlabelstring✓The label of the new pageTypeiconSetarray✓The iconSet array of the newPageType. (see: [iconSet configuration parameters](#232-icons-parameters))isDraggableInNewPageDragAreaboolDefines if the new pageType is draggable from above the page tree. (Default: false)#### 2.3.2 Icons parameters

[](#232-icons-parameters)

ParameterTypeMandatoryDescriptionPossible valuesdefaultIconarray✓The default icon of the page.- `'source' => '/path/to/file.png'`(EXT: is allowed)
 - `'identifier' => 'already-registered-identifier'`hideInMenuIconarrayThe icon of the page when "hideInMenu" is checked.- `'source' => '/path/to/file.png'`(EXT: is allowed)
 - `'identifier' => 'already-registered-identifier'`rootPageIconarrayThe icon of the page when the page is selected as root page.- `'source' => '/path/to/file.png'`(EXT: is allowed)
 - `'identifier' => 'already-registered-identifier'`3. Generic frontend list plugin (*tx\_flexiblepages\_pagelist*)
---------------------------------------------------------------

[](#3-generic-frontend-list-plugin-tx_flexiblepages_pagelist)

*flexible\_pages* provides a generic list plugin to list pages by specific pageTypes. Some settings of this plugin can be configured by the user to make it as flexible as possible:

### 3.1 Extending templates

[](#31-extending-templates)

Extending the template select field makes it possible to add your own custom Templates. Custom templates can be added either by PageTS or the EXTCONF array.

#### 3.1.1 Extending via PageTS

[](#311-extending-via-pagets)

##### as associative array:

[](#as-associative-array)

```
tx_flexiblepages {
  tx_flexiblepages_pagelist {
    templates {
      myTemplate = My new template
      myTemplate2 = My new template 2
    }
  }
}

```

##### as numeric array:

[](#as-numeric-array)

```
tx_flexiblepages {
  tx_flexiblepages_pagelist {
    templates {
      0 = My new template
      1 = My new template 2
    }
  }
}

```

#### 3.1.2 Extending via EXTCONF

[](#312-extending-via-extconf)

##### as associative array:

[](#as-associative-array-1)

```
$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['flexible_pages']['tx_flexiblepages_pagelist']['templates'] = [
    'myTemplate' => 'My new template',
    'myTemplate2' => 'My new template 2',
];
```

##### as numeric array:

[](#as-numeric-array-1)

```
$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['flexible_pages']['tx_flexiblepages_pagelist']['templates'] = [
    'My new template', 'My new template 2'
];
```

#### 3.1.3 Adding custom template file

[](#313-adding-custom-template-file)

After extending the template configuration you want to add your custom template file. To do that you have to extend the fluid\_styled\_content rootPaths. You can either do this in your own extension by extending the `lib.contentElement` TypoScript (as described [HERE](https://docs.typo3.org/c/typo3/cms-fluid-styled-content/master/en-us/AddingYourOwnContentElements/Index.html#setup-txt)) or you could use the constants provided by flexible\_pages:

- `plugin.tx_flexiblepages.templateRootPath`
- `plugin.tx_flexiblepages.partialRootPath`
- `plugin.tx_flexiblepages.layoutRootPath`

Finally you can add your custom template file in the previously specified `templateRootPath`.

##### File naming:

[](#file-naming)

- When you chose to extend the templates with a associative array, your template file has to be named like the key (as upper camelcase; e.g `MyTemplate.html`).
- When you chose to extend the templates with a numeric array, your template file has to be named like the value (as upper camelcase; e.g `MyNewTemplate.html`).

### 3.2 Extending orderBy

[](#32-extending-orderby)

The `orderBy` selection can be extended as well to add custom order fields. For example if you added a new field `type` to your custom pageType you could also order by this field if necessary.

For every added custom `orderBy` item an ascending and descending variant is created. Custom order fields can be added either by PageTS or the EXTCONF array.

**NOTE: The key of the `orderBy` item must be the name of the field in the database! Numeric arrays are not allowed here.**

#### 3.2.1 Extending via PageTS

[](#321-extending-via-pagets)

```
tx_flexiblepages {
  tx_flexiblepages_pagelist {
    orderBy {
      type = Type
    }
  }
}

```

#### 3.2.2 Extending via EXTCONF

[](#322-extending-via-extconf)

```
$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['flexible_pages']['tx_flexiblepages_pagelist']['orderBy'] = [
    'type' => 'Type'
];
```

4. Working Example
------------------

[](#4-working-example)

For a working example please have a look at [EXT:flexible\_news](https://github.com/itplusx/flexible_news). There you can see how simple it is to:

- Setup a new pageType with special icons and name
- Extend the template select of the *tx\_flexiblepages\_pagelist* CE

---

 [ ![ITplusX - Internetagentur & Systemhaus](https://camo.githubusercontent.com/14e12de38879bb59be4344f31f58fc5bc6e048280cb75884751c46491af79afa/68747470733a2f2f6974706c7573782e64652f62616e6e6572732f637265617465642d62792d582d776974682d70617373696f6e2e737667) ](https://itplusx.de)

---

###  Health Score

44

—

FairBetter than 90% of packages

Maintenance56

Moderate activity, may be stable

Popularity21

Limited adoption so far

Community15

Small or concentrated contributor base

Maturity71

Established project with proven stability

 Bus Factor1

Top contributor holds 74.4% 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 ~156 days

Recently: every ~308 days

Total

9

Last Release

911d ago

Major Versions

v1.0.0 → v2.0.02020-08-03

v2.2.1 → v3.0.02024-01-04

PHP version history (3 changes)v1.0.0PHP ^7.2

v2.2.1PHP ^7.2 || ^8.0

v3.0.0PHP ^8.1

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/13196174?v=4)[Ramón](/maintainers/schloram)[@schloram](https://github.com/schloram)

![](https://www.gravatar.com/avatar/2969ab0a2fbae7ce85cc02be57237e3c99ba41c1e748c23aa710bab18f6a3417?d=identicon)[vjanoch](/maintainers/vjanoch)

---

Top Contributors

[![schloram](https://avatars.githubusercontent.com/u/13196174?v=4)](https://github.com/schloram "schloram (58 commits)")[![vacijj](https://avatars.githubusercontent.com/u/2101914?v=4)](https://github.com/vacijj "vacijj (15 commits)")[![Copilot](https://avatars.githubusercontent.com/in/1143301?v=4)](https://github.com/Copilot "Copilot (5 commits)")

---

Tags

flexible-pagestypo3typo3-cmstypo3-cms-extensiontypo3-extensiontypo3-pagesextensionpagesTYPO3 CMStypo3page based content

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/itplusx-flexible-pages/health.svg)

```
[![Health](https://phpackages.com/badges/itplusx-flexible-pages/health.svg)](https://phpackages.com/packages/itplusx-flexible-pages)
```

###  Alternatives

[friendsoftypo3/content-blocks

TYPO3 CMS Content Blocks - Content Types API | Define reusable components via YAML

103519.9k53](/packages/friendsoftypo3-content-blocks)[typo3/cms-styleguide

TYPO3 extension to showcase TYPO3 Backend capabilities

106760.3k33](/packages/typo3-cms-styleguide)[typo3/cms-install

TYPO3 CMS Install Tool - The Install Tool is used for installation, upgrade, system administration and setup tasks.

1812.3M495](/packages/typo3-cms-install)[t3sbs/t3sbootstrap

Startup extension to use bootstrap 5 classes, components and more out of the box. Example and info: \[www.t3sbootstrap.de\](https://www.t3sbootstrap.de)

2416.4k](/packages/t3sbs-t3sbootstrap)[t3brightside/pagelist

TYPO3 CMS extension to create news, events, vacancies and products or just page lists. Demo: microtemplate.t3brightside.com

1121.5k1](/packages/t3brightside-pagelist)[friendsoftypo3/visual-editor

TYPO3 CMS Visual Editor - Brings a modern WYSIWYG editing experience to TYPO3 CMS.

576.1k2](/packages/friendsoftypo3-visual-editor)

PHPackages © 2026

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