Use Laravel Collections in Craft
To install Collections, follow these steps:
- Download & unzip the file and place the
collections
directory into yourcraft/plugins
directory - Install plugin in the Craft Control Panel under Settings > Plugins
- The plugin folder should be named
collections
for Craft to see it.
Collections works on Craft 2.4.x and Craft 2.5.x.
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
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" => [
],
];
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