Joomla 5 Mitteilung

Wir freuen uns mitteilen zu können, dass seit dem 29. Januar 2024 alle unsere Joomla Erweiterungen mit Joomla 5 kompatible sind.

Für alle die gerade noch von Joomla 3 auf 4 aktualisieren: Anleitungen für die Joomla 4 Migration gibt es hier:

Es gibt nun auch eine eigenständige Dokumentation für Visforms für Joomla 4 und für Visforms auf Joomla 5

Forum

Visforms Subscription Inhaber können in unserem Forum Fragen stellen. Bitte mit dem entsprechenden Benutzer anmelden.
Jeder kann lesend auf das Forum zugreifen.

Bitte stellen Sie nur 1 Frage pro Thema.

Wichtige Angaben für fast jede Frage:
V1: Welche Visforms-Version läuft?
V2: Welche Joomla-Version läuft?
V3: Welche PHP-Version läuft?

Mehrere Datensätze bearbeiten

Mehr
3 Monate 2 Wochen her #11395 von Administrator IV
Administrator IV antwortete auf Mehrere Datensätze bearbeiten
Hallo martin_vo,

Zu: Fragen zu Antwort A.

Die Lösung erfolgt direkt über JavaScript und wird über die Webassets in die betroffenen Seite mit der Daten-Liste geladen.
Dieser JavaScript-Code in den FEWAs kümmert sich um alles, was unter Antwort A gelistet wird.

Zu: Wie kann ich eine "ja ich will" Meldung anzeigen.

Dazu gibt es in der Dokumentation 14 JavaScript-Beispiele, verteilt auf 3 Seiten.

Insbesondere das folgende Beispiel, setzt deine Anforderungen fast vollständig um:
- Auf das Abschicken des Formulars reagieren.
- Einen benutzerdefinierten Event-Handler für das Abschicken des Formulars setzen.
- Das Abschicken des Formulars verhindern.
- Eine Meldung an den Benutzer zeigen.

Einen Spambot Honeypot einrichten:
docs.joomla-5.visforms.vi-solutions.de/d...-honeypot-einrichten

Um eine 'Ja/Nein'-Meldung im Browserfenster anzuzeigen, verwendest du in JavaScript die window.confirm() Methode.
Sie zeigt ein Dialogfenster mit einer Nachricht und den Buttons 'OK' (Ja) und 'Abbrechen' (Nein) an.
Sie gibt true zurück, wenn der Benutzer 'OK' klickt, und false, wenn er 'Abbrechen' klickt.
Code:
if(window.confirm('meine Ja/Nein-Meldung')) {     // code für: ich will } else {     // code für: ich will nicht }

Oder über eine Suche mit Google.
Window: confirm() method:
developer.mozilla.org/en-US/docs/Web/API/Window/confirm

Zu: Fragen zu Antwort B.

Ich hatte dir in meiner Antwort die Links zur Dokumentation zum Thema 'Visforms Custom-Plugin' genannt.
Dort wird unter allem anderen auch beschrieben, wie eine Kopie des Visforms Custom-Plugin Template erstellt wird.
Eine Kopie des Visforms Custom-Plugin Template erstellen:
docs.joomla-5.visforms.vi-solutions.de/d...-plugin-development/

Zitat:

Vorsicht: Das Visforms Custom-Plugin Template wird ständig weiterentwickelt.
Bei jeder Art der Installation wird das Visforms Custom-Plugin überschrieben.
Falls Sie Änderungen an dem Visforms Custom-Plugin durchgeführt haben, gehen dabei alle Änderungen ohne vorherige Nachfrage verloren.

Hinweis: Arbeiten Sie mit einer Kopie des Visforms Custom-Plugin Templates in allen Situationen, in denen Ihre Änderungen nicht verloren gehen dürfen.
Wie Sie eine Kopie des Visforms Custom-Plugin Templates erstellen wird hier erklärt: ...

Zu: Können die PHP-Dateien direkt im Joomla-Backend bearbeitet/erstellt werden.

An irgendeiner Stelle müssen die Dateien in einem Joomla-Backend bearbeitet und während der Arbeit auch ständig getestet/debugged werden.
Diese Arbeiten können in einer lokalen Joomla-Instanz oder auf einer remote Instanz bei deinem Provider durchgeführt werden.
Arbeite aber niemals auf einer produktiven remote Instanz bei deinem Provider.
Wir entwickeln ausschließlich auf lokalen Joomla-Instanzen in einer Mischung aus Windows-basierten und Linux-basierten Systemen.
Wichtig ist, dass du die Wirkungen deiner Änderungen am Code sofort und unkompliziert in Browser sehen und überprüfen und nachvollziehen kannst.

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 :-).

Mehr
1 Monat 20 Stunden her #11665 von martin_vo
martin_vo antwortete auf Mehrere Datensätze bearbeiten
Danke für die Hilfe :) Ich habe novh folgendes Problem:

Ich möchte aus den Visform Webassets mein Custom Plugin mittels Ajax-Aufruf ansprechen.Leider kommt mein Aufruf nicht an. Im Frontend funktioniert die Darstellung der Checkbox je Tabelleneintrag und auch das Auswählen eines Status per Dropdown sowie der zugehörige confirm-dialog. Nun soll nach Bestätigen des Confirms-Dialog ein Ajax-Call an das Custom Plugin erfolgen, damit dort die geänderten Werte in der Datenbank gespeichert werden können. Im Moment sieht mein Aufruf folgendermaßen aus: fetch('index.php?option=com_ajax&plugin=vftestplugin&format=json&task=onAjaxVftestplugin', {    method: 'POST',    headers: {        'X-Requested-With': 'XMLHttpRequest'    },    body: JSON.stringify({                ids: selectedIds,                status: selectedValue            })}).then(response => response.json()).then(data => {    console.log("Antwort vom Plugin:", data);    alert("Antwort: " + data.message);}).catch(err => {    console.error("AJAX Fehler:", err);});  Ich hab ein Plugin namens vftestplugin erstellt und die Dateien vftestplugin.xml, provider.php und vftestplugin.php angepasst. In der vftestplugin.php habe ich meine Verarbeitungsschritte in eine Methode onAjaxVftestplugin gepackt.Ich bin mir allerdings nicht sicher ob, dort alle Bedingungen richtig erfüllt sind bzw. was alles getan werden muss, um das Plugin bzw. die Methode zu registrieren. Folgendermaßen sieht meine Datei aus: class Vftestplugin extends CMSPlugin implements SubscriberInterface {     public static function getSubscribedEvents(): array {        return [            'onAjaxVftestplugin' => 'onAjaxVftestplugin',        ];    }  /**     * AJAX-Handler für com_ajax?plugin=vftestplugin     */    public function onAjaxVftestplugin(){   return new JsonResponse([            'success' => true,            'message' => 'AJAX ist angekommen im Plugin!',            'time' => date('Y-m-d H:i:s')        ]); . . .  }}

Mehr
1 Monat 1 Stunde her #11667 von Administrator IV
Administrator IV antwortete auf Mehrere Datensätze bearbeiten
Hallo  martin_vo,

ich hatte zu Beginn des Posts ein Schritt-für-Schritt Szenario für die Entwicklung erstellt.
Der folgende Punkt war leider nicht ganz korrekt.

A: JavaScript im Web-Browser, Teil 1:
- Sendet einen AJAX-Request mit den gewählten Daten-IDs und dem gewählten Status an das Custom-Plugin.

Es muss stattdessen wie folgt lauten:
- Sendet einen AJAX-Request mit den gewählten Daten-IDs und dem gewählten Status an eine kleine eigene Controller-Klasse.

Ein AJAX-Request kann nur im Rahmen der Joomla-MVC Logik empfangen werden.
Du braucht allerdings nur die Controller-Klasse und keine Modell-Klasse und keine View-Klasse.
Im Folgenden ein lauffähiges minimal kleines Beispiel für einen eigenen AJAX-Request an eine eigenen kleine Controller-Klasse.

Aus Sicherheitsgründen ist im Beispiel die Auswertung des Joomla Session-Sicherheits-Tokens durch die Controller-Klasse enthalten.
Ohne diese Auswertung wäre der AJAX-Request vollkommen ungeschützt und nicht empfehlenswert.

Einen AJAX-Request an eine kleine eigene Controller-Klasse senden:

Die folgende Datei enthält deine eigene Controller-Klasse für Visforms:
components/com_visforms/src/Controller/MyController.php

Der folgende Code ist der Inhalt deiner Controller-Datei MyController.php:
Code:
<?php namespace Visolutions\Component\Visforms\Site\Controller; defined('_JEXEC') or die('Restricted access'); use Joomla\CMS\Application\CMSApplicationInterface; use Joomla\CMS\MVC\Factory\MVCFactoryInterface; use Joomla\CMS\Session\Session; use Joomla\Input\Input; class MyController extends BaseFormController {     protected $formModel;     public function __construct($config = [], MVCFactoryInterface $factory = null, ?CMSApplicationInterface $app = null, ?Input $input = null) {         parent::__construct($config, $factory, $app, $input);         $this->formModel = $this->getModel('Visforms', 'Site');     }     public function test() {         // get data         $json = $_POST['data'];         $data = json_decode($json);         // test session token         if (!isset($data->token) || Session::getFormToken() !== $data->token) {             $response = array("success" => false, "message" => "Invalid Token");             echo json_encode($response);             $this->app->close();             return;         }         // send response         $response = array("success" => true);         echo json_encode($response);         $this->app->close();     } }

Der folgende JavaScript Code zeigt die Hilfs-Funktion sendAjax(), die einen AJAX-Request mit Nutzdaten sendet und das Ergebnis empfängt und in die Konsole schreibt.
Code:
function sendAjax() {     const fid = jQuery('form.visform').attr('id');     const token = jQuery("form.visform input[type='hidden']:last-child").attr('name');     // prepare data to send     var data = 'data=' + JSON.stringify({parameter1: 'value1', parameter2: 'value2', token: token});     jQuery.ajax({         type: 'POST',         // mandatory data: input 'id' is form id and used to initialize VisformsModel in Controller         url: 'index.php?option=com_visforms&task=my.test&format=raw' + '&id=' + fid,         data: data,         success: function (data, textStatus, jqXHR) {             console.log('ajax success');             console.log(data);         },         error: function (jqXHR, textStatus, errorThrown) {             console.log('ajax error');             console.log(jqXHR.responseText);         },         dataType: 'json',         async: true     }); }

Die JavaScript Funktion sendAjax() macht das Folgende:

- Ermittelt die Formular-ID.
- Schreibt die Formular-ID in die Aufrufs-URL (url) als URL-Parameter (&id=) zu  späteren Verwendung durch das VisformsModel.
- Ermittelt den Session-Sicherheits-Token und fügt ihn den Nutzdaten hinzu (data).
- Sendet den AJAX-Request an den Controller MyController an seine Funktion test(): task=my.test.
  Der Controller muss 'MyController' heißen (task=my) und im Verzeichnis 'components/com_visforms/src/Controller/' liegen (option=com_visforms)
  Die Funktion im Controller muss test() heißen (task=my.test).
- Wartet und Empfängt das Ergebnis.
- Schreibt das Ergebnis in die Web-Browser-Konsole.

Die Controller-Klasse 'MyController' macht das Folgende:

Konstruktor:
- Initialisiert den Basis-Controller.
- Initialisiert das Visforms Modell für das Frontend: components/com_visforms/src/Model/VisformsModel.php.
Funktion test():
- Ermittelt die Nutzdaten und konvertiert diese von JSON in ein PHP stdClass-Objekt.
- Testet auf das korrekte Joomla Session-Sicherheits-Token.
- Sendet eine Erfolgsmeldung zurück.

Hiermit hast du ein vollständiges lauffähiges Beispiel für Aufruf, Backend-Empfang, Bearbeitung und Client-Empfang des Ergebnisses für einen AJAX-Request.

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 :-).

Mehr
3 Wochen 3 Tage her #11683 von martin_vo
martin_vo antwortete auf Mehrere Datensätze bearbeiten
Hallo,

danke, jetzt klappt es wie gewünscht.

Ich habe jetzt allerdings das Problem, dass keine E-Mails versendet werden, sobald die Datensätze über die Checkbox-Funktion geändert werden.

Gruß
Martin

Mehr
3 Wochen 2 Tage her #11689 von Administrator IV
Administrator IV antwortete auf Mehrere Datensätze bearbeiten
Hallo Martin,

ich freue mich, dass du es mit meinem Rumpf-Code umsetzen konntest.
Wie du feststellen kannst, verläuft die Umsetzung deiner ursprünglichen Anforderung schlussendlich sehr direkt.

Etwas anders ist es, wenn du die konfigurierten E-Mails versenden möchtest, ganz analog zu den Visforms-Backend-Prozessen nach dem Absenden eines Formulars.
Dazu müsstest du gewaltig ausholen, den Visfroms-Code verstehen, von verschiedenen Stellen kopieren und zusammentragen und an deine Bedürfnisse anpassen.

Die Visforms-Backend-Prozesse die nach dem Absenden eines Formulars ablaufen, benötigen nicht nur allein einen simplen Datensatz bzw. die übermittelten Formular-Daten.
Sie benötigen das gesamte geladene Formular und alle Felder in Laufzeit-Objekten.

Das geladene Formular enthält die komplette Formular-Konfiguration sowie auch alle Feld-Konfigurationen und Feld-Werte in verschiedenen Darstellungen.
Wie sollten auch sonst ohne diese Informationen alle Funktionen ausgeführt werden können.

Das Laden des kompletten Formulars sowie der Anstoß bestimmter Funktionen, wie der E-Mail-Versand mit allen seinen Feature, benötigen tiefgreifende Visforms-Code-Kenntnisse.
Mit einem einfachen Rumpf-Code ist dir hier nicht länger geholfen.

Zusätzlich komm hinzu, dass wir den Visforms-Code auf Joomla 6 umstellen, alles Deprecated entfernen und Code-Strukturen anpassen.
Die Vorbereitungen und Umstellungen für Joomla 6 sind tiefgreifend und erfolgen in Schritten.

Ich kann dir insbesondere aus diesem Grund im Moment leider nicht raten, den aktuellen Code zu kopieren und umzuschreiben.
Denn der aktuelle Code wird sich für die nächsten Releases auch in den für dich betroffenen Bereichen strukturell ändern.

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 :-).
Folgende Benutzer bedankten sich: martin_vo

Moderatoren: Administrator AVAdministrator IV
Powered by Kunena Forum