Over the last year we've been working on a highly customisable calendaring/events system for concrete5. This package is now 'feature complete' and we've created a demonstration video to highlight its features.
About six months ago I created a video demo of a calendaring concept we had developed for concrete5, where we had taken a different approach to managing calendar events. Instead of having events and event pages as separate entities in a site, we combined both through the use of a custom attribute type.
The attribute type we developed was also a little unconventional, in that we opted to have a simple text field for the input of dates, with users typing in the date in a format that best suited them.
With this system, new events are added to a site via concrete5's composer, presenting a common interface, as well as providing an easy way for developers to add additional attributes.
Since then we have continued to enhance this package, adding features and options, whilst keeping the original simplicity of the set up. We've used this package on multiple projects and now consider this package effectively 'feature complete'.
In particular, we added a date picker to aid in the selection of dates and times, but retained the original feature of being able to manually enter and edit dates in a text format. We feel this is a great balance of usability and flexibility.
Our custom attribute type is intuitive to use to enter basic dates...
...but also handles more complex date ranges and repeating events with ease.
The features of the add-on summarised:
- An option on install to automatically set up attributes and Composer settings.
- Events are added and managed via concrete5's built-in Composer feature. Separate calendars can be created by simply creating events in different parts of the sitemap.
- An 'Easy Calendar' block is used to output lists of events or a full calendar view. There is a dynamic 'full calendar' month view, plus event list templates that filter events: 'current', 'current and upcoming', 'upcoming', 'past', 'future', 'today' and 'next 7 days'. The block also outputs an XML feed.
- The block has a template format very similar to that used in Page List block, meaning event lists can be easily customised. A 'helper' is used to fetch the events, with it then being a simple loop through pages to output details.
- Event lists can be paginated and/or limited to a number of events. The events can also be filtered to a part of the sitemap (effectively showing different calendars).
- A date picker to easily specify start dates, end dates, and start and end times. The attribute retains the option to manually edit dates in a text format (as per our original concept). The attribute can also be configured to be text entry only or a date picker only. The manual date entry retains its flexible format, allowing a range of date formats to be entered, along with words like 'midnight'.
- The ability to input repeating events.
- iCal file export.
- 'Pretty' date output options, outputting dates and date ranges in a more natural format, i.e. 'June 13–18, 2014', instead of 'June 13, 2014 to June 18, 2014'.
Where we think this package shines is in how easy it is to customise from a developer's point of view. For example, on one project we're dynamically changing the format of an event page once an event has passed. On another project we've included an address field on the Composer form that allows the automatic inclusion of a Google map. We've also be able to integrate this package with eCommerce, setting up event pages with an associated 'ticket' product.
This package simply helps us to fetch and order pages as per their event dates, allowing us to customise and style the output of event lists and details however we need to.
From an end-user's point of view, this system is also as streamlined as we think it can get in terms of entering and managing events - there are no complex dashboard screens or dialogs, it's simply the familiar Composer process of adding pages, with an extra attribute to input event dates.
The list of features above really doesn't capture the simplicity of the system, hence why we tried to cover the majority of the features in a video.
If you are interested in this package, and would perhaps like to use it on a project, please feel free to contact us.