Provides consumable serialised data in text fields for SilverStripe
PHP
Permalink
Failed to load latest commit information.
_config
code Add extension point for casting hints Oct 13, 2016
tests
LICENSE Initial commit Aug 5, 2016
README.md FEATURE: add casting Aug 17, 2016
composer.json

README.md

Serialised DB Fields for SilverStripe

Provides serialised data (YAML, JSON) in text fields that are traverseable as nested ViewableData objects.

Installation

composer require uncelcheese/silverstripe-serialised-db-fields

Recommended add-ons

If you plan on editing the serialised data in the CMS, you'll probably want to install CodeEditorField.

composer require nathancox/codeeditorfield

The database fields are set up to automatically scaffold CodeEditorField when available.

Usage

mysite/code/MyPageType.php

class MyPageType extends Page {

  private static $db = [
    'MyJSONData' => 'JSONField',
    'MyYAMLData' => 'YAMLField'
  ];

  public function getCMSFields()
  {
    $fields = parent::getCMSFields();
    $fields->addFieldToTab('Root.JSONData', CodeEditorField::create('MyJSONData')
      ->setMode('json')
    );
    $fields->addFieldToTab('Root.YAMLData', CodeEditorField::create('MyYAMLData')
      ->setMode('yaml')
    );

    return $fields;
  }
}

$MyJSONData

{
  "Category": "Lollies",
  "BannerImage": "/path/to/image.png",
  "Products": [
    {
      "Title": "Snake",
      "Colour": "Red"
    },
    {
      "Title": "Jet plane",
      "Colour": "Purple"
    }
  ]
}

themes/mytheme/templates/Layout/MyPageType.ss

<% with $MyJSONData %>
  Category: $Category<br>
  <img src="$BannerImage"><br>
  <ul>
  $Products.count total products
  <% loop $Products %>
    <li>$Title ($Colour)</li>
  <% end_loop %>
  </ul>
<% end_with %>

Casting

By default, all scalar values fall back on the $default_cast setting of ViewableData (Text). To customise the casting, use the | symbol in your field value.

Price: Currency|20.00
StartDate: Date|2016-01-01

Tests

framework/sake dev/tests/SerialisedDBFeildsTest

Troubleshooting

Ring Uncle Cheese.