PHPackages                             otago/tiles - 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. otago/tiles

ActiveSilverstripe-vendormodule

otago/tiles
===========

Tile CMS field

v6.1(3mo ago)86.7k↑175%2[6 PRs](https://github.com/otago/tiles/pulls)BSD-3-ClausePHP

Since Nov 16Pushed 3mo ago2 watchersCompare

[ Source](https://github.com/otago/tiles)[ Packagist](https://packagist.org/packages/otago/tiles)[ RSS](/packages/otago-tiles/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (10)Dependencies (2)Versions (54)Used By (0)

Tiling system for SilverStripe CMS
==================================

[](#tiling-system-for-silverstripe-cms)

[![display of what the tiles look like inside SilverStripe](images/preview.gif)](images/preview.gif)

Allows you to create an [elemental](https://github.com/dnadesign/silverstripe-elemental) grid inside SilverStripe. Features include:

1. drag &amp; reorder them inside the CMS
2. easily create your own tiles
3. delete and edit tiles easily

It also comes with some basic tiles out of the box.

Install
=======

[](#install)

Run this in your command line:

```
composer require otago/tiles

```

To expose the modules resouces:

```
composer vendor-expose

```

The module requires [elemental blocks](https://github.com/dnadesign/silverstripe-elemental). If you don't have this module, you'll be prompted on install.

Customise your tiles
====================

[](#customise-your-tiles)

Put your own templates in your themes/&lt;themename&gt;/templates/Tiles/tilename.ss. For example, to make your own ContentTile in the simple theme, create a file in **themes/simple/templates/Tiles/ContentTile.ss**

```

		$Content

```

If you want to support MSIE, you can use the -ms-grid-row and -ms-grid-column CSS values with $Col and $Row to have the grid display correctly.

Build source
============

[](#build-source)

You'll need node 6. Boo.

```
npm run watch

```

to get env vars on windows:

```
npm install -g win-node-env

```

This module uses fancy and modern react for rendering. So you know it's fast and snappy.

Usage
=====

[](#usage)

After a composer install you'll have the tile module as an element. So you don't need to do anything (unless you've restricted the elements on each page).

If you want to put tilefield directly on a page, you can do this too. The following example shows you how:

```
use OP\Fields\TileField;

class MyPage extends Page {

	static $has_many = [
		'Tiles' => Models\Tile::class
	];

	function getCMSFields() {
		$fields = parent::getCMSFields();
		$fields->addFieldToTab('Root.Main', TileField::create('Tiles', 'Tiles'));
		return $fields;
	}
}
```

Allowing the user to specify how many columns they want
-------------------------------------------------------

[](#allowing-the-user-to-specify-how-many-columns-they-want)

You can provide an DataObject where the Cols val will be written to. so you can have 3,2 or however many cols you want wide:

```
use OP\Fields\TileField;

class MyTilePage extends Page {
	private static $db = [
		'Cols' => 'Int'
	];
	private static $has_many = [
		'Tiles' => Tile::class
	];
	private static $owns = [
		'Tiles'
	];
	public function getCMSFields() {
		$fields = parent::getCMSFields();
		$tilefield = TileField::create('Tiles',
			'Tiles',
			$this->Tiles(),
			null,
			$this // this var requires a db object Cols to remember how many cols it is wide
		);

		$fields->addFieldToTab('Root.Main', $tilefield);
		return $fields;
	}
}
```

Specifying types of tiles in field
----------------------------------

[](#specifying-types-of-tiles-in-field)

You can limit the CMS dropdown to a limited number of tiles. This is handy when you've have a page where you only want a certain type of tile. This is done by passing in the $dataList parameter:

```
		$tile = DataObject::create(array('Name'=>'StaffHubResourceTile', 'NiceName' => StaffHubResourceTile::functionGetNiceName()));

		$fields->addFieldToTab('Root.Main', TileField::create('Tiles', 'Tiles', ArrayList::create(array($tile))));
```

upgrading
---------

[](#upgrading)

Here's the modulelegacy.yml file to convert your tiles from SS 3 to 4:

```
---
Name: mymodulelegacy
---
SilverStripe\ORM\DatabaseAdmin:
  classname_value_remapping:
    GalleryTile: OP\Models\GalleryTile
    ContentTile: OP\Models\ContentTile
    LinkTile: OP\Models\LinkTile
    AnnouncementTile: OP\Models\AnnouncementTile
    PhotoTile: OP\Models\PhotoTile
    Slide: OP\Models\Slide
```

###  Health Score

54

—

FairBetter than 97% of packages

Maintenance79

Regular maintenance activity

Popularity30

Limited adoption so far

Community15

Small or concentrated contributor base

Maturity77

Established project with proven stability

 Bus Factor1

Top contributor holds 84.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 ~66 days

Recently: every ~237 days

Total

46

Last Release

112d ago

Major Versions

v3.0 → 4.02018-09-20

v4.12 → v5.02024-08-06

v5.1 → v6.02026-01-26

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/67215?v=4)[torleif](/maintainers/torleif)[@torleif](https://github.com/torleif)

---

Top Contributors

[![torleif](https://avatars.githubusercontent.com/u/67215?v=4)](https://github.com/torleif "torleif (75 commits)")[![Alastairkn](https://avatars.githubusercontent.com/u/15573766?v=4)](https://github.com/Alastairkn "Alastairkn (6 commits)")[![jeffrey-nz](https://avatars.githubusercontent.com/u/6498155?v=4)](https://github.com/jeffrey-nz "jeffrey-nz (4 commits)")[![dunatron](https://avatars.githubusercontent.com/u/8181248?v=4)](https://github.com/dunatron "dunatron (3 commits)")[![KanikaOP](https://avatars.githubusercontent.com/u/43796439?v=4)](https://github.com/KanikaOP "KanikaOP (1 commits)")

---

Tags

silverstripetilesCMS Field

### Embed Badge

![Health badge](/badges/otago-tiles/health.svg)

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

###  Alternatives

[silverstripe/cms

The SilverStripe Content Management System

5163.4M1.3k](/packages/silverstripe-cms)[silverstripe/admin

SilverStripe admin interface

262.6M325](/packages/silverstripe-admin)[silverstripe/silverstripe-omnipay

SilverStripe Omnipay Payment Module

38106.0k15](/packages/silverstripe-silverstripe-omnipay)[silverleague/ideannotator

Generate PHP DocBlock annotations for DataObject and DataExtension databasefields and relation methods

4768.0k43](/packages/silverleague-ideannotator)[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)
