Zum Inhalt springen

Daten an f:Object übergeben

Erstellt am 19. August 2019 · 2 Antworten · letzte Antwort am 20. August 2019

Tags: Fluid, ViewHelper, TYPO3 9, Frage

griebie ·

Moin in die Runde!

Ich möchte, dass die Redakteure in den Seiteneigenschaften ein SVG-Bild hochladen können, welches ich je nach Ausgabemedium mit CSS stylen kann. Deswegen möchte ich mit TypoScript ein inline-SVG ausgeben.

Zunächst habe ich den MenuDataProcessor bemüht:

page.10.dataProcessing {
  20 = TYPO3\CMS\Frontend\DataProcessing\MenuProcessor
  20 {
    entryLevel = 1
    levels = 1
    expandAll = 1
    includeSpacer = 0
    as = menuCustomersArea
    dataProcessing {
      10 = TYPO3\CMS\Frontend\DataProcessing\FilesProcessor
      10 {
        references.fieldName = media
        as = icon
        if {
          isTrue = {$page.theme.menuCustomersArea.icon.enable}
        }
      }
    }
  }
}

In meinem Fluid-Partial gebe ich folgendes an, um das TypoScript zu laden:

<f:cObject typoscriptObjectPath="lib.pageIcon" data="{item.icon.0.originalFile.storage.configuration.basePath}{item.icon.0.originalFile.identifier}"/>

In diesem lib.pageIcon

lib.pageIcon = SVG
lib.pageIcon {
    renderMode = inline
    src = |
    width = 100
    height = 100
  }

kommt aber nichts an. Wenn ich mit

<f:debug>{item}</f:debug>

die Ausgabe anschaue, müssten die oben angegebenen Pfade aber stimmen. Aber ist es überhaupt möglich, die Info mit f:cObject weiterzugeben - wenn ja, wie könnte es klappen?

Danke für Eure Info vorab!

Teisinger ·

hmm wusste gar nicht das man in TypoScript SVGs machen kann...
Ich hab nen ViewHelper dafür:

class SvgSourceToInlineViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper {

    public function initializeArguments() {
        $this->registerArgument('src', 'string', 'path to svg file', true);
    }

        /**
     * @param array $arguments
     * @param \Closure $renderChildrenClosure
     * @param RenderingContextInterface $renderingContext
     *
     * @return string
     */
    public static function renderStatic(array $arguments, \Closure $renderChildrenClosure, RenderingContextInterface $renderingContext) {
        $extensions= array("svg");

        if (file_exists($arguments['src'])) {
            $file_ext = strtolower(end(explode('.', $arguments['src'])));
            if(in_array($file_ext, $extensions) === true) {
                $svg_file = file_get_contents($arguments['src']);
                $find_string = '<svg';
                $position = strpos($svg_file, $find_string);
                $svg_file_new = substr($svg_file, $position);

                return $svg_file_new;
            }
        }
    }
}