TYPO3 Создание изображений в разных размерах - PullRequest
0 голосов
/ 31 марта 2020

У меня есть эта реализация, использующая ее в подменю уровня 2 страницы. Каждое меню уровня 2 имеет несколько подстраниц. Каждая подстраница имеет одно изображение. Таким образом, эта реализация создает изображение с каждой страницы для каждого подменю. Например, подменю с 2 подстраницами будет иметь 2 изображения (по одному на каждой подстранице).

1 = FILES
1 {
    references {
        table = pages
        fieldName = media
        data = levelmedia:-1, slide
    }

    begin = 0
    maxItems = 2

    renderObj = COA
    renderObj {
        2 = IMAGE
        2 {
            file {
                //params = -sharpen 50  +profile "*" -quality 100
                import.data = file:current:uid
                treatIdAsReference = 1
                width.optionSplit = 300c|*|400c
                height.optionSplit = 350c|*|450c
            }
        }
    }
}

Хотелось бы, чтобы изображения обрезались в разных размерах, чтобы изображение 1 было обрезано по размерам по сравнению с изображением 2 и и так далее.

Моя установка ImageMagick работает отлично. На самом деле я обрезаю отдельные изображения с ним без заминки.

Без optionSplit выше, изображения обрезаются до нужного размера. К сожалению, с optionSplit он просто выводит изображения в их исходных размерах.

Как можно получить изображения разных размеров? Насколько я понимаю, optionSplit - это путь к go (из руководств). Я читал в статьях, которые soureCollection для адаптивных изображений используют optionSplit. Я полагаю, что другим способом было бы использовать счетчик регистров изображений и использовать CASE, чтобы определить, как вырезать изображения 1, 2, 3 и т. Д., Но я не знаком со счетчиками регистров (возможно, кто-то может показать мне, как это сделать?). И еще одним способом было бы использовать индексный номер файла / изображения, но я часами пытался смотреть в руководствах для такого указателя, и нигде его нет в списке, если есть какие-либо, чтобы помочь с обработкой. Кто-нибудь знает способ сделать это?

Ответы [ 2 ]

1 голос
/ 01 апреля 2020

рендеринг двух последовательных изображений с разными параметрами будет затруднен при опечатке:
ваш опционный раздел не может быть успешным, так как в renderObj у вас всегда есть только один файл. Плохая привычка всех renderObj.

с другой стороны: нет собственности optionSplit. функциональность встроена в любое свойство обтекания.

, поэтому обработка в typoscript может заключаться в объединении элементов, затем разделении их снова, но затем использовании различных опций в split renderObj для обработки его отдельно.
или реализовать счетчик с переменной регистра, а затем вычислить регистр для установки различных значений.

проще было бы работать с текучей средой, где можно использовать итератор с представлением f:for, а затем выполнить f:if (для двух случаев) или f:switch (для дополнительных случаев) на {iterator.index} для отображения отдельных версий.

0 голосов
/ 01 апреля 2020

Основываясь на ответе @Bernd на том факте, что каждая страница (как элемент) доставляется как объект за TMENU с в каждой итерации, можно добиться такой визуализации изображения одним из двух способов:

Во-первых, с помощью двух записей в регистре register:count_menuItems, который содержит общее количество элементов, которые вы будете обрабатывать; и register:count_MENUOBJ, который содержит индекс текущего элемента, который повторяется (начинается с 1). Эти два можно использовать вместе с оператором CASE для тщательной обработки каждого изображения по своему вкусу. Если на странице есть несколько изображений, можно использовать еще два элемента регистра: register:FILES_COUNT (отсчет начинается с 0) и register:FILES_NUM_CURRENT. Нет необходимости в реализации счетчика реестра, так как эти записи реестра сами по себе, счетчики.

Во-вторых, есть гораздо более простой способ, гораздо менее трудоемкий, который использует перенос, как объяснено @Bernd, следующим образом;

NO = 1
NO {
    1 = LOAD_REGISTER
    1 {
        width.cObject = TEXT
        width.cObject.stdWrap.wrap = 100c||200c

        height.cObject = TEXT
        height.cObject.stdWrap.wrap = 300c||400c
    }

    2 = FILES
    2 {
        # Get the images related to the current page
        references {
            table = pages
            fieldName = media
        }
        # Render each image and wrap it as appropriate
        renderObj = IMG_RESOURCE
        renderObj {
            file {
                treatIdAsReference = 1
                import.data = file:current:uid
                width = {REGISTER:width}
                width.insertData = 1
                height = {REGISTER:height}
                height.insertData = 1
            }
        }
        stdWrap {
            wrap = <img src="|"  />
        }
    }
}

Как видите, этот код используется в TMENU и обрабатывает каждое изображение на основе различных правил, определенных в сегменте 1 и сохраняемых LOAD_REGISTER. Хитрость в обертках. stdWrap wrap уже содержит optionSplit. Таким образом, сохраняя нужный шаблон, stdWrap будет обрабатывать правильное значение, которое будет сохраняться для каждой итерации.

Это сработало для меня. Надеюсь, это кому-нибудь поможет.

...