
By default, SilverStripe CMS uses Font Icons for menu, and at times, you would want to set your own custom SVG icons when there isn’t a sufficient icon and/or to be inline with your org brand guidelines. This article explains how can set those, in both cases — For use in CMS classes that extend ModelAdmin, and in the case of Elemental Blocks that extend BaseElement.
CMS Menu Custom Icon Setup
For CMS Menu (ModelAdmin), this is more straightforward, just set the image like so:
class ProgressBarModelAdmin extends ModelAdmin
{
private static $menu_icon = '/_resources/vendor/abc/abc-elemental-progress-bar/images/progress-bar-icon-white.svg';
}BaseElement Custom Icon Setup
As for Elemental Blocks that extend the BaseElement class, the only way to achieve that is via a CSS class. This is because, as per the API docs, you can only assign an Icon a CSS class.
Step 1 — Vendor expose Images and CSS
{
"extra": {
"expose": [
"images",
"css"
]
}Step 2 — Update Element Icon Class
class ProgressBarElement extends BaseElement {
private static $icon = 'progress-bar-icon';
}Step 3 — Add Custom CMS Stylesheet
Add ~/vendor/abc/abc-elemental-progress-bar/css/custom-cms-styles.css and then set the background image in CSS, and adjust spacing to get alignment right:
.progress-bar-icon {
background: url(/_resources/vendor/abc/abc-elemental-progress-bar/images/progress-bar-icon-grey.svg);
background-repeat: no-repeat;
background-position: 1rem;
background-size: 1.5rem;
padding-left: 3.75rem;
}Step 4 — Import Stylesheet in Module Config
In ~/vendor/abc/abc-elemental-progress-bar/_config/config.yml add:
SilverStripe\Admin\LeftAndMain:
extra_requirements_css:
_resources/vendor/abc/abc-elemental-progress-bar/css/custom-cms-styles.css
