/Silverstripe-LinkItemField

SilverStripe 4 custom form element and model for anchor, email, telephone, file, image, internal and external links

Primary LanguagePHPMIT LicenseMIT

SilverStripe 4 Link Item Field

Latest Stable Version Latest Unstable Version Total Downloads License

Author: Andrew Mc Cormack

Features

Provides a has_one Link object with the following options:

  • Anchor link
  • Internal Link
  • External Link
  • Email
  • Telephone
  • File
  • Image
  • Link target (_blank etc)

Screen Shots

Installation

Add the following to your composer.json file and run /dev/buid?flush=all

{  
    "require": {  
        "cyber-duck/silverstripe-linkitemfield": "4.1.*"
    }
}

Setup

The field references a has_one LinkItem relation on a DataObject. Make sure to include both the field and object namespaces in your class.

use CyberDuck\LinkItemField\Forms\LinkItemField;
use CyberDuck\LinkItemField\Model\LinkItem;
use SilverStripe\ORM\DataObject;

class MyObject extends DataObject 
{
    private static has_one = [
        'MyRelation' => LinkItem::class
    ];
}

The field can easily be added to an DataObject / extension through getCMSFields() / updateCMSFields() or similar.

$fields->addFieldToTab('Root.Main', LinkItemField::create('MyRelationID', 'My Relation Title'));

The relation will expose 3 properties in your template - Link, Title, and Target.

<% with MyRelation %>
<a href="$Link" target="$Target">$Title</a>
<% end_with %>

When calling Link the outputted URL will be formatted depending on the Link type

<a href="#{TheURL}">For Anchor</a>
<a href="{TheURL}">For Internal</a>
<a href="{TheURL}">For External</a>
<a href="mailto:{TheURL}">For Email</a>
<a href="tel:+{TheURL}">For Telephone</a>
<a href="{TheURL}">For File</a>
<a href="{TheURL}">For Image</a>

Todo

  • Add React