unclecheese/silverstripe-serialised-dbfields

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

dev-master 2017-10-07 10:09 UTC

README

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

Installation

composer require unclecheese/silverstripe-serialised-dbfields

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.