# Collections
# Overview
Collections, although not strictly the same, are akin to Categories. They serve to allow you to add products ,either explicitly or via certain criteria, for use on your store.
For example, you may have a Collection called "Red T-Shirts" and within that collection specify that any product which has the tag "Red" and "T-Shirt" to be included.
A collection can also have other collections underneath it, forming a nested set hierarchy.
A collection must also belong to a collection group, this allows you to have greater flexibility when building out things like Menu's and Landing pages.
# Collection Groups
Create a collection group
$group = \Lunar\Models\CollectionGroup::create([
'name' => 'Main Catalogue',
'handle' => 'main-catalogue' // Will auto generate if omitted.
]);
# Collections
Collections are a hierarchy of models that have products associated to them, you can think of them as "Categories". Once you have added products you can then determine how they are sorted on display.
# Create a collection
$collection = \Lunar\Models\Collection::create([
'attribute_data' => [
'name' => new \Lunar\FieldTypes\Text('Clearance'),
],
'collection_group_id' => $group->id,
]);
# Add a child collection
$child = new \Lunar\Models\Collection::create([/*..*/]);
$collection->appendNode($child);
This results in the following
- Clearance
- Child
Lunar uses the Laravel Nested Set (opens new window) package, so feel free to take a look at it to see what's possible.
# Adding products
Products are related using a BelongsToMany
relationship with a pivot column for position
.
$products = [
1 => [
'position' => 1,
],
2 => [
'position' => 2,
]
];
$collection->products()->sync($products);
TIP
The key in the $products
array is the product id
# Sorting products
Lunar comes with a handful of criteria out the box for sorting products in a collection:
Name | Description |
---|---|
min_price:asc | Sorts using the base price ascending |
min_price:desc | Sorts using the base price descending |
sku:asc | Sorts using the sku ascending |
sku:desc | Sorts using the sku descending |
custom | This will allow you to specify the order of each product manually |
Depending on what you have as the sort time on the collection, Lunar will automatically sort the products for you when you update the products.