superbig / craft3-collections
Use Laravel Collections in Craft
Installs: 29 143
Dependents: 0
Suggesters: 0
Security: 0
Stars: 23
Watchers: 2
Forks: 3
Open Issues: 0
Type:craft-plugin
Requires
- craftcms/cms: ^3.0.0-RC1
- illuminate/collections: ^8.71.0
README
Note: This plugin has been abandoned as Craft 4 includes Collections support.
Collections plugin for Craft CMS 3.x
Use Laravel Collections in Craft
Requirements
This plugin requires Craft CMS 3.0.0-beta.23 or later.
Installation
To install the plugin, follow these instructions.
-
Open your terminal and go to your Craft project:
cd /path/to/project
-
Then tell Composer to load the plugin:
composer require superbig/craft3-collections
-
In the Control Panel, go to Settings → Plugins and click the “Install” button for Collections.
Collections Overview
Here is some good inspiration on what you can do with Collections:
- Collections documentation
- Laravel Collections: PHP Arrays On Steroids
- Laravel Collections Examples on GitHub
- Laravel Collections “when” Method
- Code Bright: Eloquent Collections
- Refactoring To Collection
- 10 less-known (but awesome!) Laravel Collections methods
Configuring Collections
Add your macros to the config file:
<?php return [ /** Add your macros here * "macros" => [ * 'toUpper' => function () { * return $this->map(function ($value) { * return strtoupper($value); * }); * }, * ], * */ "macros" => [ ], ];
Using Collections
Group tags by letter:
Add this macro to your config:
<?php return [ 'macros' => [ 'tagGroups' => function () { return $this->groupBy(function ($tag) { return substr($tag->title, 0, 1); }); } ], ];
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.1.2/css/bulma.css"> </head> <body> <div class="section hero is-primary"> <div class="hero-body"> <div class="container"> <h1 class="title">Tags</h1> <p class="subtitle"> Every tag on the site. </p> </div> </div> </div> <h2>Tag groups</h2> <div class="section"> <div class="container"> <ul class="has-columns has-text-centered"> {% set collection = craft.tags.group('media') | collect %} {% for letter, tags in collection.tagGroups() %} <div class="letter-group"> <h3 class="title is-1 letter">{{ letter }}</h3> <ul> {% for tag in tags %} <li class="title is-5"> <a href="/tags/{{ tag.slug }}">{{ tag.title }}</a> </li> {% endfor %} </ul> </div> {% endfor %} </ul> </div> </div> </body> </html>
Brought to you by Superbig