Joomla 5 Notice

We are pleased to announce that as of January 29, 2024, all of our Joomla extensions are compatible with Joomla 5.

For all who are still updateing from Joomla 3 to Joomla 4: Joomla 4 Migration instructions are available here:

There is now a separate Documentation for Visforms for Joomla 4 and for Visforms for Joomla 5!

Forum

Visforms Subscription user can ask questions in our forum. Please log in with the relevant user first.
Everybody can access the forum for reading.

Please only ask 1 question per topic.

Important information for almost every question:
V1: Which Visforms version is running?
V2: Which Joomla version is running?
V3: Which PHP version is running?

anzeigen von bereits hochgeladenen Bilddateien im Formular

More
3 months 2 weeks ago #10610 by MaliRaj
Hallo Aicha, Hallo Ingmar,
gerne würde ich einige Bilder, die bereits hochgeladen wurden, im Formular anzeigen lassen. Möglichst sogar mit Auswahlmöglichkeit. Die Bildauswahl soll abhängig sein von bereits gemachten Angaben im Formular. Ich stelle mir das so ähnlich wie eine ListboxSQL vor. Pfad/Dateiname aus den passenden Upload-Feldern mit SQL ermitteln und anzeigen. Diesen dann mit JavaScript in ein img-Tag umwandeln. Auswahl mit Klick auf eines dieser Bilder.
Wie kann das realisiert werden? Feldtyp 'BildListboxSQL' !? 

Freundliche Grüße aus PM
Heinz
(Joomla 5.1.2 / Visforms+Subscription 5.12 / PHP 8.2)

More
3 months 1 week ago #10648 by Administrator IV
Replied by Administrator IV on topic anzeigen von bereits hochgeladenen Bilddateien im Formular
Hallo Heinz,

Ich würde eine Lösung angehen mit
- einer (eher) unsichtbaren SQL-Listbox,
- den FEWA und
- einer JavaScript-basierten Selektion.

Die SQL-Listbox:
- ermittelt die (vorzugsweise rohen) Feld-Werte aus den gewünschten Upload-Feldern.
- ist im Formular selbst (eher) nicht zu sehen.

FEWA:
- JavaScript ermittelt aus den Feld-Werten der Upload-Felder (also die Optionen in der SQL-Listbox) die finalen Bild-URLs.
  Die rohen Feld-Werte haben das folgende JSON-Format:
  {"folder":"tmp","file":"newbooks-test-one_61f13936a1ad2.csv"}
- JavaScript erzeugt dynamisch ein passendes geeignetes HTML und schreibt die finalen Bild-URLs hinein.
- CSS formatiert das Ganze passend.
- JavaScript kümmert sich um die Selektion und schreibt den aktuellen Wert etwa in ein bestehendes anderes Formular-Feld für diesen Zweck.

Die Selektion:
- Es gibt meines Wissens ohne zusätzliche Library keine fertige oder gar eine triviale Lösung.
- Es gibt viele Beispiele dazu im Internet zu finden.
- Es gibt viele verschiedene Möglichkeiten es im HTML umzusetzen.
- Interessant wäre es insbesondere, wenn die SQL-Listbox selbst zur Anzeige der Bilder gebracht werden kann.
  In diesem Fall würden die explizite JavaScript-basierte Selektion sowie das zusätzliche Formular-Feld zur Aufnahme des selektierten Wertes entfallen.

Liebe Grüße, Ingmar

:idea: I recommend you the new and up-to-date documentation for Joomla 4:
docs.joomla-5.visforms.vi-solutions.de/en/docs/
Most of this also applies retrospectively to Joomla 3.
Please only ask 1 question per topic :-).

:idea: Ich empfehle Dir die neue und aktuelle Dokumentation für Joomla 4:
docs.joomla-5.visforms.vi-solutions.de/docs/
Das meiste gilt rückwirkend auch für Joomla 3.
Bitte immer nur 1 Frage pro Thema stellen :-).
The following user(s) said Thank You: MaliRaj

More
3 months 1 week ago #10652 by MaliRaj
Hallo Ingmar, vielen Dank für deine Antwort. Genau so, bzw. ganz ähnlich habe ich es umgesetzt. Ist noch in der Testphase, aber sobald alles fertig ist, werde ich es hier dokumentieren.

Freundliche Grüße aus PM
Heinz
(Joomla 5.1.2 / Visforms+Subscription 5.12 / PHP 8.2)

More
2 months 2 weeks ago - 2 months 2 weeks ago #10738 by MaliRaj
Da alle Fallstricke inzwischen behoben sind, hier kurz die Umsetzung.
Die Aufgabe war, einem Datensatz eines Users ein passendes Bild zuzuordnen. Mit Klick auf ein Bild sollen diese vergrößert und wieder verkleinert werden. Ein zusätzlicher Button neben jedem Bild sorgt für die Auswahl und Übernahme des Dateinamen in ein verstecktes Feld 'imgSelected'. Die Bilder können ein bereits (von anderen Usern) hochgeladenes Bild, oder ein selbst hochzuladendes Bild sein. Um die Bildauswahl zu erleichtern, werden mehrere Listboxen als Filter genutzt. Im konkreten Fall sind es Orte, Zeiten und Gruppen, es könnten aber auch beliebige andere Bedingungen sein. Als "Bildergalerie" dient eine ListboxSQL 'tableField' mit der Option 'als Datenliste anzeigen' und 'Feld verstecken, wenn Liste leer ist' und 'Reload erlauben', die mit Hilfe der Filterfelder (Reloadfelder) die passenden Bilder dynamisch aus der Datenbank holt. Das SQL-Statement liefert  aus den Uploadfeldern gleich den "fertigen" kompletten Dateipfad. Das erledigt ein
Code:
SELECT    CONCAT(JSON_UNQUOTE(JSON_EXTRACT(`uploadField`, '$.folder')), '/', JSON_UNQUOTE(JSON_EXTRACT(`uploadField`, '$.file'))) as value,    CONCAT(JSON_UNQUOTE(JSON_EXTRACT(`uploadField`, '$.folder')), '/', JSON_UNQUOTE(JSON_EXTRACT(`uploadField`, '$.file'))) as label  FROM    `table`  WHERE    ... ;

in den Frontend Webassets sorgt dann JavaScript für die Anzeige der Bilder und der Auswahlbutton und steuert, was passieren soll:
Code:
//    Galerie-Tabellenansicht als Bildergalerie mit Auswahlmöglichkeit anzeigen //    + Vergrößern/Verkleinern mit Klick auf das Bild //    + Auswahl-Button neben jedem Bild (mit Übernahme der Bilddatei in ein "Speicherfeld" imgSelected //    + Mouseover beim Button zeigt den Dateipfad an $('#' + tableField).on('change', function() { // bei Änderung der Tabelle durch Reloadfelder ausführen     $(this).find('td').each(function() { // alle Tabellenzeilen abarbeiten         var imgPath = $(this).text();         var fileName = imgPath.split('/').pop().split('.').slice(0, -1).join('.');         var imgButton = '<button title="' + fileName + '">dieses Bild auswählen</button>';     //    Ersetzen des Bildpfades durch das Bild und dieses klickbar machen         $(this).html('<img src="' + imgPath + '" alt="' + fileName + '" title="klicken zum Vergrößern/Verkleinern" style="width: 390px; cursor: pointer;" />' + imgButton);         // Event-Handler für Klick auf das Bild         $(this).find('img').on('click', function() {             var currentWidth = $(this).css('width');             if (currentWidth === '390px') {    // Standardgröße                 $(this).css('width', 'auto'); // Bild vergrößern             } else {                 $(this).css('width', '390px'); // Bild verkleinern             }         });                  // Event-Handler für Klick auf den Button          $(this).find('button').on('click', function() {             // gewähltes Bild Übernehmen (z.Bsp. fileName in verstecktem Feld speichern             if ($('#' + imgSelected).val(fileName) !== $('#' + imgSelected).val()) {                 $('#' + imgSelected).val(fileName).change();                 //    console.log('ausgewählt wurde:', fileName); // Kontrollausgabe             }         });     }); });
Das ist zwar nur ein stark vereinfachtes Beispiel, vielleicht hilft es aber trotzdem weiter.


 

Freundliche Grüße aus PM
Heinz
(Joomla 5.1.2 / Visforms+Subscription 5.12 / PHP 8.2)
Last edit: 2 months 2 weeks ago by MaliRaj.
The following user(s) said Thank You: Administrator IV

Moderators: Administrator AVAdministrator IV
Powered by Kunena Forum