SVG Background Patterns

André
5 Apr 22
Create Hero Patterns in Statamic
To create background patterns from an svg like https://heropatterns.com/ I made a custom tag for statamic.
How it's used:
template.antlers.html
html
<div
class="w-full bg-repeat"
style="{{ bg_pattern src='arrow-pattern' }}">
<!-- Content goes here -->
</div>
The svg file is stored in /resources/svg/arrow-pattern.svg
Custom Tag
This is the custom tag code. It is copied from the original svg tag form statamic. To generate a Tag class you can follow these instructions.
app/Tags/BgPattern.php
php
<?php
namespace App\Tags;
use Statamic\Tags\Tags;
use Statamic\Facades\File;
use Statamic\Facades\URL;
use Statamic\Support\Str;
use Stringy\StaticStringy;
class BgPattern extends Tags
{
public function wildcard($src)
{
$this->params['src'] = $src;
return $this->index();
}
public function index()
{
$name = Str::ensureRight($this->params->get('src'), '.svg');
$cascade = [
resource_path('svg'),
resource_path(),
public_path('svg'),
public_path(),
];
$svg = null;
foreach ($cascade as $location) {
$file = Url::assemble($location, $name);
if (File::exists($file)) {
$svg = StaticStringy::collapseWhitespace(
File::get($file)
);
break;
}
}
return "background-image:url('data:image/svg+xml,".rawurlencode($svg)."');";
}
}