微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

FullCalendar创建下拉过滤器

如何解决FullCalendar创建下拉过滤器

我在Symfony项目中使用fullCalendar。我不会创建按数据库值/ status值/

进行过滤的客户端下拉过滤器

这是我的实体

<?PHP

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="App\Repository\BookingRepository")
 */
class Booking
{
    /**
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue
     * @ORM\Id
     */
    private $id;
    /**
     * @ORM\Column(type="string",length=255,nullable=true)
     */
    private $title;
    /**
     * @ORM\Column(type="datetime")
     */
    private ?\DateTimeInterface $loadingDate;

    /**
     * @ORM\Column(type="datetime")
     */
    private ?\DateTimeInterface $unloadingDate;

    /**
     * @ORM\Column(type="string")
     */
    private $truck_id;
    /**
     * @ORM\Column(type="string",length=255)
     */
    private $loadingAddress;
    /**
     * @ORM\Column(type="string",length=255)
     */
    private $unloadingAddress;
    /**
     * @ORM\Column(type="decimal",precision=10,scale=0)
     */
    private $pricePerKm;
    /**
     * @var Driver
     *
     * @ORM\ManyToOne(targetEntity="App\Entity\Driver",inversedBy="cargoes")
     */
    private Driver $drivers;
    /**
     * @ORM\Column(type="integer" )
     */
    private int $status = 0;
    /**
     * @var User
     *@ORM\ManyToOne(targetEntity="App\Entity\User",inversedBy="bookings")
     */
    private User $author;

    public function getId(): ?int
    {
        return $this->id;
    }

    public function getLoadingDate(): ?\DateTimeInterface
    {
        return $this->loadingDate;
    }

    public function setLoadingDate(\DateTimeInterface $loadingDate): self
    {
        $this->loadingDate = $loadingDate;

        return $this;
    }

    public function getUnloadingDate(): ?\DateTimeInterface
    {
        return $this->unloadingDate;
    }

    public function setUnloadingDate(?\DateTimeInterface $unloadingDate = null): self
    {
        $this->unloadingDate = $unloadingDate;

        return $this;
    }

    /**
     * @return mixed
     */
    public function getPricePerKm()
    {
        return $this->pricePerKm;
    }

    /**
     * @param mixed $pricePerKm
     */
    public function setPricePerKm($pricePerKm): void
    {
        $this->pricePerKm = $pricePerKm;
    }

    /**
     * @return mixed
     */
    public function getUnloadingAddress()
    {
        return $this->unloadingAddress;
    }

    /**
     * @param mixed $unloadingAddress
     */
    public function setUnloadingAddress($unloadingAddress): void
    {
        $this->unloadingAddress = $unloadingAddress;
    }

    /**
     * @return mixed
     */
    public function getTruckId()
    {
        return $this->truck_id;
    }

    /**
     * @param mixed $truck_id
     */
    public function setTruckId($truck_id): void
    {
        $this->truck_id = $truck_id;
    }

    /**
     * @return mixed
     */
    public function getLoadingAddress()
    {
        return $this->loadingAddress;
    }

    /**
     * @param mixed $loadingAddress
     */
    public function setLoadingAddress($loadingAddress): void
    {
        $this->loadingAddress = $loadingAddress;
    }



    /**
     * @return mixed
     */
    public function getTitle()
    {
        return $this->loadingAddress." to ".$this->unloadingAddress;
    }

    /**
     * @param mixed $title
     */
    public function setTitle($title): void
    {
        $this->title = $title;
    }

    /**
     * @return mixed
     */
    public function getStatus()
    {
        return $this->status;
    }
    /**
     * @param mixed $status
     */
    public function setStatus($status): void
    {
        $this->status = $status;
    }
    /**
     * @return User
     */
    public function getAuthor(): User
    {
        return $this->author;
    }

    /**
     * @param User $author
     *
     */
    public function setAuthor(User $author )
    {
        $this->author = $author;
    }
    /**
     * @return Driver
     */
    public function getDrivers(): Driver
    {
        return $this->drivers;
    }

    /**
     * @param Driver $drivers
     */
    public function setDrivers(Driver $drivers): void
    {
        $this->drivers = $drivers;
    }


}

我的日历订户

<?PHP

namespace App\EventSubscriber;

use App\Repository\BookingRepository;
use CalendarBundle\CalendarEvents;
use CalendarBundle\Entity\Event;
use CalendarBundle\Event\CalendarEvent;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Eventdispatcher\EventSubscriberInterface;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;

class CalendarSubscriber extends AbstractController implements EventSubscriberInterface
{
    private BookingRepository $bookingRepository;
    private UrlGeneratorInterface $router;

    public function __construct(
        BookingRepository $bookingRepository,UrlGeneratorInterface $router
    )
    {
        $this->bookingRepository = $bookingRepository;
        $this->router = $router;
    }

    public static function getSubscribedEvents()
    {
        return [
            CalendarEvents::SET_DATA => 'onCalendarSetData',];
    }
    public function onCalendarSetData(CalendarEvent $calendar)
    {
        // Modify the query to fit to your entity and needs
        // Change booking.beginAt by your start date property

        $bookings = $this->bookingRepository->findBy(['author' => $this->getUser()]);

        foreach ($bookings as $booking) {

            // this  create the events with your data (here booking data) to fill calendar
            $bookingEvent = new Event(
                $booking->getTitle(),$booking->getloadingDate(),$booking->getUnloadingDate(),// If the end date is null or not defined,a all day event is created.
            );

            /*
             * Add custom options to events
             *
             * For more information see: https://fullcalendar.io/docs/event-object
             * and: https://github.com/fullcalendar/fullcalendar/blob/master/src/core/options.ts
             */
            if ($booking->getStatus() != 0) {
                $bookingEvent->setoptions([
                    'backgroundColor' => 'grey','borderColor' => 'grey',]);
            } else {
                $bookingEvent->setoptions([
                    'backgroundColor' => 'matblue','borderColor' => 'matblue',]);
            }
            $bookingEvent->addOption(
                'url',$this->router->generate('booking_show',[
                    'id' => $booking->getId(),])
            );

            // finally,add the event to the CalendarEvent to fill the calendar
            $calendar->addEvent($bookingEvent);
        }
    }
}

并查看

{% extends 'base.html.twig' %}

{% block body %}
    <a href="{{ path('booking_new') }}">Create new booking</a>

    <select id="status-filter">
        <option value="all">All</option>
        <option value="1">Completed</option>
        <option value="2">Not Completed</option>
    </select>
    <br><br>
    <div id="calendar-holder"></div>
{% endblock %}

{% block stylesheets %}
    <link rel="stylesheet" href="{{ asset('css/style.css') }}">
    <link rel="stylesheet" href="{{ asset('css/bootstrap-datetimepicker.min.css') }}">
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fullcalendar/core@4.1.0/main.min.css">
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fullcalendar/daygrid@4.1.0/main.min.css">
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fullcalendar/timegrid@4.1.0/main.min.css">

{% endblock %}

{% block javascripts %}
    <script src="https://cdn.jsdelivr.net/npm/@fullcalendar/core@4.1.0/main.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/@fullcalendar/interaction@4.1.0/main.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/@fullcalendar/daygrid@4.1.0/main.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/@fullcalendar/timegrid@4.1.0/main.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/@fullcalendar/list@4.1.0/main.min.js"></script>

    <div id="mycalendar"></div>

    <script type="text/javascript">

        document.addEventListener('DOMContentLoaded',() => {
            var calendarEl = document.getElementById('calendar-holder');
            var calendar = new FullCalendar.Calendar(calendarEl,{
                defaultview: 'list',editable: true,eventSources: [
                    
                    {
                        url: "{{ path('fc_load_events') }}",method: "POST",extraParams: {
                            filters: JSON.stringify({})
                        },failure: () => {
                            // alert("There was an error while fetching FullCalendar!");
                        },},],header: {
                    left: 'prev,next today',center: 'title',right: 'dayGridMonth,list',plugins: [ 'interaction','dayGrid','timeGrid','list' ],// https://fullcalendar.io/docs/plugin-index
                timeZone: 'UTC',locale:"bg",});
            calendar.render();
        });
    </script>
{% endblock %}

认状态值为'0'。事件完成后,状态值更改为'1'

过滤器必须在值之间切换

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。