[TYPO3-dev] How to add custom overlays to Backend sprite icons?
Dirk Wenzel
wenzel at webfox03.de
Sat Feb 28 13:14:40 CET 2015
Hi all,
I would like to add a custom overlay to record icons in Backend
reflecting a certain state of records.
What I achieved so far:
There is a hook called overrideIconOverlay in
TYPO3\CMS\Backend\Utility\IconUtility::mapRecordOverlayToSpriteIconName(...)
which allows to add a status.
I added my status field (is_duplicate) to the enablecolumns of its TCA:
$TCA['<tableName>']['ctrl‘]['enablecolumns'] = array(
'disabled' => 'hidden',
'starttime' => 'starttime',
'endtime' => 'endtime',
'is_duplicate' => 'is_duplicate'
);
implemented a hook method:
class IconUtilityHook {
/**
* Override Icon Overlay
* Sets a status which can be interpreted by the
* IconUtility for rendering an overlay
*
* @param \string $table
* @param \array $row
* @param \array $status
*/
public function overrideIconOverlay(&$table, &$row, &$status) {
if ((bool)$row['is_duplicate']) {
$status['isDuplicate'] = TRUE;
}
}
}
and registred it:
+$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_iconworks.php']['overrideIconOverlay']['<extensionName>']
= '<Vendor>\\<Package>\\Hooks\\IconUtilityHook';
Further I added a priority and name for the overlay
$GLOBALS['TBE_STYLES']['spriteIconApi']['spriteIconRecordOverlayPriorities'][]
= 'isDuplicate';
$GLOBALS['TBE_STYLES']['spriteIconApi']['spriteIconRecordOverlayNames']['isDuplicate']
= 'status-overlay-is-duplicate';
But it seems that the IconUtility does not provide a way to register an
image for this overlay. In its method getIcon(...) the default enable
fields are evaluated. If any is set IconUtility::makeIcon(...) is called
with a matching argument $mode. There is a switch which chooses the
matching icon file (for known states):
if ($mode) {
unset($ol_im);
switch ($mode) {
case 'deleted':
$ol_im = self::imagecreatefrom($GLOBALS['BACK_PATH'].
'gfx/overlay_deleted.gif');
break;
case 'futuretiming':
$ol_im = self::imagecreatefrom($GLOBALS['BACK_PATH'] .
'gfx/overlay_timing.gif');
break;
case 'timing': $ol_im = self::imagecreatefrom($GLOBALS['BACK_PATH'].
'gfx/overlay_timing.gif');
break;
case 'hiddentiming':
$ol_im = self::imagecreatefrom($GLOBALS['BACK_PATH'] .
'gfx/overlay_hidden_timing.gif');
break;
case 'no_icon_found':
$ol_im = self::imagecreatefrom($GLOBALS['BACK_PATH'] .
'gfx/overlay_no_icon_found.gif');
break;
case 'disabled': // is already greyed - nothing more
$ol_im = 0;
break;
case 'hidden':
default:
$ol_im = self::imagecreatefrom($GLOBALS['BACK_PATH'] .
'gfx/overlay_hidden.gif');
}
But there is no case for custom overlay icons. This results in
displaying my state with the no_icon_found overlay.
Did I miss something? Is there any way to register an overlay icon and
state?
Thanks in advance
Dirk
More information about the TYPO3-dev
mailing list