Introduction
Craft 3.4 beta, Craft 2.8, tips, plugins, and more.
Let’s wrap up 2019 with another collection of Craft links. We’ve got the arrival of Craft 3.4 beta and plenty more.
Regarding 2020, Craft Link List is changing publication days. Instead of the 1st and 15th of every month, the 1st and 3rd Tuesday of the month is when you can expect new issues. The new schedule prevents a newsletter from landing in your inbox during a weekend like this one just did. That means the next CLL will publish on Tuesday, January 7. As always, if you’ve got a Craft-related link to share, visit the submit page.
Thank you to the sponsors of this issue.
Blitz 3 is out now, and it’s a significant update. Even better, it has no breaking changes in upgrading from Blitz 2. Use your Craft skills and embrace the JAMStack at the same time.
Solspace is growing and you might be the perfect fit to join the team. Check out the job listing and start the new year with a new job.
See you in 2020. Let's hit the links.
-John Morton
Top Stories
Craft 3.4 Beta is Here
Craft 3.4 Beta features a redesigned control panel (with eye candy) and the ability to track changes on draft entries. Check out the changelog for the full list of updates.
News
Craft 2.8 released with PHP 7.4 support
Craft 2 has been updated to support PHP 7.4. Before you update, be aware that version 2.8 now requires PHP 5.5 or later.
ExpressionEngine vs. Craft CMS usage statistics, December 2019
This report shows the usage statistics of ExpressionEngine vs. Craft CMS. Click the link and check out the Historical trend chart. The trend lines tell the story.
Proddys Winners 2019 - Craft CMS: Best Website Builder Product
The Proddys are ”the awards that honor the best products of the year and the companies who make them.“ Craft CMS came out on top in 2019 in the Best Website Builder category.
New Localization Category in the Craft Plugin Store
The ability to localize content is an excellent feature of Craft. As the platform matures, more plugins are focused on localization. It’s now easier to find those resources in the plugin store with the new "localization" category.
Imarc engineers at the forefront of development
Dot All reactions are still coming in. This post is from Imarc.
This year, three Imarc engineers embarked on a road trip to Montreal for Pixel & Tonic’s Dot All 2019 conference. Read on for the inside scoop on what’s new in the development world.
Featured Sponsor

Blitz 3 – Embracing the JAMstack
Blitz 3 brings innovations and features that empower you to be the Jedi developer that you are. Build bat-out-of-hell-fast sites using Twig and your favourite Craft plugins, serving them from edge CDNs with continuous deployment. Read the official announcement and update today!!
Tools, tips, and fundamentals
How to access custom setting in any Twig template
Piotr has two quick Craft tips to share. The first shows how to access settings in your config/general.php
from within your Twig templates.
Organizing your custom settings
Piotr’s second Craft tip shows how to use an array to keep your custom settings clearly separated from built-in settings. See the link for a screenshot.
Execute ./craft via cron
You might want to run ./craft
commands in a cron job, for example, to perform regular backups. This StackExchange post discusses some tips that may help you to get this working.
How to handle incorrect password / credentials in a login modal
There have been several instances recently mentioned in Discord about wanting to log in users from the front end using ajax. This Stack Exchange post has some helpful code examples. Craft 2 is referenced, but the Craft 3 version should be similar.
How to read a WebPageTest waterfall chart
Andrew found and shared this post on "how to decipher the reports from WebPageTest."
Use Twig logic to conditionally transform large images
Piotr has a handy tip (#3!) on how to use a Twig ternary operator in a transform settings array to only transform images that actually need transforming.
Protect your Craft CMS & plugin licenses with .env ⭐️
Andrew shared a VERY IMPORTANT TIP™ about best practices for keeping your secrets, like license keys, out of git repositories. Use your .env
file.
How Craft License Enforcement Works | Craft CMS
Speaking of licenses, have you wondered how license enforcement works? Craft has posted an article on the topic.
Perfecting your technique
Email footer creator made with Craft CMS | Craft Snippets
By using just Twig templates, we can create a simple app that generates HTML code from user-provided content. In addition to the post, there's a demo page to see this in action.
Using incognito field plugin for Craft CMS | Craft Snippets
Incognito field is a plugin that allows you to create fields that are hidden from users or blocked from editing. Such fields can be used to store data generated by custom modules, just as regular fields store user-generated content.
An even better Imager macro for Craft CMS ∖ Sten Van den Bergh
As you read the article, you'll also want to check out the code for this macro in this Gist.
Can't install Craft on MySQL 8?
If you've installed MySQL 8 and then tried to install Craft, you might run into this error:
The server requested authentication method unknown to the client
As Brad mentions in this Github issue, this is because "MySQL 8.0.4 changed the default password authentication to a new format that's incompatible with previous formats." See this link for more details.
Dynamic Title Formats
David Hellmann discusses why you might want dynamic titles to your entries and how to do it. In a follow-up Tweet about this method, the Craft team pointed out that "dynamic titles are generated whenever the entry is saved" and this causes only "minor additional overhead."
Sponsor

Now Hiring: Software Plugin Developer
The Solspace team is expanding! If you’re looking for an exciting full-time position working on Freeform and Calendar plugins for Craft and more, we’d love to hear from you! Check out our job listing for more details.
Plugged In
OS Maps
This plugin provides everything you need in order to display Ordnance Survey maps on your website.
Propagated Sites Field
This field type plugin allows the selection of Craft sites and propagates the entries to the selected sites.
Translations admin
This plugin adds a control panel interface for your clients to edit static translations for each language side by side. You may filter those missing a translation and search by keywords.
Document Search
This plugin was mentioned back in Issue 84. It extracts keywords and phrases from PDF documents and adds them to Craft CMS's native search index. It was a paid plugin that has now gone free.
The Craft Advantage
Yii, Twig, PHP & More
Key Concepts: Events | The Definitive Guide to Yii 2.0
This page from the Yii docs goes into great detail about Yii's events.
PHP | Namespace - GeeksforGeeks
"PHP Namespaces are the way of encapsulating items so that same names can be reused without name conflicts."
Overheard
devMode.fm // Handling Developer Burnout ⭐️
This might be the most important episode of the devMode podcast. Highly recommended.
It’s not Craft, but it’s interesting.
Questions before starting work
This Tweet claims to be a tip for freelancers, but if you ever have to scope out a project, it applies to you.
Bureau Standard Agreement for Digital Services — Bureau of Digital
The Bureau Standard Form of Agreement for Digital Services... provide[s] a solid foundation to help digital agencies build trust, accelerate negotiations, and go from proposal to deposit more quickly.
DB
Version control for databases: save, restore, and archive snapshots of your database from the command line
Responsive Image Breakpoints Generator by Cloudinary
Easily generate optimal responsive image dimensions.