[Frage] Daten an f:Object übergeben TYPO3-Version: 9.5.8

  • griebie griebie
    R2-D2
    0 x
    90 Beiträge
    0 Hilfreiche Beiträge
    19. 08. 2019, 12:48

    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:
    [code]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}
    }
    }
    }
    }
    }
    [/code]

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

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

    In diesem lib.pageIcon
    [code]lib.pageIcon = SVG
    lib.pageIcon {
    renderMode = inline
    src = |
    width = 100
    height = 100
    }
    [/code]

    kommt aber nichts an. Wenn ich mit
    [code]<f:debug>{item}</f:debug>[/code]
    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!


  • 1
  • Teisinger Teisinger
    Jedi-Meister
    0 x
    381 Beiträge
    26 Hilfreiche Beiträge
    19. 08. 2019, 16:26

    hmm wusste gar nicht das man in TypoScript SVGs machen kann...
    Ich hab nen ViewHelper dafür:
    [code][code]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;
    }
    }
    }
    }
    [/code]
    [/code]

    https://github.com/groundstack-org

  • griebie griebie
    R2-D2
    0 x
    90 Beiträge
    0 Hilfreiche Beiträge
    20. 08. 2019, 11:28

    Danke!

    Den werde ich im Team mal vorschlagen, aber mein ursprünglicher Ansatz wäre die Verwendung des Core Objektes SVG gewesen, s. https://docs.typo3.org/m/typo3/reference-typoscript/master/en-us/ContentObjects/Svg/Index.html

    Sollte ich das damit nicht hinbekommen, mag Dein ViewHelper aber die Lösung sein ...

  • 1