PHPackages                             madmatt/silverstripe-nestedcheckboxsetfield - 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. madmatt/silverstripe-nestedcheckboxsetfield

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

madmatt/silverstripe-nestedcheckboxsetfield
===========================================

Adds a level of nesting to a CheckboxSetField using a has\_many/has\_one relationship

25263[7 PRs](https://github.com/madmatt/silverstripe-nestedcheckboxsetfield/pulls)PHP

Since Jul 18Pushed 10y ago2 watchersCompare

[ Source](https://github.com/madmatt/silverstripe-nestedcheckboxsetfield)[ Packagist](https://packagist.org/packages/madmatt/silverstripe-nestedcheckboxsetfield)[ RSS](/packages/madmatt-silverstripe-nestedcheckboxsetfield/feed)WikiDiscussions master Synced 2w ago

READMEChangelogDependenciesVersions (1)Used By (0)

silverstripe-nestedcheckboxsetfield
===================================

[](#silverstripe-nestedcheckboxsetfield)

This adds an extra level to a CheckboxSetField, which provides some structure to a large dataset.

Example Usage
-------------

[](#example-usage)

The below will produce a set of nested fields where each Tag (which is selectable) sits under a Tag Category (just a heading, not selectable).

class Page extends SiteTree { static $many\_many = array( 'PageTags' =&gt; 'Tag' );

```
public function getCMSFields() {
    $fields = parent::getCMSFields();

    $fields->insertBefore(
        NestedCheckboxSetField::create('PageTags', 'Page Tags')
            ->setRootClass('TagCategory')
            ->setRootTitle('Title')
            ->setChildRelation('Tags')
            ->setChildTitle('Title'),
        'Content'
    );
}

```

}

class Tag extends DataObject { static $db = array( 'Title' =&gt; 'Varchar(100)' );

```
static $has_one = array(
    'Category' => 'TagCategory'
);

```

}

class TagCategory extends DataObject { static $db = array( 'Title' =&gt; 'Varchar(100)' );

```
static $has_many = array(
    'Tags' => 'Tag'
);

```

}

###  Health Score

24

—

LowBetter than 30% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity18

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity41

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.

### Community

Maintainers

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

---

Top Contributors

[![madmatt](https://avatars.githubusercontent.com/u/893117?v=4)](https://github.com/madmatt "madmatt (10 commits)")

### Embed Badge

![Health badge](/badges/madmatt-silverstripe-nestedcheckboxsetfield/health.svg)

```
[![Health](https://phpackages.com/badges/madmatt-silverstripe-nestedcheckboxsetfield/health.svg)](https://phpackages.com/packages/madmatt-silverstripe-nestedcheckboxsetfield)
```

###  Alternatives

[pingpong/menus

Laravel Menus

68257.9k13](/packages/pingpong-menus)[lochmueller/calendarize

Create a structure for timely controlled tables (e.g. events) and one plugin for the different output of calendar views (list, detail, month, year, day, week...). The extension is shipped with one default event table, but you can also 'calendarize' your own table/model. It is completely independent and configurable! Use your own models as event items in this calender. Development on https://github.com/lochmueller/calendarize

77170.1k15](/packages/lochmueller-calendarize)[nenes25/eicaptcha

PrestaShop Captcha Module

3231.3k](/packages/nenes25-eicaptcha)[mindshape/mindshape-cookie-consent

This extension provides functionality to create a customizable cookie consent for your website. It is developed for flexibility to be customized in accordance to your data security guidelines.

11162.9k](/packages/mindshape-mindshape-cookie-consent)[ijeffro/laravel-cities

Laravel Cities is a bundle for Laravel, providing Iata Code ISO 3166 3 and country codes for all the cities.

118.2k](/packages/ijeffro-laravel-cities)[laravelplus/laravel-updater

A Laravel package for syncing with upstream repositories (GitHub, GitLab, Bitbucket, etc.)

222.0k](/packages/laravelplus-laravel-updater)

PHPackages © 2026

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