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

ActiveContao-bundle[Utility &amp; Helpers](/categories/utility)

heimrichhannot/contao-categories-bundle
=======================================

This bundle allows to assign nestable categories to arbitrary entities in Contao-driven systems.

1.4.6(3y ago)56.8k↑92.9%1[2 issues](https://github.com/heimrichhannot/contao-categories-bundle/issues)[1 PRs](https://github.com/heimrichhannot/contao-categories-bundle/pulls)4LGPL-3.0-or-laterPHPPHP ^7.4||^8.0

Since Dec 6Pushed 1mo ago5 watchersCompare

[ Source](https://github.com/heimrichhannot/contao-categories-bundle)[ Packagist](https://packagist.org/packages/heimrichhannot/contao-categories-bundle)[ RSS](/packages/heimrichhannot-contao-categories-bundle/feed)WikiDiscussions master Synced yesterday

READMEChangelog (9)Dependencies (5)Versions (58)Used By (4)

Contao Categories Bundle
========================

[](#contao-categories-bundle)

[![](https://camo.githubusercontent.com/136df7eaa1e7d2aa731256be7d014849f82486ad6ae2ee0ebe7cc60362854f3f/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6865696d7269636868616e6e6f742f636f6e74616f2d63617465676f726965732d62756e646c652e737667)](https://packagist.org/packages/heimrichhannot/contao-categories-bundle)[![](https://camo.githubusercontent.com/2a1f6c93aa27bfe581492982e1042d0e7f8d7acaaac39f1a9cb81a6eda875aa7/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6865696d7269636868616e6e6f742f636f6e74616f2d63617465676f726965732d62756e646c652e737667)](https://packagist.org/packages/heimrichhannot/contao-categories-bundle)

This bundle allows to assign nestable categories to arbitrary entities in Contao-driven systems.

Features
--------

[](#features)

- the module is done in a generic way, i.e. you can assign category/categories field(s) to arbitrary DCAs
- conveniently add single category fields (radio button) or multiple categories fields (checkbox) via a simple function call
- specify overridable properties in categories and compute the correct result depending on the given context easily
- multilanguage support via [heimrichhannot/contao-categories-multilingual-bundle](https://github.com/heimrichhannot/contao-categories-multilingual-bundle)
- categories filter type for [Contao Filter Bundle](https://github.com/heimrichhannot/contao-filter-bundle)

Impressions
-----------

[](#impressions)

### Category management

[](#category-management)

[![alt preview](docs/categories.png)](docs/categories.png)

Main category management view. By clicking the cog icon you can navigate to the *category configs*.

### Widget integration in your DCA

[](#widget-integration-in-your-dca)

[![alt preview](docs/fields.png)](docs/fields.png)

Add category fields to your DCA easily. The category marked as *primary category* is colored in green.

### Picker widgets

[](#picker-widgets)

[![alt preview](docs/radio-picker.png)](docs/radio-picker.png)

Single category picker with radio buttons (selecting parent categories is allowed -&gt; can be disallowed if necessary; no primary category marker necessary)

[![alt preview](docs/checkbox-picker.png)](docs/checkbox-picker.png)

Single category picker with checkboxes (selecting parent categories is disallowed; the yellow asterisk marks the primary category -&gt; this attribute is stored to an automatically created field named `_primary`)

Usage
-----

[](#usage)

### Install

[](#install)

1. Install bundle with composer or contao manager

    ```
    composer require heimrichhannot/contao-categories-bundle

    ```
2. Update database
3. Add category support to the datacontainer you want, [e.g. news](docs/guide_news.md)

### Filter bundle integration

[](#filter-bundle-integration)

This bundle comes with two filter types:

- CategoryChoiceType let you select categories to filter a list.
- ParentCategoryChoiceType is an inital filter to filter your list based on a parent category (means all elements are in a child category of the selected parent).

Entity structure
----------------

[](#entity-structure)

[![alt entities](docs/entities.png)](docs/entities.png)

TableDescriptiontl\_categoryContains the *category* instancestl\_category\_associationAssociation table between tl\_category and your DCA's tabletl\_category\_contextDefines context keys (simple strings) usable in *category configs*tl\_category\_configContains *category configs*. Here you can override properties defined per default in a category linked with a certain *category context*tl\_category\_property\_cacheContains the resolved overridable property valuesDocumentation
-------------

[](#documentation)

[Concepts](docs/concepts.md)

[Technical instructions](docs/technical_intructions.md)

[Guide: News categories field](docs/guide_news.md)

###  Health Score

49

—

FairBetter than 94% of packages

Maintenance53

Moderate activity, may be stable

Popularity27

Limited adoption so far

Community20

Small or concentrated contributor base

Maturity82

Battle-tested with a long release history

 Bus Factor1

Top contributor holds 85.3% 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 ~39 days

Recently: every ~60 days

Total

53

Last Release

1095d ago

PHP version history (4 changes)1.0.0-betaPHP &gt;=7.0.0

1.0.0-beta24PHP ^7.0

1.2.0PHP ^7.0||^8.0

1.4.0PHP ^7.4||^8.0

### Community

Maintainers

![](https://www.gravatar.com/avatar/28ad3224d8727b622ebd229840eea6b9dbcb83eb0bd609e6ce65b614830ff538?d=identicon)[digitales@heimrich-hannot.de](/maintainers/digitales@heimrich-hannot.de)

---

Top Contributors

[![koertho](https://avatars.githubusercontent.com/u/12064642?v=4)](https://github.com/koertho "koertho (29 commits)")[![Defcon0](https://avatars.githubusercontent.com/u/1485098?v=4)](https://github.com/Defcon0 "Defcon0 (3 commits)")[![salteax](https://avatars.githubusercontent.com/u/46114448?v=4)](https://github.com/salteax "salteax (1 commits)")[![vvohh](https://avatars.githubusercontent.com/u/75325799?v=4)](https://github.com/vvohh "vvohh (1 commits)")

### Embed Badge

![Health badge](/badges/heimrichhannot-contao-categories-bundle/health.svg)

```
[![Health](https://phpackages.com/badges/heimrichhannot-contao-categories-bundle/health.svg)](https://phpackages.com/packages/heimrichhannot-contao-categories-bundle)
```

###  Alternatives

[heimrichhannot/contao-encore-bundle

This bundle brings deep integration for symfony encore into contao. On the one hand, your can prepare your bundles to define own webpack entries, which added with just one command to your webpack entries. On the other hand, this bundle allows you to add encore entries only on the pages you need them for optimizing your website performance.

1016.6k](/packages/heimrichhannot-contao-encore-bundle)[metamodels/core

MetaModels core

10156.4k68](/packages/metamodels-core)[codefog/contao-news_categories

News Categories bundle for Contao Open Source CMS

3189.0k6](/packages/codefog-contao-news-categories)[terminal42/contao-node

Node bundle for Contao Open Source CMS

3177.0k6](/packages/terminal42-contao-node)[markocupic/calendar-event-booking-bundle

Contao Calendar Event Booking Bundle

135.2k1](/packages/markocupic-calendar-event-booking-bundle)

PHPackages © 2026

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