Zwei unterschiedliche Kontaktformulare

  • Hallo zusammen


    Habe mich die letzten zwei Tage mit dem Kontaktformular von Joomla auseinandergesetzt und stehe nun bei folgender Problematik an: Ich hätte gerne zwei Kontaktformulare, welche folgenden Inhalt haben sollten:


    1. Normales Kontaktformular mit den Standard-Feldern von Joomla (Name / E-Mail / Betreff / Nachricht) und ReCaptcha -> Dieses Formular steht und ist i.O.

    2. Erweitertes Formular mit CustomFields und ReCaptcha (dient zu einer Reservations-Anfrage) -> Problematik siehe unten


    Nach längerem "herumspielen" mit den CustomFields konnte ich dann schlussendlich die entsprechenden Felder nur meinem gewünschten zweiten Formular zuweisen. Was ich aber nicht hinbekomme, ist das Ausblenden der Joomla Standard-Felder in diesem Kontaktformular. Diese benötige ich hier nicht und hätte sie daher gerne allesamt ausgeblendet, sodass nur noch die CustomFields mit dem ReCaptcha und dem Senden-Button erscheint.


    Mir ist es wichtig, wenn nur irgendwie möglich das standard Kontakt-Formular von Joomla zu verwenden. Ich möchte ungern ein Modul/Plugin eines Drittherstellers verwenden, da ich mit solcher Software schon öfters Probleme hatte.


    Falls relevant: Die Positionierung des ReCaptchas ans Formular-Ende habe ich mit einem Override (default_form.php) gelöst / Seite ist mehrsprachig / Joomla-Version: 3.9.8


    Kann mir jemand bei meinem Anliegen weiterhelfen? Für eure Hilfe wäre ich wirklich sehr dankbar.


    Besten Dank & Gruss

    Manuel

  • Problematischer als eine Dritterweiterung ist dein veraltetes Joomla. Aktuell ist 3.9.26.

    Du solltest erst Mal diese Baustelle beheben. Dann sind auch Missverständnisse wegen unterschiedlicher Versionen kein weiteres Problem auf dem Weg zur Lösung.

  • Mir ist es wichtig, wenn nur irgendwie möglich das standard Kontakt-Formular von Joomla zu verwenden. Ich möchte ungern ein Modul/Plugin eines Drittherstellers verwenden, da ich mit solcher Software schon öfters Probleme hatte.

    Prinzipiell auch gut so.

    Allerdings würde ich nicht allgemein sagen, dass man mit Drittanbieter-Erweiterungen Probleme hat. Und sowieso sollte man nicht alle in einen Topf werfen.

    Ich verwende gerne Fox Contact. Damit habe ich auf keiner einzigen Webseite Probleme und es ist schnell eingerichtet. Es gibt aber eine Vielzahl anderer Formulare, die das genauso gut können.

    Bzgl. korrektem Funktionieren und Sicherheit sind Aktualisierungen allerdings Pflicht. Da kann ich mich nur dem schon Gesagten anschließen.

  • Hallo zusammen


    Erst einmal vielen Dank für eure Rückmeldungen.


    Problematischer als eine Dritterweiterung ist dein veraltetes Joomla. Aktuell ist 3.9.26.

    Du solltest erst Mal diese Baustelle beheben. Dann sind auch Missverständnisse wegen unterschiedlicher Versionen kein weiteres Problem auf dem Weg zur Lösung.

    -> Danke für den Hinweis -> habe die Aktualisierung auf 3.9.26 auch sogleich vorgenommen. Ist jetzt also wieder up-to-Date.


    Siehe zur Problematik RE: Kontaktformular E-Mail Felder ausblenden


    Auch die Posts drumrum.

    Sehr interessant. Bedeutet also schon einmal, dass mein Vorhaben zumindest aus technischer Sicht umsetzbar wäre. Ich befürchte einfach, dass dies bei mir aufgrund mangelnder Joomla-, resp. Programmier-Kenntnisse scheitern wird :( ...


    Frage: Du erwähnst in deinem Beitrag aus dem anderen Post eine «veraltete Anleitung» betreffend des notwendigen Plugins -> Gibt es eine Möglichkeit diese trotzdem einmal einzusehen :saint: oder kann man sonst irgendwo mehr darüber erfahren?


    Wieder bereits im Voraus besten Dank für die geschätzte Hilfe.

  • ... 2. Erweitertes Formular mit CustomFields und ReCaptcha (dient zu einer Reservations-Anfrage) ...


    Nach längerem "herumspielen" mit den CustomFields konnte ich dann schlussendlich die entsprechenden Felder nur meinem gewünschten zweiten Formular zuweisen. Was ich aber nicht hinbekomme, ist das Ausblenden der Joomla Standard-Felder in diesem Kontaktformular. Diese benötige ich hier nicht und hätte sie daher gerne allesamt ausgeblendet, sodass nur noch die CustomFields mit dem ReCaptcha und dem Senden-Button erscheint.


    Falls relevant: Die Positionierung des ReCaptchas ans Formular-Ende habe ich mit einem Override (default_form.php) gelöst

    Bitte den Code sowie am besten auch den Dateinamen mit Dateipfad des obigen Override(default_form.php) hier im Forum posten damit man den benötigten Code ergänzen kann.


    Kannst du uns einen Link zum zweiten Formular geben ?

  • «veraltete Anleitung» betreffend des notwendigen Plugins -> Gibt es eine Möglichkeit diese trotzdem einmal einzusehen

    https://ghsvs.de/programmierer…eigene-felder-hinzufuegen


    Aber es führt halt in die falsche Richtung, weil du ja keine eigenen Felder über Plugin hinzufügen willst.


    Dreh- und Angelpunkt für dein Anliegen bleibt aber trotzdem die auch beschriebene Methode

    Code
    onContentPrepareForm()

    Da gehören diese Zeilen rein, um ein Feld


    - nicht mehr als Pflichtfeld zu haben (auch beim Absenden nicht), z.B.

    Code
    $form->setFieldAttribute('contact_subject', 'required', 'false');

    - zu verstecken:

    Code
    $form->setFieldAttribute('contact_subject', 'hidden', 'true');

    - mit einem Wert zu belegen

    Code
    $form->setFieldAttribute('contact_subject', 'default', 'Blah blah blah');
  • Bitte den Code sowie am besten auch den Dateinamen mit Dateipfad des obigen Override(default_form.php) hier im Forum posten damit man den benötigten Code ergänzen kann.


    Kannst du uns einen Link zum zweiten Formular geben ?

    Einen Link kann ich leider nicht zur Verfügung stellen, da die Formulare in aktuellem Zustand nicht online gestellt werden können.

    Der Pfad zur genannten Override-Datei wäre folgender: templates/joomspirit_107/html/com_contact/contact/default_form.php

    Und der Inhalt (ich hoffe ich füge diesen Forums-gerecht ein :S :(


    Wie hast du dies gelöst bzw. umgesetzt ?

    Wie es Re:Later bereits vermutet hat, konnte ich dies mit den Kontaktkategorien lösen. Sicherlich für einen Joomla-Kenner eine Kleinigkeit – ich kannte aber bis vor kurzem noch nicht mal die Möglichkeit der CustomFields.



    Re:Later: Ok, Danke für die Info. Hatte das falsch interpretiert – dachte mit "eigenen Feldern" wären die CustomFields gemeint.


    In welcher Datei müssen dann diese Code-Bestandteile ergänzt werden? Soweit ich das verstehe, muss das auch für jedes der Joomla-Felder erledigt werden (was eigentlich auch naheliegend ist). Und dann noch eine Verständnisfrage: Wie steuere ich denn, dass diese Anpassungen nur auf das eine der zwei Formulare Auswirkungen hat?

  • Lösung1: (Die Brechstangenmethode):


    Die Datei:

    templates/joomspirit_107/html/com_contact/contact/default_form.php


    wie nachfolgend im Spoiler ersichtlich "befüllen" oder ergänzen:


    Danach wirst du dich eventuell wundern da die Änderung noch auf alle Kontaktformulare wirkt was du an der Eintragung im Betreff-Feld der beiden Kontaktformulare im Frontend siehst und dadurch schon mal sicher ist das diese Datei auch soweit funktioniert.


    Damit die Formulare unterschieden werden können wird noch der alias des Kontaktes benötigt bei dem das Formular2 benutzt werden soll.


    Wenn du dir im Frontend dann das Kontaktformular2 genau ansiehst ist wird direkt am Anfang des Kontaktformulars der alias des Kontaktes ausgegeben z.B. ähnlich wie:


    k2


    Dieser alias der dir im Formular2 angezeigt wird brauchst du um ihn in der if Zeile einzusetzen da ich dort nur einen "Platzhalter" eingetragen habe.


    Beispiel: Es wird dir im Formular2 folgendes angezeigt:


    meinkontakt2


    änderst du in obiger Datei zu:


    Code
    if ( ($this->contact->alias) === 'meinkontakt2' ) :

    Anschließend löscht du in obiger Datei dann die Kommentarzeichen am Anfang der beiden Zeilen:

    if

    endif


    also z.B. anstatt

    // endif;

    nur noch

    endif;


    womit die Datei dann nur noch beim Kontakt mit dem entsprechenden alias im Formular die Eintragung im Betreff-Feld des Kontaktformulares im Frontend durchführt, wenn du alles bis hierhin richtig gemacht hast.


    Dann kannst du die Zeile die mit echo beginnt und dir den alias des Kontaktes im Formular ausgegeben hat auskommentieren also z.B.

    // echo $this->contact->alias ;

    statt

    echo $this->contact->alias ;


    und die Kommentarzeichen entfernen am Anfang aller Zeilen die beginnen mit :

    // $this->form


    Falls gewünscht kannst du zuvor oder auch später noch die default-Werte für die entsprechenden

    Standard-Kontaktformularfelder in diesen Zeilen ändern.

    Nur wenn du mail@example.com nicht möchtest:

    Nimm dann aber auf jeden fall eine "formal gültige" mailadresse weil sich das Formular sonst nicht absenden lässt.

    Wenn du z.B. nur "mail" anstatt "mail@example.com" einträgst.



    Lösung 2: (Die normale Variante)


    Kopiere bzw. erstellen z.B. folgender 2 Dateien :


    Die Datei aus:

    components/com_contact/views/contact/tmpl/default.php

    kopieren oder umbennenen in:

    templates/joomspirit_107/html/com_contact/contact/default2.php


    Inhalt in dieser Datei default2.php ist dann identisch wie:

    https://github.com/joomla/joom…/contact/tmpl/default.php


    Datei aus:

    components/com_contact/views/contact/tmpl/default.xml

    kopieren in:

    templates/joomspirit_107/html/com_contact/contact/default2.xml


    Inhalt in default2.xml ist dann wie

    https://github.com/joomla/joom…/contact/tmpl/default.xml


    In der default2.xml änderst du dann die Zeile:


    <layout title="COM_CONTACT_CONTACT_VIEW_DEFAULT_TITLE" option="COM_CONTACT_CONTACT_VIEW_DEFAULT_OPTION">


    änderst du ab in


    <layout title="COM_CONTACT_CONTACT_VIEW_DEFAULT_TITLE2" option="COM_CONTACT_CONTACT_VIEW_DEFAULT_OPTION">


    Damit steht dir im Backend ein neuer Menüeintragstyp zur Verfügung und siehe dann z.B. unter Menüs -> Alle Menüeinträge -> Neu -> Menüeintragstyp -> auswählen -> Kontakte -> COM_CONTACT_CONTACT_VIEW_DEFAULT_TITLE2


    Dieser Menüeintragstyp ist aber dann in der Funktion noch identisch wie der ursprüngliche Joomla-Core-Menüeintragstyp


    Damit die gewünschte Änderungen fürs Formular2 mit diesem neuen Menüeintragstyp erfolgen mußt du die default2.php wie folgt noch mit Code ergänzen:


    Da es sonst über 270 Zeilen Code wären habe ich nur die ersten Zeilen oben verwendet damit du weist wo die Code-Ergänzung hin muß in der default2.php


    Natürlich mußt du den bisher vorhandenen Menüeintrag für den Kontakt mit Kontaktformular2 noch mit dem neuen Menüeintragstyp verwenden oder einen neuen Menüeintrag erstellen mit einem Kontakt bei dem das Kontaktformular2 verwendet werden soll.


    Und zum Schluß noch die Kommentarzeichen entfernen am Anfang aller Zeilen der Code-Ergänzung die beginnen mit :

    // $this->form

    damit diese auch noch ausgeführt werden.


    Wenn es dich stört kannst du dem Sprachschlüssel:

    COM_CONTACT_CONTACT_VIEW_DEFAULT_TITLE2

    per Sprach-Override

    noch eine "Übersetzung" geben damit dir eben z.b. "Formular2" statt dem Sprachschlüssel im Backend ausgegeben wird.


    Weitere Ergänzungen sind natürlich in beiden Lösungen denkbar.


    Ich hoffe ich habe keine Tippfehler oder sonstige Fehler eingebaut.

  • ...Soweit ich das verstehe, muss das auch für jedes der Joomla-Felder erledigt werden...

    Die erforderlichen Daten habe ich in meinem obigen post#11 schon verwendet und findet man übrigens in "name" dort:


    https://github.com/joomla/joom…/models/forms/contact.xml

  • In der Lösung2 im post#11 habe ich leider erst jetzt noch einen kleinen Fehler entdeckt.

    Es müßte richtig lauten:


    Die Datei aus:

    components/com_contact/views/contact/tmpl/default.php

    kopieren und umbennenen in:

    templates/joomspirit_107/html/com_contact/contact/default2.php

  • Sehe gerade das ich in Lösung 2 in #11 ja wohl noch einen Fehler eingebaut habe.


    in der templates/joomspirit_107/html/com_contact/contact/default2.php müßte nur


    <?php echo $this->loadTemplate('form'); ?>


    durch


    <?php echo $this->loadTemplate('form2'); ?>


    ersetzt werden.


    Und in einer weiteren zu erstellenden Template-Datei


    templates/joomspirit_107/html/com_contact/contact/default_form2.php


    deren Inhalt identisch ist wie:


    github.com/joomla/joomla-cms/blob/3.10.11/components/com_contact/views/contact/tmpl/default_form.php


    müßen dann noch die gewünschten Formular-Manipulations-Änderungen an der selben stelle wie in der Lösung 1 eingetragen werden anstatt in der defaul2.php wo sie ja keine wirkung haben können.