In unserem Beispiel haben wir ein eigenes CKEditor Plugin geschrieben, das den Redakteuren erlaubt, SVG-Grafiken in den RTE einzufügen. Da die Redaktion diese Grafiken selbst aktualisieren und erweitern können sollen, werden diese aus einem (bzw. mehrere) Ordern im fileadmin ausgelesen. Den serverseitigen Teil dieses AJAX-Requests haben wir über eID gelöst.
Registrieren eines eID Scripts geht nach wie vor ganz einfach in der ext_localconf.php in eurem Sitepackage:
<?php
defined('TYPO3_MODE') || die();
call_user_func(
function () {
/**
* eID to get icons from path in CKeditor in2iconinsert plugin (Example call: ?eID=geticonsfrompath)
*/
$GLOBALS['TYPO3_CONF_VARS']['FE']['eID_include']['geticonsfrompath'] =
\In2code\In2template\Eid\GetIconsFromPath::class;
}
);
Das passende eID Script kann dann beispielsweise so oder so ähnlich aussehen und soll die benötigen Informationen im JSON-Format zurückliefern:
<?php
declare(strict_types=1);
namespace In2code\In2template\Eid;
use In2code\In2template\Utility\ArrayUtility;
use Psr\Http\Message\ResponseInterface;
use TYPO3\CMS\Core\Http\JsonResponse;
use TYPO3\CMS\Core\Utility\GeneralUtility;
/**
* Class GetIconsFromPath
*/
class GetIconsFromPath
{
/**
* @var array
*/
protected $pathPerType = [
'icon' => 'fileadmin/IconsRte/Icons/',
'disturber' => 'fileadmin/IconsRte/Disturber/',
'signet' => 'fileadmin/IconsRte/Signets/'
];
/**
* @var array
*/
protected $allowedFileTypes = [
'svg'
];
/**
* @return ResponseInterface
*/
public function __invoke(): ResponseInterface
{
$files = GeneralUtility::getFilesInDir(
$this->getPath(),
$this->getAllowedFileTypes(),
true
);
$files = ArrayUtility::prependArrayValue('/', $files);
return GeneralUtility::makeInstance(JsonResponse::class, array_values($files));
}
/**
* @return string
*/
protected function getPath()
{
$type = GeneralUtility::_GP('type');
if ($type !== '' && array_key_exists($type, $this->pathPerType)) {
return $this->pathPerType[$type];
}
throw new \LogicException('No valid type given', 1562673364);
}
/**
* @return string
*/
protected function getAllowedFileTypes()
{
return implode(',', $this->allowedFileTypes);
}
}
Hinweis: Das CKEditor-Plugin oder die Funktion ArrayUtility::prependArrayValue() sind nicht Teil dieses Beispiels, um den Code nicht unnötig aufzublasen.