ProcessWire Weekly #461

In the 461st issue of ProcessWire Weekly we'll check out latest core updates, introduce a couple of brand new third party modules, and more. Read on!

Welcome to the latest issue of ProcessWire Weekly. In this week's issue we'll check out the latest core updates, introduce a couple of new third party modules — WEBP to JGP from Robin Sallis, and Recurring Dates Fieldtype by Eduardo San Miguel Garcia.

As always we'll also highlight a new site of the week, which this time belongs to the Wilster, Germany based event venue Kulturhaus Wilster. More details in just a bit, so keep on reading.

Thanks to all of our readers for being here with us again, and as always, any feedback is most welcome – please don't hesitate to drop us a line if there's anything in your mind you'd like to share with us. Enjoy our latest issue and have a great weekend!

Latest core updates and a weekly update from Ryan

As Ryan explains in his latest weekly update, published at the support forum, the core updates for this week are a mix of minor bug fixes, general core feature improvements, and various merged pull requests.

Here's a brief list of what's new in the dev branch this week:

  • Some minor issues were fixed, including ...
    • one where InputfieldSelect non-default language label for the optional "Please select" label was not properly translated,
    • another where uppercase characters were not allowed in URL segments with the UTF-8 page name setting, and
    • one where AdminThemeUikit was overriding user specified color theme for certain input elements.
  • Added support for $pages->find() and related operations for querying "count" for Repeater fields even if there are no rows in the field table yet, e.g. when a page has not been saved after a Repeater field was added.
  • Added support for new, optional "page-edit-redirects" permission, which enables non-superusers to manage page specific redirect URLs in the page editor.
  • Added some updates and improvements to the MarkupPagerNav core module, among other things resolving quirks that would occur in some edge cases.
  • Updates to the wireBytesStr() function, which among other things add support for terabytes, and the addition of a new strToBytes() helper function that does the opposite of wireBytesStr() converting human-readable string to bytes.

That's all for our core updates section this week. For more details, be sure to also check out the weekly update from Ryan, and feel free to browse the weekly commit log for the dev branch at GitHub. Thanks!

New module: WEBP to JPG

WEBP to JPG is a brand-new third party module developed by Robin Sallis. This module adds support for automatically converting WebP images — which are intended for web browser use only, and thus also not supported natively as a source format for ProcessWire's image fields — to JPG files on upload.

Using this module is straightforward:

  1. install the module,
  2. enable "webp" as one of the allowed file formats for a specific image field, and
  3. select the quality for WebP to JPG conversion in module config (default is 100).

Now every time a user uploads WebP image, it is automatically converted to JPG, and the WebP file is also automatically removed once the conversion is done.

If you'd like to give this module a try, you can install it via the built-in modules installer in admin, or clone or download it from the WebpToJpg GitHub repository. In case you have any questions or require additional support, head down to the WEBP to JPG support forum thread.

Thanks to Robin for developing this module and sharing it with us!

New module: Recurring Dates Fieldtype

Recurring Dates is a new fieldtype created by Eduardo San Miguel Garcia. As the name suggests, this fieldtype can be used to store and handle recurring dates. It is based on the php-rrule library, and conforms to the RFC 5545 (iCalendar) specification recurring rule logic. As usual there is also a dedicated Inputfield bundled with the Fieldtype.

This module was built as a replacement for an earlier recurring date handling module called Recurme, which is no longer officially supported. Recurring Dates fieldtype does not attempt to handle markup generation like Recurme did, but otherwise it should provide proper support for recurring dates.

A screenshot of the admin UI for Recurring Dates.

For more details about how this module works, how to query content when using it, etc. be sure to check out the README at the Fieldtype Recurring Dates GitHub repository. There's also a dedicated support forum in case you need any additional assistance.

Please note that this module is currently considered an alpha release, which means that extra caution is definitely recommended. We must recommend testing carefully before implementing it on a live site.

Big thanks to Eduardo for working on this module and sharing it with us — the module looks amazing and I for one can't wait to give it a proper try, it'll definitely come in handy for future projects. Keep up the great work!

Site of the week: Kulturhaus Wilster

Our latest site of the week belongs to an event venue based in Wilster, Germany — Kulturhaus Wilster.

This ProcessWire powered website was created by Stefan Thumann of Thumann Media, released back in January, and just recently introduced in a showcase forum thread at our support forum.

This site features a colorful and kind of old-school style design, matching very nicely the bold visual style of the Kulturhaus Wilster itself, as seen in their promo materials. The site is also very straightforward to browse, and the event calendar in particular is rather neatly implemented, with options for filtering events and all.

As for behind the scenes details, some of the third party ProcessWire modules used on this site, as detailed in the showcase forum post, include WireMail: SMTP, SEO Maestro, All in one Minify, and RockFrontend. Meanwhile, the front-end of the site is powered by version 4.6 of the Bootstrap front-end framework.

For more details about the implementation, as well as background information about both the project and Kulturhaus Wilster itself, be sure to also check out the showcase forum thread for this project.

Our congratulations to the client for their new website, and thanks to Stefan Thumann for sharing this project with us, as well as taking the time to introduce it in a showcase forum post — very nice work from everyone involved in this project!

Stay tuned for our next issue

That's all for the 461st issue of ProcessWire Weekly. We'll be back with more news, updates, and content Saturday, 18th of March. As always, ProcessWire newsletter subscribers will get our updates a few days later.

Thanks for staying with us, once again. Hope you've had a great and productive week, and don't forget to check out the ProcessWire forums for more interesting topics. Until next week, happy hacking with ProcessWire!

This post has 3 comments:

Szabesz on Saturday 18th of March 2023 8:13 am

Thanks Teppo, as always!
"Added support for $pages->find() and related operations for querying "count" for Repeater fields even if there are no rows in the field table yet, e.g. when a page has not been saved after a Repeater field was added."
Could you please clarify what you mean by "rows in the field table" in the context of Repeater fields?

teppo on Sunday 26th of March 2023 11:49 am

Hey Szabesz! Sorry for the late reply :)

By rows in the field table I mean rows in the field_repeater_field_name table, which holds references to the page containing the repeater page, the repeater items added for that page, number of items contained, and the ID of the parent (under admin) used by those repeater items.

Before this update a selector such as $pages->find('repeater_field_name.count=0') could only find pages that had the "repeater_field_name" field if said page had been saved at least once with the repeater field. In fact in my experience you had to add an item to the repeater field on the page, save the page, remove said item, and save the page again before the page would become a match.

Szabesz on Sunday 26th of March 2023 22:58 pm

Hi Teppo, Thanks for the clarification!

Post a comment