2017-08-04 4 views
0

Ich versuche, dem dce-image für weitere Aktionen eine zusätzliche Quelle hinzuzufügen, z. eine alternative Quelle, um einige JavaScript-Aktionen auszuführen.Fügen Sie zusätzliche Bildquelle für weitere Aktionen hinzu.

Die gewünschte Ausgabe sollte wie folgt aussehen:

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

Das Problem ist die dce ich verwende - seine Iterieren durch die „Bilder“ wie folgt aus:

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

Also, wenn ich würde füge mehrere Bilder hinzu. Ich habe keine wirkliche Beziehung zwischen den Bildern, wo ich weiß, welche die normale Quelle ist und welche die alternative Quelle ist.

So gab es die Möglichkeit, einen Abschnitt zu erstellen und zwei Felder für Bilder hinzuzufügen, die wir auf ein Bild pro Feld beschränken können. Aber da ist wieder die For-Schleife, die es mir nicht erlaubt, auf die Quelle des zweiten Bildes für das erste Bild zuzugreifen.

Es sollte eine sichtbare Beziehung zwischen diesen Bildern für den Benutzer sein, der mit dem dce arbeitet.

Im Versuch, so etwas zu erreichen:

<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> 

Eine weitere Idee zuerst durch die abwechselnden Bilder zu wiederholen wäre und sie in ein Array speichern und auf den Hauptbild auf sich zuzugreifen, aber ich habe keine Ahnung, Wenn dies auch möglich ist, wird dies die Benutzerfreundlichkeit der dce für den Benutzer einschränken.

Gibt es eine Möglichkeit, dies mit dce-fluid zu erreichen?

Vielen Dank im Voraus

Antwort

1

Nun, ich denke, Sie könnten die Tabelle sys_file_reference erweitern, um eine Beziehung von dort hinzuzufügen. Sie hätten also verschachtelte Relationen (nie gemacht, also müssten Sie es versuchen).

Sie müssten auch das Feld zum Tca-Typ an der Stelle hinzufügen, an der Sie es brauchen, das könnte ein wenig schwierig sein. Schauen Sie sich Tca types overrides an.

Sie könnten die Tabelle sys_file_reference um ein Feld "alternative_reference" erweitern und das erforderliche TCA-Setup hinzufügen. Dann müssten Sie die FileReferences über das FileRepository abrufen und sys_file_reference als Fremdtabelle verwenden (und natürlich die ID sys_file_reference als Kennung). Die andere Möglichkeit wäre ein komplett neuer Datensatz mit 2 verschiedenen sys_file_reference-Beziehungen.

Dieser Datensatz (z. B. tx_ext_domain_model_imageset) würde ein image_default- und image_alternate-Feld haben, beide würden als file_relations konfiguriert werden. Das würde sicher funktionieren.

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

Ich nehme an, Sie haben Wissen über das Erstellen von Datensätzen, Modellen, Tca und so weiter.

Ich persönlich würde die zweite Möglichkeit bevorzugen, ist es sauberer und ändert nicht die Kern-Tabelle Strukturen.

Auch gibt es eine zweite Bilderzeugung View Helfer, das könnte besser auf Ihre Bedürfnisse

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

Aber der beste Weg Suite sein könnte zu gehen, um Ihre eigene View Helfer zu diesem Zweck zu schreiben. Sie könnten Ihr Objekt (ImageSet) als Parameter übergeben und dort alle Logik verarbeiten. Ihre Vorlage wäre einfacher und einfacher zu lesen/zu bearbeiten.

+0

Also ich nehme an (wie du schon sagtest) es wäre der beste Weg meinen eigenen ViewHelper zu erstellen, den ich in der fluid-template (dce) verwende. Auch ich muss Veränderungen im Kern vermeiden. Dies könnte die richtige Antwort sein. Ich habe mehr darüber gelesen. Vielen Dank. – Slatyoo

1

Sie haben Daten verwenden Attribute Fluid View Helfer und dann die uri des Bildes mit Inline-Anruf zu erhalten. Hier ist, wie Sie erreichen:

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

Dies sollte die Arbeit tun.

+0

Wenn ich das richtig verstehe, wird dies die Quelle des gleichen img hinzufügen, so src entspricht data-altesrc. Das wollte ich nicht erreichen. Mein Ziel war es, die Quelle des zweiten Bildes als Daten auf dem ersten Bild hinzuzufügen. Korrigiere mich, wenn ich das falsch verstehe. Vielen Dank. – Slatyoo

Verwandte Themen