NSM Asset Rev plugin for Craft CMS 3.x
Asset Models
Rev Asset
model urls with date modified timestamps. Its simple… just call the
function and pass the asset and an optional transform., (*1)
Before:, (*2)
Template: {{ asset.url(transform) }}
Output: https://local.craft3/uploads/biggie.jpg
After:, (*3)
Template: {{ nsm_rev_asset_url(asset, transform) }}
Output: https://local.craft3/uploads/biggie.1496670969.jpg
Manifest Files
Additionally NSM Asset Rev can check a manifest file for urls and return the
marching revved url., (*4)
Manifest:, (*5)
{ "app.css": "app.1e9915c1398b2ba2fcc2.css" }
Before:, (*6)
Template: {{ url(app.css) }}
Output: https://local.craft3/app.css
After:, (*7)
Template: {{ nsm_rev_manifest_url('app.css') }}
Output: https://local.craft3/app.1e9915c1398b2ba2fcc2.css
Manifest files will most likely be created from a build process., (*8)
Here's some examples:, (*9)
Note: NSM Asset Rev only supports one level key: value pairs., (*10)
Installation
Step 1: Download the Bundle
Open a command console, enter your project directory and execute the
following command to download the latest stable version of this bundle:, (*11)
$ composer require newism/craft3-asset-rev
This command requires you to have Composer installed globally, as explained
in the installation chapter
of the Composer documentation., (*12)
Step 2: Install
Install plugin in the Craft Control Panel under Settings > Plugins., (*13)
Usage
Twig template functions
This plugin provides two twig functions., (*14)
Asset Models
{{ nsm_rev_asset_url(asset, transform) }}
Manifest Files
{{ nsm_rev_manifest_url(url) }}
Helper
There's actually three twig functions :). The third is a helper that either calls
nsm_rev_asset_url
or nsm_rev_manifest_url
based on the arguments., (*15)
If the first argument is an Assetl
then nsm_rev_asset_url
will be called
internally:, (*16)
Template: {{ nsm_rev_url(asset, transform) }}
Output: https://local.craft3/uploads/biggie.1496670969.jpg
If the first argument is an string
model then nsm_rev_manifest_url
will be called
internally:, (*17)
Template: {{ nsm_rev_url('app.css') }}
Output: https://local.craft3/app.1e9915c1398b2ba2fcc2.css
Server Configuration
Important: This plugin doesn't actually change the the filename on the server.
You'll need to implement rewrite rules in your apache conf or nginx access., (*18)
Apache
See: https://github.com/h5bp/server-configs-apache/blob/master/dist/.htaccess#L968-L984, (*19)
# ----------------------------------------------------------------------
# | Filename-based cache busting |
# ----------------------------------------------------------------------
# If you're not using a build process to manage your filename version
# revving, you might want to consider enabling the following directives
# to route all requests such as `/style.12345.css` to `/style.css`.
#
# To understand why this is important and even a better solution than
# using something like `*.css?v231`, please see:
# http://www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/
# <IfModule mod_rewrite.c>
# RewriteEngine On
# RewriteCond %{REQUEST_FILENAME} !-f
# RewriteRule ^(.+)\.(\d+)\.(bmp|css|cur|gif|ico|jpe?g|js|png|svgz?|webp|webmanifest)$ $1.$3 [L]
# </IfModule>
NGINX
See: https://github.com/h5bp/server-configs-nginx/blob/master/h5bp/location/cache-busting.conf#L1-L10, (*20)
# Built-in filename-based cache busting
# This will route all requests for /css/style.20120716.css to /css/style.css
# Read also this: github.com/h5bp/html5-boilerplate/wiki/cachebusting
# This is not included by default, because it'd be better if you use the build
# script to manage the file names.
location ~* (.+)\.(?:\d+)\.(bmp|css|cur|gif|ico|jpe?g|js|png|svgz?|webp|webmanifest)$ {
try_files $uri $1.$2;
}
Plugin Configuration
See ./src/config.php., (*21)
Road Map
Some things to do, and ideas for potential features:, (*22)
1.0
Future
Credits
Brought to you by Newism, (*23)
, (*24)