UpDown feature on any model. Easily.
A tiny demo, based on two distinct model: Winter\Forum\Models\Post and a custom plugin's Comment model.
UpDown.-.demo.mp4
composer require sunlab/wn-updown-plugin
This plugin requires the Winter.User Plugin.
To use the up/down feature on a model,
you need to add the Votable behavior to the model(s) you want:
class Plugin extends PluginBase
{
public function boot()
{
\Winter\Blog\Models\Post::extend(static function ($post) {
$post->implement[] = \SunLab\UpDown\Behaviors\Votable::class;
});
}
}Then, you need to add the upDown component on a blog post page or blog post list page:
title = "Blog"
url = "/blog/:page?"
layout = "default"
description = "The main blog page, with all posts."
hidden = "0"
[blogPosts]
pageNumber = "{{ :page }}"
postsPerPage = "10"
noPostsMessage = "No posts found"
sortOrder = "published_at desc"
categoryPage = "blog/category"
postPage = "blog/post"
[upDown]
==
{% component 'blogPosts' %}Then, inside the override of the blogPosts partial,
add the upDown component inside the loop and
use component's dynamic properties
to initialize the component with the current post:
{# Loop over the blog posts #}
{% for post in posts %}
{# For each post, displays the upDown component #}
{% component 'upDown' votable=post %}
{% partial "blog/post" post=post %}
{% endfor %}