Clean up those complex templates with Laravel Collections
Switch branches/tags
Nothing to show
Clone or download
Latest commit 78faddd Jul 20, 2018
Permalink
Failed to load latest commit information.
resources/img Add inspiration and logo Nov 18, 2017
src Use registerTwigExtension() Jul 20, 2018
.craftplugin Init Nov 18, 2017
.gitignore Init Nov 18, 2017
CHANGELOG.md Update CHANGELOG.md Jul 20, 2018
LICENSE.md Init Nov 18, 2017
README.md Added group tags by letter example Nov 18, 2017
composer.json Update version Jul 20, 2018

README.md

Collections plugin for Craft CMS 3.x

Use Laravel Collections in Craft

Screenshot

Requirements

This plugin requires Craft CMS 3.0.0-beta.23 or later.

Installation

To install the plugin, follow these instructions.

  1. Open your terminal and go to your Craft project:

     cd /path/to/project
    
  2. Then tell Composer to load the plugin:

     composer require superbig/craft3-collections
    
  3. 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:

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