2017 © Pedro Peláez
 

silverstripe-vendormodule silverstripe-categorization

SilverStripe Categorization Module. Easily allows categorization to be added to Pages and DataObjects.

image

mak001/silverstripe-categorization

SilverStripe Categorization Module. Easily allows categorization to be added to Pages and DataObjects.

  • Monday, July 23, 2018
  • by mak001
  • Repository
  • 1 Watchers
  • 0 Stars
  • 15 Installations
  • PHP
  • 1 Dependents
  • 0 Suggesters
  • 0 Forks
  • 1 Open issues
  • 4 Versions
  • 150 % Grown

The README.md

SilverStripe Categorization

Build Status codecov, (*1)

Easily add categorization to Pages or DataObjects and allow categories to be accessed by a nice url., (*2)

Take a page on example.com with the url segment page with a relation named Categories., (*3)

Categories can be accessed by visiting example.com/page/Categories., (*4)

Going to example.com/page/Categories/category will return a categorization in the Categories relation with the URLSegment of category., (*5)

Requirements

  • SilverStripe 4.0

Installation

composer require mak001/silverstripe-categorization, (*6)

Usage

CategorizationExtension

To create a category add Mak001\Categorization\Extensions\CategorizationExtension to a DataObject. This extension will add a Title and URLSegment fields to the DataObject., (*7)

Category:
  extensions:
    - Mak001\Categorization\Extensions\CategorizationExtension

CategorizationControllerExtension

Allows a page to show category relations. This will pick up has_many, many_many, and belongs_many_many relations if the relation class has the CategorizationExtension applied., (*8)

CategoryPageController:
  extensions:
    - Mak001\Categorization\Extensions\CategorizationControllerExtension

External Relations

External relations can also be made viewable. This is useful when children of a holder page have the relations, but the holder should have the viewable relations. This can be done with, (*9)

private static $external_relation = [
    'External' => RelationClass::class,
];

public function External()
{
    return RelationClass::get();
}

All external relations require a method named the same as the relation name., (*10)

Relation url segments

Relation segments can be different than the relation name. An example of the is the Categories relation mapping to categories. Simply add, (*11)

private static $relation_segments = [
    'Categories' => 'example_segment',
];

Now visiting example.com/page/example_segment will point to the Categories relation, and example.com/page/Categories will not be found., (*12)

It will default to the relation name., (*13)

Templating

Take a page type NameSpace/CategoryPage that extends Page with the url segment of page. When visiting example.com/page/Categories the templates that can be used are, (*14)

[
    "NameSpace/CategoryPage_Categories",
    "Page_Categories",
    "NameSpace/CategoryPage",
    "Page",
]

It will always look for ClassName_Relation, never for the relation_segment for the relation., (*15)

With a categorization object with a singular_name of Category and a url_segment of category, when visiting example.com/page/Categories/category the templates that can be used are, (*16)

[
    "NameSpace/CategoryPage_Categories_Category",
    "Page_Categories_Category",
    "NameSpace/CategoryPage_Categories",
    "Page_Categories",
    "NameSpace/CategoryPage",
    "Page",
]

These should be located in the Layouts folder., (*17)

When visiting a relation link the template will be passed a Categorizations variable that will contain the categories in the relation., (*18)

When visiting example.com/page/Categories/category the templates will be the same as above. A Categorization variable will be added that will contain the categorization with the given URLSegment in the specified relation., (*19)

When visiting either a relation link or a categorization object the template will be passed a RelationName variable that denotes what relation is currently being viewed., (*20)

Non generic variables

Setting $use_alternative_variables to true on the controller will use the relation names and the categorization $singlur_name in place of the generic Categorizations and Categorization variable names respectivly., (*21)

Modifying the relation lists

Modify the lists passed to the template using the generic modifyCategorizationList($list, $request) extension point. THis will apply to all lists. To have more fine tuned controll over specific relation lists use modify{$relationName}List() replacing {$relationName} with the name of the relation., (*22)

The Versions

23/07 2018

dev-master

9999999-dev

SilverStripe Categorization Module. Easily allows categorization to be added to Pages and DataObjects.

  Sources   Download

BSD-3-Clause

The Requires

 

The Development Requires

silverstripe categorization

22/07 2018

dev-relation-list-extension

dev-relation-list-extension

SilverStripe Categorization Module. Easily allows categorization to be added to Pages and DataObjects.

  Sources   Download

BSD-3-Clause

The Requires

 

The Development Requires

silverstripe categorization

22/07 2018

dev-relation-name-template-var

dev-relation-name-template-var

SilverStripe Categorization Module. Easily allows categorization to be added to Pages and DataObjects.

  Sources   Download

BSD-3-Clause

The Requires

 

The Development Requires

silverstripe categorization

18/05 2018

dev-render-fix

dev-render-fix

SilverStripe Categorization Module. Easily allows categorization to be added to Pages and DataObjects.

  Sources   Download

BSD-3-Clause

The Requires

 

The Development Requires

silverstripe categorization