Добавить дополнительный источник в изображение для дальнейших действий

Я пытаюсь добавить дополнительный источник в dce-образ для дальнейших действий, например, альтернативный источник для выполнения некоторых действий JavaScript.

Требуемый результат должен выглядеть следующим образом:

<img src="path/to/foo.png" data-altsrc="path/to/bar.png">

Проблема в том, что dce, который я использую, выполняет итерацию "изображений" следующим образом:

<f:for each="{dce:fal(field:'image', contentObject:contentObject)}" as="fileReference">
    <f:image src="{fileReference.uid}" treatIdAsReference="1" />
</f:for>

Поэтому, если бы я вставил несколько изображений в это, у меня нет реальной связи между изображениями, где я знаю, какой из них является нормальным источником, а какой - альтернативным источником.

Таким образом, появилась возможность создать раздел и добавить два поля для изображений, которые мы можем ограничить одним изображением на поле. Но опять-таки есть цикл for, который не позволяет мне получить доступ к источнику второго изображения для первого изображения.

Должно быть видимое отношение между этими изображениями для пользователя, который работает с dce.

Я пытаюсь достичь чего-то вроде этого:

<f:for each="{field.images}" as="images">
    <!-- want to achieve something like this -->
    <f:image image="{images.foo.src}" data-altsrc="{images.bar.src}">

    <!-- thats the normal way iterating through images -->
    <f:for each="{images.foo}" as="image">
        <f:image image="{image}" />
    </f:for>
</f:for>

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

Есть ли способ достичь этого с помощью жидкости?

заранее спасибо

2 ответа

Решение

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

Вы также должны добавить поле к типу tca в нужном вам месте, что может быть немного сложнее. Посмотрите на переопределения типов Tca.

Вы можете расширить таблицу sys_file_reference с помощью поля "alternative_reference" и добавить необходимые настройки TCA. Затем вам нужно будет извлечь FileReferences через FileRepository и использовать sys_file_reference в качестве внешней таблицы (и, конечно, sys_file_reference uid в качестве идентификатора).

FileRepository::findByRelation(
    'sys_file_reference',
    'alternative_reference',
    $uidOfActualSysFileReferenceRecord
);

Другой возможностью будет совершенно новая запись с двумя различными отношениями sys_file_reference. Эта запись (например, tx_ext_domain_model_imageset) будет иметь поля image_default и image_alternate, оба будут настроены как file_relations. Это будет работать наверняка.

$defaultImages = FileRepository::findByRelation(
    'tx_ext_domain_model_imageset',
    'image_default',
    $uidOfRecord
);
$alternativeImages = FileRepository::findByRelation(
    'tx_ext_domain_model_imageset',
    'image_alternative',
    $uidOfRecord
);

Я предполагаю, что у вас есть знания о создании записей, моделей, TCA и так далее.

Лично я предпочел бы второй способ, он более чистый и не меняет структуры таблицы ядра.

Также есть второе окно просмотра изображений, которое может лучше удовлетворить ваши потребности.

<img src="{f:uri.image()}" data-altsrc="{f:uri.image()}" />

Но лучший способ - написать собственный ViewHelper для этой цели. Вы можете передать свой Object (ImageSet) в качестве параметра и обработать всю логику там. Таким образом, ваш шаблон будет проще и проще для чтения / работы.

Вы должны использовать атрибут данных Fluid Viewhelper, а затем получить URI изображения с помощью встроенного вызова. Вот как это сделать:

 <f:image src="{fileReference.uid}" data="{altsrc: '{f:uri.image(src: \'{fileReference.uid}\', treatIdAsReference: 1}" treatIdAsReference="1"/>

Это должно сделать работу.

Другие вопросы по тегам