PHPackages                             chrometoaster/silverstripe-advanced-taxonomies - 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. chrometoaster/silverstripe-advanced-taxonomies

ActiveSilverstripe-vendormodule[Utility &amp; Helpers](/categories/utility)

chrometoaster/silverstripe-advanced-taxonomies
==============================================

Advanced taxonomies

3.1.6(2y ago)21.9k4[1 issues](https://github.com/chrometoasters/silverstripe-advanced-taxonomies/issues)[1 PRs](https://github.com/chrometoasters/silverstripe-advanced-taxonomies/pulls)BSD-3-ClausePHPCI failing

Since Sep 20Pushed 3mo ago3 watchersCompare

[ Source](https://github.com/chrometoasters/silverstripe-advanced-taxonomies)[ Packagist](https://packagist.org/packages/chrometoaster/silverstripe-advanced-taxonomies)[ Docs](http://github.com/chrometoasters/silverstripe-advanced-taxonomies)[ RSS](/packages/chrometoaster-silverstripe-advanced-taxonomies/feed)WikiDiscussions main Synced yesterday

READMEChangelog (10)Dependencies (5)Versions (30)Used By (0)

Advanced Taxonomies for Silverstripe CMS
========================================

[](#advanced-taxonomies-for-silverstripe-cms)

Overview
--------

[](#overview)

Inspired by the [Silverstripe's Taxonomy module](https://github.com/silverstripe/silverstripe-taxonomy), Chrometoaster's Advanced taxonomies module also adds the capability to manage hierarchical taxonomies within Silverstripe.

It also provides generic CMS interfaces to assign taxonomy terms (tag) to pages and files, and provides means how to extend this functionality to any other data objects, such as e.g. Elemental blocks.

Beyond basic terms tagging, the module aims to help professional information architects and content designers who wish to use taxonomies to classify most - if not all - of the content across a site, using a suite of interrelated hierarchical taxonomies. Advanced logic makes the use of taxonomies a more robust option for content-wide relationships, especially where multiple taxonomies must be used in conjunction.

Please note that this module is intended to replace Silverstripe's taxonomy module, it's not an extension to it. This module discards taxonomy type as a standalone model, accommodating the *type* atrributes via top-level taxonomy terms, sometimes referenced as *types* throughout the code base for legibility and context.

Main features
-------------

[](#main-features)

Main features of the taxonomy term model and associated extensions, helpers, validators etc.

#### Singular and Plural display names

[](#singular-and-plural-display-names)

- Extra names to be used in different situations, both on front-end and in the back-end

#### Description

[](#description)

- A term description used throughout the CMS (e.g. within grid fields) to aid editors while tagging (useful when there are similar terms under different taxonomies).

#### Definition fields

[](#definition-fields)

- Author facing definition to be used within the CMS
- End-users facing definition, e.g. used in glossaries

#### Single-select option

[](#single-select-option)

- A taxonomy can be defined as 'single-select' or 'multi-select', depending on the nature of the terms/concepts — being synergistic or mutually exclusive.
- Validation rules apply when authors tag data objects with a single-select taxonomy term (i.e. only one term can be tagged at a time).

#### Internal only option

[](#internal-only-option)

- A taxonomy can be dedicated as internal only, i.e. it won't be visible to end-users, marking the taxonomy to be used for 'administrative purposes' only — creating lists of items in the CMS, filtering etc.

#### Required taxonomies

[](#required-taxonomies)

- Any term can be configured with one or more Required taxonomies.
- Required taxonomies will prompt authors to select a term from other taxonomies, too, when the current term is assigned to a data object.
- If required taxonomies are set on the root term, then all descendant terms will inherit the requirements. Inheritance can be manually overridden, and further requirements configured, on individual terms.

#### URLSegment

[](#urlsegment)

- A globally unique slug, currently globally unique (this constrain may be relaxed going forward to allow the same segments under different parents).

Usage
=====

[](#usage)

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

[](#requirements)

- SilverStripe 4.x
- PHP ^7.3 (PHP8 not tested)

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

[](#installation)

```
composer require chrometoaster/silverstripe-advanced-taxonomies

```

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

[](#configuration)

By default, the module applies the `DataObjectTaxonomiesDataExtension` extension to `SiteTree` and `File` classes in the [config.yml](_config/config.yml).

To add the extension to your project-specific data models, create a yaml config file similar to the example below:

```
App\Models\YourDataModel:
  extensions:
    - Chrometoaster\AdvancedTaxonomies\Extensions\DataObjectTaxonomiesDataExtension
App\Models\YourOtherCustomDataModel:
  extensions:
    - Chrometoaster\AdvancedTaxonomies\Extensions\DataObjectTaxonomiesDataExtension
```

There are some settings that can be modified in this module, depending on requirements. These are listed below.

Developer's notes
-----------------

[](#developers-notes)

#### HTML in validation messages

[](#html-in-validation-messages)

The `Chrometoaster\AdvancedTaxonomies\Validators\TaxonomyRulesValidator` produces error messages in a HTML format. This behaviour can be sometimes problematic, especially in a React-like parts of the CMS, e.g. the assets admin. For this purpose the validator offers a method to disable the HTML output, effectively applying plaintext term decorators instead of richtext ones.

If you need to use the same behaviour, i.e. output just a plaintext error messages, set the attribute after getting an instance of the validator e.g. in a data extension like:

```
use Chrometoaster\AdvancedTaxonomies\Validators\TaxonomyRulesValidator;

$validator = TaxonomyRulesValidator::create();
$validator->setHTMLOutput(false);

// get the validation error or empty string
$requiredTypesValidationError = $validator->validateRequiredTypes($this->getOwner()->Tags());

// use the validation message further
// ...
```

#### Validation in the CMS and the assets-admin section

[](#validation-in-the-cms-and-the-assets-admin-section)

In the 'asset-admin' interface, when tags are assigned to a file, the message only appears after saving the file, whereas within the pages section (any non-react context), the validation is performed on the fly when adding the terms through the 'Add tag' gridfield interface.

Contributing
============

[](#contributing)

Code guidelines
---------------

[](#code-guidelines)

This project follows the standards defined in:

- [PSR-1](http://www.php-fig.org/psr/psr-1/)
- [PSR-2](http://www.php-fig.org/psr/psr-2/)
- [RSR-4](http://www.php-fig.org/psr/psr-4/)

If you are helping out, please also follow the standards above.

Translations
------------

[](#translations)

We would like to support multiple languages in the long term, however only some aspects of the codebase are translated at the moment.

Please refer to the ["i18n" topic](https://docs.silverstripe.org/en/developer_guides/i18n/) on docs.silverstripe.org for more details if you wish to contribute in this are of development.

###  Health Score

40

—

FairBetter than 88% of packages

Maintenance45

Moderate activity, may be stable

Popularity21

Limited adoption so far

Community13

Small or concentrated contributor base

Maturity69

Established project with proven stability

 Bus Factor1

Top contributor holds 58.1% 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 ~53 days

Recently: every ~188 days

Total

26

Last Release

1087d ago

Major Versions

1.0.3 → 2.0.02019-12-19

2.0.1 → 3.0.02020-02-13

3.1.5 → 4.0.0-alpha12021-03-04

### Community

Maintainers

![](https://www.gravatar.com/avatar/ecb4eb65c3e34dc3384b0fcd0c2efb743ba7716df6b944802c96a50d4e10f550?d=identicon)[michalkleiner](/maintainers/michalkleiner)

---

Top Contributors

[![michalkleiner](https://avatars.githubusercontent.com/u/233342?v=4)](https://github.com/michalkleiner "michalkleiner (50 commits)")[![normann](https://avatars.githubusercontent.com/u/556224?v=4)](https://github.com/normann "normann (36 commits)")

---

Tags

cmsframeworksilverstripesilverstripe-4silverstripe-taxonomytaggingtaxonomiestaxonomysilverstripetaxonomyadvanced taxonomies

### Embed Badge

![Health badge](/badges/chrometoaster-silverstripe-advanced-taxonomies/health.svg)

```
[![Health](https://phpackages.com/badges/chrometoaster-silverstripe-advanced-taxonomies/health.svg)](https://phpackages.com/packages/chrometoaster-silverstripe-advanced-taxonomies)
```

###  Alternatives

[silverstripe/userforms

UserForms enables CMS users to create dynamic forms via a drag and drop interface and without getting involved in any PHP code

1321.0M72](/packages/silverstripe-userforms)[silverstripe/subsites

Run multiple sites from a single SilverStripe install.

65392.9k20](/packages/silverstripe-subsites)[symbiote/silverstripe-advancedworkflow

Adds configurable workflow support to the CMS, with a GUI for creating custom workflow definitions.

46295.2k7](/packages/symbiote-silverstripe-advancedworkflow)[sheadawson/silverstripe-dependentdropdownfield

A silverstripe dropdown field that has it's options populated via ajax, based on the value of the field it depends on

28232.8k18](/packages/sheadawson-silverstripe-dependentdropdownfield)[silverstripe/taxonomy

Provide extra taxonomy for cataloguing the data.

10481.5k19](/packages/silverstripe-taxonomy)[wedevelopnl/silverstripe-elemental-grid

Elemental grid module

1014.1k2](/packages/wedevelopnl-silverstripe-elemental-grid)

PHPackages © 2026

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