Viewhelper: File exsits.
Anwendnung
Angabe des Namesspaces im Fluid Template:
{namespace fhs=Fischhase\FhViewhelpers\ViewHelpers}
Dann kann derViewhelper aufgerufen werden:
{fhs:fileexists(path:path, file:filename)}
path (String): absoluter Pfad, in dem die Daten liegt (fileadmin/theme/light/images/)
file (String): Dateiname, der geprüft werden soll.
return: Gibt FALSE aus, wenn die Datei nicht vorhanden ist oder den geprüften Pfad+Dateinamen zur Weiterverwendung
Der Pfad kann Schrägstriche am Anfang enthalten oder nicht. Der Viewhelper rückt es gerade und gibt den korrekten Pfad zurück.
Beispiel:
<f:variable name="file" value="icon_{category.description}.svg" /> <f:variable name="path" value="/fileadmin/theme/light/images/" /> <f:variable name="verifiedPath"><fhs:fileexists file="{file}" path="{path}"/></f:variable> <f:if condition="{verifiedPath}"> <f:then> <img src="{verifiedPath}" alt="{category.title}" width="360c" height="360c" /> </f:then> <f:else> <div style="color:red; border:1px solid red; padding:0.5rem"> kein Icon zu Kategorie {category.uid} gefunden. Dateinamensegment muss in der Beschreibung stehen.<br /> </f:else> </f:if>
<?php namespace Fischhase\FhViewhelpers\ViewHelpers; use TYPO3\CMS\Core\Core\Environment; use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper; use TYPO3\CMS\Extbase\Utility\DebuggerUtility; /* * {namespace fhs=Fischhase\FhViewhelpers\ViewHelpers} * * {fhs:fileexists(path:path, file:filename)} * the viewhelpers checks, if the path and filenames have the correct slashes. It returns the checked path/filename as string or FALSE, if the file does not exist. */ class FileexistsViewHelper extends AbstractViewHelper { /** * @params string $path (path) * @params string $file (filename) * @return bool/string (FALSE or path/filename) */ public function initializeArguments() { $this->registerArgument('path', 'string', 'path of file', TRUE); $this->registerArgument('file', 'string', 'name of file', TRUE); } public function render() { $path = $this->arguments['path']; $file = $this->arguments['file']; $return = FALSE; /* checks slashes and adds missing*/ if ($path) { if (mb_substr($path, 0, 1) != '/') { $path = '/' . $path; } if (mb_substr($path, -1) != '/') { $path = $path . '/'; } }; if ($file) { /* checks slashes and removes excess slashes */ if (mb_substr($file, 0, 1) == '/') { $file = mb_substr($file, 1); } } /* get web root path */ $root = Environment::getPublicPath(); /*assemble full path */ $fullpath = $root . $path . $file; if (file_exists($fullpath)) { /*returns path from web root */ $return = $path . $file; } /*retunrs false if file does not exist */ return $return; } }