Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

SilverStripe module for editing tags (both in the CMS and other forms)

branch: master

This branch is 0 commits ahead and 0 commits behind master

Fetching latest commit…

Cannot retrieve the latest commit at this time

README.md

TagField Module

Maintainer Contact

  • Ingo Schommer (Nickname: ischommer)

Requirements

  • SilverStripe 2.3 or newer
  • Database: MySQL 5+, SQLite3, Postgres 8.3, SQL Server 2008

Download/Information

Introduction

Provides a Formfield for saving a string of tags into either a many_many relationship or a text property. By default, tags are separated by whitespace. Check out a http://remysharp.com/wp-content/uploads/2007/12/tagging.php.

Features

  • Bundled with jQuery-based autocomplete library (http://remysharp.com/2007/12/28/jquery-tag-suggestion/) which is applied to a textfield
  • Autosuggest functionality (currently JSON only)
  • Saving in many_many relation, or in textfield
  • Static list of tags without hitting the server
  • Tab-autocompletion of tags
  • Customizeable tag layout through css
  • Unobtrusive - still saves with Javascript disabled
  • Full unit test coverage

Usage

Tags as Objects

Article Model

class Article extends DataObject {
    static $many_many = array(
        'RelationTags' => 'Tag'
    );
}

Tag Model

class Tag extends DataObject {
    static $db = array(
        'Title' => 'Varchar(200)',
    );

    static $belongs_many_many = array(
        'Articles' => 'Article'
    );
}

Formfield Instanciation:

$tagField = new TagField('RelationTags', null, null, 'Article')

Tags as Textfields

Article Model

class Article extends DataObject {
    static $db = array(
        'TextTags' => 'Text'
    );
}

Formfield Instanciation:

$tagField = new TagField('TextTags', null, null, 'Article')

Static Tags without Autosuggestion

$tagField = new TagField('TextTags', null, null, 'Article');
$tagField->setCustomTags(array('mytag','myothertag'));
Something went wrong with that request. Please try again.