PHPackages                             wernerkrauss/folderperpage - 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. wernerkrauss/folderperpage

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

wernerkrauss/folderperpage
==========================

An extension for automatically creating a folder per page

0.2.2(10y ago)24942[7 issues](https://github.com/wernerkrauss/silverstripe-folderperpage/issues)MITPHPCI failing

Since May 20Pushed 6y ago2 watchersCompare

[ Source](https://github.com/wernerkrauss/silverstripe-folderperpage)[ Packagist](https://packagist.org/packages/wernerkrauss/folderperpage)[ RSS](/packages/wernerkrauss-folderperpage/feed)WikiDiscussions master Synced 5d ago

READMEChangelogDependencies (3)Versions (8)Used By (0)

silverstripe-folderperpage
==========================

[](#silverstripe-folderperpage)

[![Build Status](https://camo.githubusercontent.com/2dffbef11379e3faa211e8cdaf9d25b7645ea60051a17dacddfa1811ce960059/68747470733a2f2f7472617669732d63692e6f72672f7765726e65726b72617573732f73696c7665727374726970652d666f6c646572706572706167652e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/wernerkrauss/silverstripe-folderperpage)[![Scrutinizer Code Quality](https://camo.githubusercontent.com/083fe59ffed176039e0b780d13184ad772551cf29bd6cc6de7540024fe7be2d7/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f7765726e65726b72617573732f73696c7665727374726970652d666f6c646572706572706167652f6261646765732f7175616c6974792d73636f72652e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/wernerkrauss/silverstripe-folderperpage/?branch=master)[![codecov.io](https://camo.githubusercontent.com/3e3a3ca18e423b108478f9847ab4824acd1c358be3071b24e830054954282c70/68747470733a2f2f636f6465636f762e696f2f6769746875622f7765726e65726b72617573732f73696c7665727374726970652d666f6c646572706572706167652f636f7665726167652e7376673f6272616e63683d6d6173746572)](https://codecov.io/github/wernerkrauss/silverstripe-folderperpage?branch=master)[![helpfulrobot](https://camo.githubusercontent.com/7365ffdbb2e6f9108be093d0b09b6e05ef895cc0354da94414fc6b0a84219923/68747470733a2f2f68656c7066756c726f626f742e696f2f7765726e65726b72617573732f666f6c646572706572706167652f6261646765)](https://helpfulrobot.io/wernerkrauss/folderperpage/badge)

Extension that creates a folder per page or dataobject

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

[](#requirements)

- [`Silverstripe ^4.0 framework`](https://github.com/silverstripe/silverstripe-framework)
- [`Silverstripe ^4.0 CMS`](https://github.com/silverstripe/cms)

for SS3 compatible versions see [SS3 branch](https://github.com/wernerkrauss/silverstripe-folderperpage/tree/ss3)

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

[](#installation)

Download and install manually or use composer.

Make sure you add the extension to the classes you want to decorate. Add this to your config.yml to add it to all Pages:

```
Page:
  extensions:
    - NetWerkstatt\FolderPerPage\Extensions\RootFolder
```

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

[](#configuration)

You can exclude several page types. Just use the RootFolder.ignored\_classes config value. The module's config.yml has some default values to get you started:

```
NetWerkstatt\FolderPerPage\Extensions\RootFolder:
  ignored_classes:
    - SilverStripe\CMS\Model\VirtualPage
    - SilverStripe\ErrorPage\ErrorPage
  create_folder_for_translations: false
  folder_root: 'Articles'
```

Of course every decorated class can have a seperate folder root, e.g. "Articles" for all pages and "News" for a news data object. Just add the folder\_root config to your object.

Update your forms
-----------------

[](#update-your-forms)

You can use `$this->getRootFoldername()` to set the upload folder.

Given you have a has\_one relation "Avatar" =&gt; "Image" you can add the folder to the UploadField:

```
function getCMSFields() {
    /*...*/
    $pic = UploadField::create('Avatar', 'Your Avatar');
    $fields->addFieldToTab('Root.Main', $pic);

    $pic->setFolderName($this->getRootFolderName());
    /*...*/
}
```

TODO
----

[](#todo)

- make it work for other dataobjects
- unit tests
- add function that automatically updates all UploadFields and BulkUploads to use this folder in a form
- add support for subsites module, e.g. a master root per subsite
- task for updating / checking all existing pages
- check if page is moved
    - should it move the rootfolder automatically or by switch? May be a timeout problem with very large trees

###  Health Score

24

—

LowBetter than 32% of packages

Maintenance0

Infrequent updates — may be unmaintained

Popularity17

Limited adoption so far

Community11

Small or concentrated contributor base

Maturity58

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 95.9% 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 ~219 days

Total

4

Last Release

3721d ago

### Community

Maintainers

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

---

Top Contributors

[![wernerkrauss](https://avatars.githubusercontent.com/u/1043925?v=4)](https://github.com/wernerkrauss "wernerkrauss (47 commits)")[![gordonbanderson](https://avatars.githubusercontent.com/u/7060?v=4)](https://github.com/gordonbanderson "gordonbanderson (2 commits)")

---

Tags

silverstripeextension

### Embed Badge

![Health badge](/badges/wernerkrauss-folderperpage/health.svg)

```
[![Health](https://phpackages.com/badges/wernerkrauss-folderperpage/health.svg)](https://phpackages.com/packages/wernerkrauss-folderperpage)
```

PHPackages © 2026

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